传统的 Kubernetes 交互方式
传统的 Kubernetes 交互方式众所周知,与 Kubernetes 交互的方式主要有以下几种:kubectl 命令行Kubectl 是官方提供的命令行工具,用于与 Kubernetes 集群进行交互。比如要获取 default 命名空间下的 Pods 信息,命令如下:
1 2 3
| kubectl get po NAME READY STATUS RESTARTS AGE ng-test-abcd-xyz 1/1 Running 0 13d
|
这种方式是用户最常使用的。
SDK
Kubernetes 官方还提供了客户端 SDK,让程序员可以通过编程接口与 Kubernetes 交互。由于 Kubernetes 是用 Go 语言编写的,因此最流行的 SDK 是 client-go。以下是通过 client-go 列出 default 命名空间下 Pods 的示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| package main
import ( "context" "fmt" "log"
corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes" "k8s.io/client-go/tools/clientcmd" )
func main() { config, err := clientcmd.BuildConfigFromFlags("", "/root/.kube/config") if err != nil { log.Fatal(err) }
clientset, err := kubernetes.NewForConfig(config) if err != nil { log.Fatal(err) }
pods, err := clientset.CoreV1().Pods("default").List(context.TODO(), metav1.ListOptions{}) if err != nil { log.Fatal(err) }
for _, pod := range pods.Items { fmt.Printf("Namespace: %v, Name: %v\n", pod.Namespace, pod.Name) } }
|
运行结果如下:
1
| Namespace: default, Nmae: ng-test-abcd-xyz
|
GUI
如果觉得命令行不够直观,用户还可以使用 Kubernetes 官方的 Dashboard 或类似 Kuboard 这样的图形化界面进行操作。
前端 GUI 通过预设的 REST API 与后端服务器交互,后端服务器再通过 client-go 访问 Kubernetes,最终将结果返回前端展示在 GUI 上。无论使用哪种方式,核心都是通过访问 Kubernetes 的 API server 来实现的。举个例子,我们可以用 curl 命令直接与 Kubernetes API 交互:
1 2
| curl -k -H "Authorization: Bearer xxxxxxxxxxxxxxxxxx" \ > https://<your k8s server ip>:<your k8s server port>/api/v1/namespaces/default/pods
|