暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

k8s-pod模块开发

希里安 2023-05-16
228

关注“希里安”,get更多有用干货


前两天,我们是开发获取node相关的信息的模块,今天我们就来看看如何使用go开发获取k8s集群中pod相关的信息。


示例代码可以借助AI生成或者自己查资料编写,这里先给出go调用k8s集群的pod接口的代码:

    package main
    import (
    "context"
    "fmt"
    "os"
    "path/filepath"
    "time"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
    "k8s.io/client-go/util/homedir"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    )
    func main() {
    kubeconfig := filepath.Join(homedir.HomeDir(), ".kube",
    "config")
    config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
    if err != nil {
    panic(err.Error())
    }
    //这里程序从 kubeconfig 文件加载配置,而不是使用 in-cluster 配置,使用 filepath.Join 和 os.HomeDir 来查找 kubeconfig 文件路径,而不是硬编码路径。这意味着程序不需要在 Kubernetes 集群内运行,也可以在外部运行。
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
    panic(err.Error())
    }
    pods, err :=
    clientset.CoreV1().Pods("").List(context.Background(),
    metav1.ListOptions{})
    if err != nil {
    panic(err.Error())
    }
    for _, pod := range pods.Items {
    fmt.Printf("Name: %s, Namespace: %s, Status: %s\n", pod.Name,
    pod.Namespace, pod.Status.Phase)
    }
    time.Sleep(10 *
    time.Second)
    //添加一个 sleep,防止程序立即退出。可以有时间查看程序的输出信息。
    }
    复制

    运行结果如下,可以看到这里有pod的名字、命名空间以及运行状态:



    我们知道K8s集群大部分操作都可以通过kubectl 命令行接口或类似 kubeadm 这类命令行工具来执行, 这些工具在背后也是调用 API。但是一般都是面向管理员或者开发使用的,如果想开发可视化界面,让不懂k8s相关知识的人也能用,就得自己开发应用,使用 REST 调用来访问这些 API,可以降低除专门开发和运维相关人员的使用难度。







    我们先来捋一捋,如果你不是用go开发而是使用其他语言,那怎么调用k8s集群的接口获得你想要的信息呢,这里就要用到客户端库了。


    先摆出官网客户端库地址:

      https://kubernetes.io/zh-cn/docs/reference/using-api/client-libraries/
      复制

      我们开发集群相关功能,使用 Kubernetes REST API 编写应用程序时, 并不需要自己实现 API 调用和请求/响应类型。可以根据自己的编程语言需要选择使用合适的客户端库。


      客户端库通常可以处理诸如身份验证之类的常见任务。如果 API 客户端在 Kubernetes 集群中运行,大多数客户端库可以发现并使用 Kubernetes 服务账号进行身份验证, 或者能够理解 kubeconfig 文件 格式来读取凭据和 API 服务器地址。


      以下是官方维护的客户端,基本主流语言都是支持的



      但也有一部分是社区维护的客户端库,感兴趣的朋友可以自行查找看一下。


      再说说Kubernetes API


      官网是这么说的:“REST API Kubernetes 的基本结构。所有操作和组件之间的通信及外部用户命令都是调用 API 服务器处理的 REST API。因此,Kubernetes 平台视一切皆为 API 对象, 且它们在 API 中有相应的定义。”


      所以摆出官网API参考,列出了Kubernetes v1.27 版本的 API

        https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/
        复制



        比如调用podAPI,给出官网地址:

          https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1/
          复制

          详细的内容也比较多,我也正在研究,大家感兴趣的可以自行查阅。






          所以围绕k8s开发,首先就需要对k8sapi要很熟悉,不然就算有数据,也不知道如何灵活调用以供自己业务使用。好了,今天的分享就到这了,感兴趣的朋友快去尝试,别忘了点赞关注呀!





          文章转载自希里安,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论