文章目录

简介

我们可以使用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集群:

    clientSet, err := kubernetes.NewForConfig(k8sConfig)
    
  • 调用k8s api获取集群资源信息
    有了客户端以后,我们就可以访问k8s的资源并对其进行操作,这里我们获取一下集群的节点信息:

    nodes, err := clientSet.CoreV1().Nodes().List(context.TODO(),metav1.ListOptions{})
    

    上述代码得到的信息相当于命令:kubectl get nodes -o yaml

  • 打印得到的资源信息,我们可以把节点的名字遍历一下打印出来看看:

    for _,node := range nodes.Items {
    	fmt.Println(node.Name)
    }
    

    输出即为k8s集群的节点列表。

Logo

开源、云原生的融合云平台

更多推荐