文章目錄
- 簡介
- 使用
簡介
我們可以使用Dashboard或kubectl來通路k8s的API,也可以使用程式設計語言,如Go,Java,Python作為用戶端來通路k8s。client-go是一個使用go語言編寫的庫,用來連接配接k8s叢集并對叢集資源進行操作。
使用
以下代碼使用go連上k8s叢集,并查詢叢集的節點資訊:
package main
import (
"fmt"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
)
func main() {
// 讀取配置檔案
home := GetHomePath()
k8sConfig, err := clientcmd.BuildConfigFromFlags("", fmt.Sprintf("%s/.kube/config", home)) // 使用 kubectl 預設配置 ~/.kube/config
if err != nil {
fmt.Printf("%v",err)
return
}
// 建立一個k8s用戶端
clientSet, err := kubernetes.NewForConfig(k8sConfig)
if err != nil {
fmt.Printf("%v",err)
return
}
// 查詢k8s叢集的節點資訊,相當于指令:kubectl get nodes -o yaml, 如果沒有管理者權限可能會失敗,可以改成查Pods的接口
// nodes, err := clientSet.CoreV1().Nodes().List(metav1.ListOptions{}) 老版本寫法
nodes, err := clientSet.CoreV1().Nodes().List(context.TODO(),metav1.ListOptions{})
if err != nil {
fmt.Printf("%v",err)
return
}
for _,node := range nodes.Items {
fmt.Println(node.Name)
}
}
func GetHomePath() string {
u , err := user.Current()
if err == nil {
return u.HomeDir
}
return ""
}
主要步驟:
- 讀取配置資訊
- 建立k8s用戶端根據配置資訊建立一個k8s用戶端,并連上k8s叢集:
-
調用k8s api擷取叢集資源資訊
有了用戶端以後,我們就可以通路k8s的資源并對其進行操作,這裡我們擷取一下叢集的節點資訊:
上述代碼得到的資訊相當于指令:
kubectl get nodes -o yaml
- 列印得到的資源資訊,我們可以把節點的名字周遊一下列印出來看看:
輸出即為k8s叢集的節點清單。for _,node := range nodes.Items { fmt.Println(node.Name) }