Kubernetes编程—— 开发者眼中的自定义资源 —— Operator SDK 和 Kubebuilder 的 controller-runtime 客户端
Operator SDK 和 Kubebuilder 的 controller-runtime 客户端
这种客户端是单一实例,可以用于处理任何在指定 Scheme 中注册的 kind。
它使用 API 服务器提供的服务发现信息来把不同的 kind 映射到不同的 HTTP 路径上。我们后面还会进一步了解这种客户端在两种不同的 Operator 实现方案中的使用细节。
下面举个 controller-runtime 的一个简单示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | package main import ( "context" "flag" "fmt" corev1 "k8s.io/api/core/v1" "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/tools/clientcmd" "sigs.k8s.io/controller-runtime/pkg/client" ) func main() { ctx := context.Background() kubeconfigPath := flag.String( "kubeconfig" , "/root/.kube/config" , "path to kubeconfig file" ) flag.Parse() config, err := clientcmd.BuildConfigFromFlags( "" , *kubeconfigPath) if err != nil { fmt.Println(err) // 使用fmt记录错误并终止程序 return } cl, err := client.New(config, client.Options{Scheme: scheme.Scheme}) if err != nil { fmt.Println(err) // 使用fmt记录错误并终止程序 return } podList := &corev1.PodList{} err = cl.List(ctx, podList) if err != nil { fmt.Println(err) // 使用fmt记录错误并终止程序 return |
这段代码是用Go语言编写的,用于与Kubernetes集群交互并获取Pod的信息。下面我会对代码进行逐行解析。
-
导入必要的包:
-
context
:用于创建和管理上下文,这对于处理异步操作和超时非常有用。flag
:用于处理命令行参数。fmt
:用于格式化输出。k8s.io/api/core/v1
:Kubernetes的核心API。k8s.io/client-go/kubernetes/scheme
:用于构建Kubernetes客户端的Scheme。k8s.io/client-go/tools/clientcmd
:用于从kubeconfig文件创建配置。sigs.k8s.io/controller-runtime/pkg/client
:用于与Kubernetes集群交互的客户端。
-
定义
main
函数。 -
创建一个上下文对象
ctx
,它在整个程序中用于跟踪和控制请求的生命周期。 -
定义一个命令行参数
kubeconfigPath
,它是kubeconfig文件的路径。默认路径是/root/.kube/config
。 -
解析命令行参数。
-
从指定的kubeconfig路径构建配置。
-
使用配置创建
client
对象,该对象用于与Kubernetes集群交互。 -
定义一个Pod列表对象
podList
,该对象用于存储从Kubernetes集群获取的Pod信息。 -
使用
client
对象从Kubernetes集群获取Pod列表。 -
如果在获取Pod列表时发生错误,使用
fmt.Println
记录错误并终止程序。 -
如果没有错误,则打印获取到的Pod列表信息。
-
运行程序后:
分类:
Kubernetes编程专题精讲
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具