四种客户端
在 client-go 中,有四种可以与 Kubernetes 资源进行交互的客户端,分别是 ClientSet、DynamicClient、DiscoveryClient 以及 RestClient,它们各自适用于不同的场景。下面结合代码来体会一下。
ClientSet
ClientSet 是最常用的客户端,用于与 Kubernetes 核心资源(如 Pod、Service、Deployment 等)进行交互。它封装了对各类资源的操作,提供了类型安全的接口。我们用一个列出 default 命名空间下的 pod 列表的例子,看一下代码如何实现。
1 | package main |
GVK 与 ClientSet 的关系
在示例代码中,clientset.CoreV1().Pods().List() 是用于获取 Pod 列表的方法。
为什么是 CoreV1()?这与 Kubernetes 资源的 GVK 密切相关。
GVK 是 Group、Version 和 Kind 的缩写。
- Group:表示资源所属的 API 组,比如 apps、batch 等。
- Version:表示资源的版本,比如 v1、v1beta1 等。
- Kind:表示资源的类型,比如 Pod、Service 等,注意是大写字母开头的单数形式。
GVK 用于标识 Kubernetes 中的每种资源,也就是描述“身份”。
例如,特朗普的 Group 是人类,Version 比如就是出生日期,Kind 是特朗普。在资源的 YAML 中,我们也会用到 GVK。以下是一个 pod 的 YAML:
1 | apiVersion: v1 |
- apiVersion:是由 Group/Version 组合而成,由于 Pod 的 Group 为 Core(核心 API 组,Group 名为空),Version 为 v1,因此只写了 v1。
- kind:即为 Kind。因此,在 ClientSet 中,Pod 的方法位于 CoreV1() 下,这是因为 Core API Group 的名称为空,直接使用 Version 表示。
我们再来看一下 deployment 的 YAML:
1 | apiVersion: apps/v1 |
因此,若需要操作 Deployment 资源,可以通过 clientset.AppsV1().Deployments().List() 方法来获取 Deployment 列表。
总结:只要知道目标资源的 GVK,就可以快速定位到对应的 ClientSet 方法。例如:
- Pod 的 GVK 为 v1、Pod,对应 clientset.CoreV1().Pods()。
- Deployment 的 GVK 为 apps/v1、Deployment,对应 clientset.AppsV1().Deployments()。
这种基于 GVK 的设计,使得 ClientSet 在操作 Kubernetes 核心资源时直观、简洁且高效。