我用的k8s api版本是v0.22.3

package main

import (
	"context"
	"flag"
	"fmt"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/client-go/kubernetes"
	"k8s.io/client-go/rest"
	"k8s.io/client-go/tools/clientcmd"
	"os"
	"path/filepath"
)

func main() {


	// 声明error,也可以不声明后面直接用 err:=的方式
	var err error

	// 定义kubeconfig,这里用*string的原因是flag.String的返回值为*string
	var kubeconfig *string

	// 定义config用于初始化clientset
	var config *rest.Config

	// 打印家目录
	fmt.Println(homeDir())

	// 外部传入家目录,如果不传入使用默认家目录
	if home := homeDir(); home != "" {
		kubeconfig = flag.String("kubeconfig", filepath.Join(home, ".kube", "config"), "(可选)输入kubeconfig的绝对路径")
	} else {
		kubeconfig = flag.String("kubeconfig", "", "输入kubeconfig的绝对路径")
	}
	// 解析输入的配置
	flag.Parse()

	fmt.Println(*kubeconfig)

	// 创建集群配置
	// 使用sa创建集群配置(InCluster模式)
	if config, err = rest.InClusterConfig(); err != nil {
		// 使用kubeconfig文件创建集群配置
		if config,err = clientcmd.BuildConfigFromFlags("",*kubeconfig);err != nil{
			panic(err.Error())
		}
	}

	//创建clientset
	clientset,err := kubernetes.NewForConfig(config)
	if err != nil {
		panic(err.Error())
	}

	//使用clientset获取Deployments
	deployments,err := clientset.AppsV1().Deployments("default").List(context.TODO(),metav1.ListOptions{})
	if err != nil {
		panic(err.Error())
	}
	for idx,deploy := range deployments.Items{
		fmt.Printf("%d---->%s\n",idx+1,deploy.Name)
	}

}

//获取家目录
func homeDir() string {
	if h := os.Getenv("HOME"); h != "" {
		return h
	}
	return os.Getenv("USERPROFILE") // windows
}

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐