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的信息。下面我会对代码进行逐行解析。

    1. 导入必要的包:

      • 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集群交互的客户端。
    1. 定义main函数。

    2. 创建一个上下文对象ctx,它在整个程序中用于跟踪和控制请求的生命周期。

    3. 定义一个命令行参数kubeconfigPath,它是kubeconfig文件的路径。默认路径是/root/.kube/config

    4. 解析命令行参数。

    5. 从指定的kubeconfig路径构建配置。

    6. 使用配置创建client对象,该对象用于与Kubernetes集群交互。

    7. 定义一个Pod列表对象podList,该对象用于存储从Kubernetes集群获取的Pod信息。

    8. 使用client对象从Kubernetes集群获取Pod列表。

    9. 如果在获取Pod列表时发生错误,使用fmt.Println记录错误并终止程序。

    10. 如果没有错误,则打印获取到的Pod列表信息。

  运行程序后:

posted @   左扬  阅读(186)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
levels of contents
点击右上角即可分享
微信分享提示