Back

K8s_Clientset01

Clientset 访问 k8s 集群资源对象

Client-go 是一个调用 k8s 集群资源对象 API 的客户端,及通过 Client-go 实现对资源对象的增删改查(CRUD).四类客户端:RestClient, ClientSet, DynamicClient, DiscoveryClient(此处只介绍 ClientSet 的用法)。


一,Clientset —— out of cluster

通过 config 文件让集群外部的应用可以访问到集群内部的资源对象 。

1, 配置 config 文件(把 master 上的配置文件复制到本地)

// 在本地执行
$ scp -r centos@10.20.9.60:/home/centos/.kube /home/ldsdsy/

// 此时 ~ 目录下会多一个 .kube 文件夹,里面包含 config 文件

2, 编写代码

package main

import (
	"context"
	"flag"
	"fmt"
	"path/filepath"

	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/tools/clientcmd"
	"k8s.io/client-go/util/homedir"
)

func main() {
	var kubeconfig *string
    // 默认会从 ~/.kube/config 路径下获取配置文件
	if home := homedir.HomeDir(); home != "" {
		kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(optional) absolute path to the kubeconfig file")
	} else {
		kubeconfig = flag.String("kubeconfig", "", "absulute path to the kubeconfig file")
	}
    // 把用户传递的命令行参数解析为对应变量的值
	flag.Parse()

	// 使用 k8s.io/client-go/tools/clientcmd 生成 config 的对象
	config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
	if err != nil {
		panic(err.Error())
	}

	// 使用 k8s.io/client-go/kubernetes 生成一个 ClientSet 的客户端
    // 客户端生成后,就可以使用这个客户端与 k8s API server 进行交互了,进行 CRUD 操作。
	clientset, err := kubernetes.NewForConfig(config)
	if err != nil {
		panic(err.Error())
	}

	// get pod
	pods, err := clientset.CoreV1().Pods("").List(context.TODO(), metav1.ListOptions{})
	if err != nil {
		panic(err.Error())
	}
	for _, pod := range pods.Items {
		fmt.Printf("pod.name:%v\n", pod.Name)
	}
}

3, 运行

$ go run main.go
pod.name:nfs-client-provisioner-6d9b86b854-pcb9v
pod.name:coredns-545d6fc579-2kn79
pod.name:coredns-545d6fc579-mpzqg
pod.name:etcd-ml-k8s-1.novalocal
pod.name:fabric-node-2gnjf
pod.name:fabric-node-s92ds
···
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy