kubernetes/client-go
GitHub: kubernetes/client-go
Kubernetes 官方 Go 客户端库,为通过编程方式与 Kubernetes 集群 API 交互提供完整支持。
Stars: 9857 | Forks: 3036
# client-go
用于与 [kubernetes](http://kubernetes.io/) 集群通信的 Go 客户端。
我们建议对于 >= `v1.17.0` 的 Kubernetes 版本使用 `v0.x.y` 标签,对于 < `v1.17.0` 的 Kubernetes 版本使用 `kubernetes-1.x.y` 标签。
使用 go1.16+ 运行 `go get k8s.io/client-go@latest` 是将此库添加到项目中的最快方法。
有关详细的安装说明和故障排除,请参阅 [INSTALL.md](/INSTALL.md)。
[![GoDocWidget]][GoDocReference]
## 目录
- [包含的内容](#whats-included)
- [版本管理](#versioning)
- [兼容性:你的代码 <-> client-go](#compatibility-your-code---client-go)
- [兼容性:client-go <-> Kubernetes 集群](#compatibility-client-go---kubernetes-clusters)
- [兼容性矩阵](#compatibility-matrix)
- [为什么 1.4 和 1.5 分支包含以版本命名的顶级文件夹?](#why-do-the-14-and-15-branch-contain-top-level-folder-named-after-the-version)
- [Kubernetes 标签](#kubernetes-tags)
- [如何获取](#how-to-get-it)
- [如何使用](#how-to-use-it)
- [依赖管理](#dependency-management)
- [贡献代码](#contributing-code)
### 包含的内容
* `kubernetes` 包包含用于访问 Kubernetes API 的 clientset。
* `discovery` 包用于发现 Kubernetes API server 支持的 API。
* `dynamic` 包包含一个动态客户端,可以对任意 Kubernetes API 对象执行通用操作。
* `plugin/pkg/client/auth` 包包含可选的认证插件,用于从外部源获取凭据。
* `transport` 包用于设置认证并启动连接。
* `tools/cache` 包对于编写控制器非常有用。
### 版本管理
- 对于每个 `v1.x.y` Kubernetes 版本,主版本号(第一位数字)将保持为 `0`。
- Bug 修复将导致补丁版本号(第三位数字)发生变化。被 cherry-pick 到较旧 Kubernetes 发布分支的 PR 将导致 `client-go` 中相应分支的更新,并带有改变补丁版本号的相应新标签。
#### 分支与标签
我们将为次版本号的每次递增创建一个新分支和标签。我们将仅为补丁版本号的每次递增创建一个新标签。有关主版本、次版本和补丁的定义,请参阅 [semver](http://semver.org/)。
client-go 中 master 分支的 HEAD 将跟踪主 Kubernetes 仓库中 master 分支的 HEAD。
#### 兼容性:你的代码 <-> client-go
`v0.x.y` 标签表示 go API 在不同版本中可能会以不兼容的方式发生变化。
有关要求特定版本 client-go 的指南,请参阅 [INSTALL.md](INSTALL.md)。
#### 兼容性:client-go <-> Kubernetes 集群
由于 Kubernetes 对客户端具有向后兼容性,较旧的 `client-go` 版本可以与许多不同的 Kubernetes 集群版本配合使用。
我们会将错误修复(但不包括新功能)反向移植到旧版本的 `client-go` 中。
#### 兼容性矩阵
| | Kubernetes 1.29 | Kubernetes 1.30 | Kubernetes 1.31 | Kubernetes 1.32 | Kubernetes 1.33 | Kubernetes 1.34 |
| ----------------------------- | --------------- | --------------- | --------------- | --------------- | --------------- | --------------- |
| `kubernetes-1.29.0`/`v0.29.0` | ✓ | +- | +- | +- | +- | +- |
| `kubernetes-1.30.0`/`v0.30.0` | +- | ✓ | +- | +- | +- | +- |
| `kubernetes-1.31.0`/`v0.31.0` | +- | +- | ✓ | +- | +- | +- |
| `kubernetes-1.32.0`/`v0.32.0` | +- | +- | +- | ✓ | +- | +- |
| `kubernetes-1.33.0`/`v0.33.0` | +- | +- | +- | +- | ✓ | +- |
| `kubernetes-1.34.0`/`v0.34.0` | +- | +- | +- | +- | +- | ✓ |
| `HEAD` | +- | +- | +- | +- | +- | +- |
图例:
* `✓` client-go 和 Kubernetes 版本中具有完全相同的特性/API 对象。
* `+` client-go 具有 Kubernetes 集群中可能不存在的特性或 API 对象,这可能是由于 client-go 有额外的新 API,或者 server 已经移除了旧 API。然而,它们共有的所有内容(即大多数 API)都将正常工作。请注意,alpha API 可能会在单个版本中消失或发生重大变化。
* `-` Kubernetes 集群具有 client-go 库无法使用的特性,这可能是因为 server 有额外的新 API,或者 client-go 已经移除了旧 API。然而,它们共有的所有内容(即大多数 API)都将正常工作。
有关 client-go 各版本之间更改的详细说明,请参阅 [CHANGELOG](./CHANGELOG.md)。
| 分支 | 规范源代码位置 | 维护状态 |
| -------------- | ----------------------------------- | ------------------ |
| `release-1.25` | Kubernetes 主仓库,1.25 分支 | =- |
| `release-1.26` | Kubernetes 主仓库,1.26 分支 | =- |
| `release-1.27` | Kubernetes 主仓库,1.27 分支 | =- |
| `release-1.28` | Kubernetes 主仓库,1.28 分支 | =- |
| `release-1.29` | Kubernetes 主仓库,1.29 分支 | =- |
| `release-1.30` | Kubernetes 主仓库,1.30 分支 | =- |
| `release-1.31` | Kubernetes 主仓库,1.31 分支 | = |
| `release-1.32` | Kubernetes 主仓库,1.32 分支 | ✓ |
| `release-1.33` | Kubernetes 主仓库,1.33 分支 | ✓ |
| `release-1.34` | Kubernetes 主仓库,1.34 分支 | ✓ |
| client-go HEAD | Kubernetes 主仓库,master 分支 | ✓ |
图例:
* `✓` 主 Kubernetes 仓库中的更改会通过机器人主动发布到 client-go
* `=` 手动维护,仅修复严重的安全漏洞。
* `-` 已弃用;请升级。
#### 弃用策略
我们将至少在分支的首个稳定标签(stable tag)发布后六个月内对其进行维护。(例如,release-2.0 分支的倒计时从我们标记 v2.0.0 时开始,而不是从我们制作第一个 alpha 版本时开始。)此策略适用于大于或等于 2.0 的每个版本。
#### 为什么 1.4 和 1.5 分支包含以版本命名的顶级文件夹?
在 client-go 的最初发布中,我们认为为每个次版本保留单独的目录是最简单的。这很快被证明是一个错误。我们将顶级文件夹保留在 1.4 和 1.5 分支中,以免破坏现有用户。
### Kubernetes 标签
此仓库仍然是 [k8s.io/kubernetes/staging/src/client-go](https://github.com/kubernetes/kubernetes/tree/master/staging/src/k8s.io/client-go) 的镜像,代码开发仍在 staging 区进行。
从 Kubernetes `v1.8.0` 开始,在从 staging 区同步代码时,我们还会将 Kubernetes 版本标签同步到 client-go,前缀为 `kubernetes-`。从 Kubernetes `v1.17.0` 开始,我们还会为每个 `v1.x.y` Kubernetes 版本创建匹配的 semver `v0.x.y` 标签。
例如,如果你在 client-go 中 checkout `kubernetes-1.17.0` 或 `v0.17.0` 标签,你得到的代码与你在 Kubernetes 中 checkout `v1.17.0` 标签并切换目录到 `staging/src/k8s.io/client-go` 完全一样。
其目的是让用户在已发布的仓库中快速找到匹配的提交,例如 [sample-apiserver](https://github.com/kubernetes/sample-apiserver)、[apiextension-apiserver](https://github.com/kubernetes/apiextensions-apiserver) 等。Kubernetes 版本标签不对 client-go 声明任何向后兼容性保证。如果你关心向后兼容性,请查看[语义化版本](#versioning)。
### 如何获取
要获取最新版本,请使用 go1.16+ 并使用 `go get` 命令获取。例如:
```
go get k8s.io/client-go@latest
```
要获取特定版本,请使用 go1.11+ 并使用 `go get` 命令获取所需版本。例如:
```
go get k8s.io/client-go@v0.20.4
```
有关详细的说明和故障排除,请参阅 [INSTALL.md](/INSTALL.md)。
### 如何使用
如果你的应用程序在集群的 Pod 中运行,请参阅集群内[示例](examples/in-cluster-client-configuration),否则请参阅集群外[示例](examples/out-of-cluster-client-configuration)。
### 依赖管理
有关如何正确使用依赖管理来安装 client-go 的详细信息,请参阅 [INSTALL.md](INSTALL.md)。
标签:EVTX分析, 日志审计