Kubernetes编程—— 开发者眼中的自定义资源 —— Operator SDK 和 Kubebuilder 的 controller-runtime 客户端
Operator SDK 和 Kubebuilder 的 controller-runtime 客户端
这种客户端是单一实例,可以用于处理任何在指定 Scheme 中注册的 kind。
它使用 API 服务器提供的服务发现信息来把不同的 kind 映射到不同的 HTTP 路径上。我们后面还会进一步了解这种客户端在两种不同的 Operator 实现方案中的使用细节。
下面举个 controller-runtime 的一个简单示例:
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列表信息。
-
运行程序后:


浙公网安备 33010602011771号