环境说明


1. 创建测试项目

1.1. 创建项目
1.2. 安装 client-go

注意:版本要一致。

1.3. 创建 kubeconfig 文件

将 kubeconfig 文件放在 ~/.kube/config 中,其内容类似:


2. 简介

client-go 是与 kubernetes 集群进行对话的 Go 客户端。

2.1. 包含什么
2.2. 如何使用它

如果应用程序运行在集群的 Pod 中,请参阅 in-cluster example,否则请参阅 out-of-cluster example

1. 集群内部的认证

当使用 rest.InClusterConfig() 时,client-go 使用被挂载到 Pod 里面的 /var/run/secrets/kubernetes.io/serviceaccount 路径上的 Service Account token

2. 集群外部的认证

使用包含集群上下文信息的 kubeconfig 文件初始化客户端。kubectl 命令也使用 kubeconfig 文件对集群进行身份验证。


3. 客户端种类

3.1. RESTClient

RESTClient 是对 http.Client 的封装,它在指定的路径上执行诸如 Get、Put、Post 和 Delete 之类的通用 REST 函数。其它客户端都是在它的基础上实现的。可用于 Kubernetes 内置资源和 CRD 资源。

rest_client_demo.go:

上面的程序使用 Pod 名称获取 Pod 信息。

3.2. Clientset

Clientset 是用于处理 Kubernetes 内置资源对象的客户端集合。默认情况下,不能操作 CRD 资源。

clientset_demo.go:

上面的程序使用 Pod 名称获取 Pod 信息。

3.3. DynamicClient

DynamicClient 不仅能对 Kubernetes 内置资源进行处理,还可以对 CRD 资源进行处理。

dynamic_client_demo.go:

上面的程序创建名为 nginx-alpine-deployment-test 的 Deployment。

3.4. DiscoveryClient

DiscoveryClient 是发现客户端,用于发现 Kubernetes API Server 支持的资源组(Group)、资源版本(Version)和资源信息(Resource)。

discovery_client_demo.go:

3.5. scaleClient

scaleClient 是用于对 Deployment、ReplicaSet 等资源进行扩缩容的客户端。

scale_client_demo.go:

上面的代码将名为 nginx 的 Deployment 的副本数伸缩为 2。


4. List-Watch 机制

List-Watch 机制是 Kubernetes 中的异步消息通知机制,通过它能有效地确保消息的实时性、顺序性和可靠性。它分为两部分:

List 基于 HTTP 短链接实现,而 Watch 基于 HTTP 长连接实现。Watch 通过使用长连接的方式极大地减轻 Kubernetes API Server 的压力。

deployment_watch_demo.go:

上面的代码 WATCH app 标签等于 nginx 的 Deployment 上发生的事件。


参考文档