前两天,我们是开发获取node相关的信息的模块,今天我们就来看看如何使用go开发获取k8s集群中pod相关的信息。
示例代码可以借助AI生成或者自己查资料编写,这里先给出go调用k8s集群的pod接口的代码:
代码语言:javascript复制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: %sn", pod.Name,
pod.Namespace, pod.Status.Phase)
}
time.Sleep(10 *
time.Second)
//添加一个 sleep,防止程序立即退出。可以有时间查看程序的输出信息。
}
运行结果如下,可以看到这里有pod的名字、命名空间以及运行状态:
我们知道K8s集群大部分操作都可以通过kubectl 命令行接口或类似 kubeadm 这类命令行工具来执行, 这些工具在背后也是调用 API。但是一般都是面向管理员或者开发使用的,如果想开发可视化界面,让不懂k8s相关知识的人也能用,就得自己开发应用,使用 REST 调用来访问这些 API,可以降低除专门开发和运维相关人员的使用难度。
我们先来捋一捋,如果你不是用go开发而是使用其他语言,那怎么调用k8s集群的接口获得你想要的信息呢,这里就要用到客户端库了。
先摆出官网客户端库地址:
代码语言:javascript复制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:
代码语言:javascript复制https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.27/
比如调用pod的API,给出官网地址:
代码语言:javascript复制https://kubernetes.io/zh-cn/docs/reference/kubernetes-api/workload-resources/pod-v1/
详细的内容也比较多,我也正在研究,大家感兴趣的可以自行查阅。
所以围绕k8s开发,首先就需要对k8s的api要很熟悉,不然就算有数据,也不知道如何灵活调用以供自己业务使用。好了,今天的分享就到这了,感兴趣的朋友快去尝试,别忘了点赞关注呀!