client-go 连接k8s
zhanghao@zhanghaodeMacBook-Air Demo1 % tree
.
├── etc
│ └── kube.conf
├── go.mod
├── go.sum
└── main.go
main.go
package main
import (
"context"
"fmt"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
"log"
)
func main() {
//k8s 集群访问文件路径
configPath := "etc/kube.conf"
//在 kubeconfig 中使用当前上下文环境,config 获取支持 url 和 path 方式,通过 BuildConfigFromFlags() 函数获取 restclient.Config 对象,用来下边根据该 config 对象创建 client 集合
config, err := clientcmd.BuildConfigFromFlags("", configPath)
if err != nil {
fmt.Println(err)
}
//根据获取的 config 来创建一个 clientset 对象。通过调用 NewForConfig 函数创建 clientset 对象。
//NewForConfig 函数具体实现就是初始化 clientset 中的每个 client,基本涵盖了 k8s 内各种类型
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
log.Fatal(err)
}
//通过实现 clientset 的 CoreV1Interface 接口列表中的 PodsGetter 接口方法 Pods(namespace string) 返回 PodInterface
PodInterface 接口拥有操作 Pod 资源的方法,例如 Create、Update、Get、List 等方法
注意:Pods() 方法中 namespace 不指定则获取 Cluster 所有 Pod 列表
// 获取default命名空间下所有的pod
podList, err := clientset.CoreV1().Pods("default").List(context.Background(), metav1.ListOptions{})
for _, pod := range podList.Items {
// 打印pod的名字
fmt.Println(pod.Name)
}
}
如果不清楚资源是对应的那个结构可以kubectl api-resources 命令查看