k8s_client-go 构建客户端的几种方式

kubernetes client-go 构建客户端的几种方式#

package callk8s

import (
	"context"
	"log"

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

type KConf struct {
	Configure string
	C         *kubernetes.Clientset
	NameSpace string
}

// NewCli 从指定配置文件中加载配置
func NewCli(confDir, namespace string) (*KConf, error) {
	var kconf KConf
	kconf.Configure = confDir
	kconf.NameSpace = namespace
	config, err := clientcmd.BuildConfigFromFlags("", kconf.Configure)
	if err != nil {
		log.Println(err)
		return &kconf, err
	}
	c, err := kubernetes.NewForConfig(config)
	if err != nil {
		log.Println(err)
		return &kconf, err
	}
	kconf.C = c
	return &kconf, nil

}

// NewFromBytes 从二进制内存中加载配置
func NewFromBytes(configBytes []byte, namespace string) (*KConf, error) {
	var kconf KConf
	nccfb, err := clientcmd.NewClientConfigFromBytes(configBytes)
	if err != nil {
		log.Println("Err: ", err)
		return &kconf, err
	}
	tmpf, err := nccfb.ClientConfig()
	if err != nil {
		log.Println("Err: ", err)
		return &kconf, err
	}
	kconf.C, err = kubernetes.NewForConfig(tmpf)
	if err != nil {
		log.Println("Err: ", err)
		return &kconf, err
	}
	return &kconf, nil
}

// RestClientFromSA 从pod sa 中获取 ,/var/run/secerts/kubernetes.io/serviceaccount/token
func RestClientFromSA() (*KConf, error) {
	var kconf KConf
	config, err := rest.InClusterConfig()
	if err != nil {
		log.Printf("Err: %v", err)
		return &kconf, err
	}
	kconf.C, err = kubernetes.NewForConfig(config)
	if err != nil {
		return &kconf, err
	}
	return &kconf, nil
}
posted @   尚墨  阅读(31)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2021-01-22 Golang 自用第三方库
2021-01-22 《Go 语言并发之道》读后感-第五章
2021-01-22 《Go 语言并发之道》读后感 - 第四章
点击右上角即可分享
微信分享提示
主题色彩