天天看點

client-go入門之1:建立連接配接Kubernetes叢集的用戶端簡介使用

文章目錄

  • 簡介
  • 使用

簡介

我們可以使用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

  • 列印得到的資源資訊,我們可以把節點的名字周遊一下列印出來看看:
    for _,node := range nodes.Items {
    	fmt.Println(node.Name)
    }
               
    輸出即為k8s叢集的節點清單。

繼續閱讀