Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 55eb288

Browse files
author
Zhang Jun
committed
clientset: update
1 parent bed6427 commit 55eb288

File tree

1 file changed

+19
-21
lines changed

1 file changed

+19
-21
lines changed

‎client-go/5.scheme-clientset.md‎

Lines changed: 19 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
# Kubernetes API Client
1+
# Kubernetes Clientset
22

33
<!-- TOC -->
44

5-
- [Kubernetes API Client](#kubernetes-api-client)
5+
- [Kubernetes Clientset](#kubernetes-clientset)
66
- [资源类型 Scheme](#资源类型-scheme)
7-
- [定义资源类型的 types.go 文件](#定义资源类型的-typesgo-文件)
8-
- [runtime.Object 接口和 DeepCopyObject() 方法](#runtimeobject-接口和-deepcopyobject-方法)
9-
- [各资源类型 Scheme 的 register.go 文件](#各资源类型-scheme-的-registergo-文件)
7+
- [types.go 文件](#typesgo-文件)
8+
- [zz_generated.deepcopy.go 文件](#zz_generateddeepcopygo-文件)
9+
- [register.go 文件](#registergo-文件)
1010
- [注册所有内置资源类型到 Scheme 对象](#注册所有内置资源类型到-scheme-对象)
1111
- [创建和使用 Kubernetes Clientset](#创建和使用-kubernetes-clientset)
1212
- [创建支持所有资源类型的全局 Clientset](#创建支持所有资源类型的全局-clientset)
@@ -19,11 +19,11 @@
1919

2020
## 资源类型 Scheme
2121

22-
Clienset 是调用资源对象类型相关的方法来对它进行操作,所以在和 apiserver 通信时,需要能对资源对象类型及参数进行**编解码(序列化/反序列化)**
22+
Clienset apiserver 通信时,需要根据资源对象的类型生成 Resource URL、对 Wire-data 进行**编解码(序列化/反序列化)**
2323

24-
资源对象的 Group、Version、Kind、go struct 定义、编解码(序列化/反序列化) 等内容构成了它的 `Scheme`
24+
资源类型的 Group、Version、Kind、go struct 定义、编解码(序列化/反序列化) 等内容构成了它的 `Scheme`
2525

26-
对于 K8S 内置资源对象,它们的 Scheme 位于 `k8s.io/api/<group>/<version>` 目录下,以 `Deployment` 为例:
26+
K8S 内置资源类型的 Scheme 位于 `k8s.io/api/<group>/<version>` 目录下,以 `Deployment` 为例:
2727

2828
``` bash
2929
$ pwd
@@ -46,9 +46,9 @@ total 1048
4646
2. zz_generated.deepcopy.go:`deepcopy-gen` 工具自动创建的、包含各资源类型的 `DeepCopyObject()` 方法的文件;
4747
3. register.go:定义了 `AddToScheme()` 函数,用于将本 `<group>/<version>` 下的各资源类型注册到 Clientset 使用的 Scheme 对象中(k8s.io/client-go/kubernetes/scheme/);
4848

49-
### 定义资源类型的 types.go 文件
49+
### types.go 文件
5050

51-
该文件定义了资源类型相关的 go struct,以及 codegen 工具注释:
51+
该文件定义了资源类型相关的 go structcodegen 命令行工具使用的注释:
5252

5353
``` go
5454
// 来源于:k8s.io/api/extensions/v1beta1/types.go
@@ -90,9 +90,9 @@ type DeploymentSpec struct {
9090
}
9191
```
9292

93-
### runtime.Object 接口和 DeepCopyObject() 方法
93+
### zz_generated.deepcopy.go 文件
9494

95-
所有注册到 Scheme 的资源类型,都需要实现 `runtime.Object` 接口:
95+
所有注册到 Scheme 的资源类型都要实现 `runtime.Object` 接口:
9696

9797
``` go
9898
// 来源于:k8s.io/apimachinery/pkg/runtime/interfaces.go
@@ -102,7 +102,7 @@ type Object interface {
102102
}
103103
```
104104

105-
K8S 各资源类型的 go struct 定义都嵌入了 `metav1.TypeMeta` 类型,该类型实现了 `GetObjectKind()` 方法,故各资源类型只需要实现 `DeepCopyObject()` 方法即可
105+
K8S 各资源类型的 go struct 定义都嵌入了 `metav1.TypeMeta` 类型,而该类型实现了 `GetObjectKind()` 方法,故各资源类型只需要实现 `DeepCopyObject()` 方法
106106

107107
我们不需要手动为各资源类型定义 `DeepCopyObject()` 方法,而是使用 `deepcopy-gen` 工具命令统一、自动地为各资源类型生成该方法。
108108

@@ -133,11 +133,11 @@ func (in *Deployment) DeepCopyObject() runtime.Object {
133133
}
134134
```
135135

136-
### 各资源类型 Scheme 的 register.go 文件
136+
### register.go 文件
137137

138138
使用 `deepcopy-gen` 工具命令统一、自动地为各资源类型生成`DeepCopyObject()` 方法后,各资源类型就满足了 `runtime.Object` 接口,进而可以注册到 Scheme 中。
139139

140-
各 API Group 的各 Version 目录下,都有一个 `register.go` 文件,该文件对外提供的 `AddToScheme()` 方法用于将本 Group/Version 下的各资源类型定义注册到**传入**的 Scheme 对象中(k8s.io/client-go/kubernetes/scheme/register.go 中创建该 Scheme 对象)。
140+
各 API Group 的各 Version 目录下,都有一个 `register.go` 文件,该文件对外提供的 `AddToScheme()` 方法用于将本 Group/Version 下的各资源类型注册到**传入**的 Scheme 对象中(k8s.io/client-go/kubernetes/scheme/register.go 中创建该 Scheme 对象),然后 Clientset 就可以使用它对各类型对象进行编解码了
141141

142142
``` go
143143
// 来源于:k8s.io/api/extensions/v1beta1/register.go
@@ -176,11 +176,11 @@ func addKnownTypes(scheme *runtime.Scheme) error {
176176

177177
## 注册所有内置资源类型到 Scheme 对象
178178

179-
需要将 `k8s.io/api/<group>/<version>` 目录下的各资源类型注册到**全局 Scheme 对象**,这样 Clienset 才能识别和使用它们
179+
需要将 `k8s.io/api/<group>/<version>` 目录下的各资源类型注册到**全局 Scheme 对象**,这样 Clienset 才能识别和使用它们的对象
180180

181181
client-go 的 `scheme package`(k8s.io/client-go/kubernetes/scheme/)定义了这个全局 `Scheme` 对象,并将各 `k8s.io/api/<Group>/<Version>` 目录下的资源类型注册到它上面。
182182

183-
同时用 Scheme 对象创建:
183+
Scheme 对象还被用于创建另外两个外部对象:
184184
1. 对资源类型对象进行编解码(序列化/反序列化)的工厂对象 `Codecs`,后续使用它配置 `rest.Config.NegotiatedSerializer`;
185185
2. 参数编解码对象 `ParameterCodec`,后续调用 RestFul 的方法时使用,如 `VersionedParams(&options, scheme.ParameterCodec)`
186186

@@ -239,13 +239,11 @@ deploy, err := c.kubeclientset.ExtensionsV1beta1().Deployments(aolDeploy.ObjectM
239239
2. 使用 Kubernetes 的 RestFul 配置参数,创建 Clientset;
240240
3. 调用 Clientset 的方法对资源对象进行 CRUD;
241241

242-
在详细分析 kuberntes 的 `NewForConfig()` 函数前。
243-
244242
## 创建支持所有资源类型的全局 Clientset
245243

246244
`k8s.io/client-go/kubernetes/clientset.go` 文件中创建的 Clientset 实际上是对各资源类型的 Clientset 做了一次封装:
247245

248-
1. 调用各资源类型的 NewForConfig() 函数创建对应的 Clientset,并注册到内部的同名 field 中;
246+
1. 调用各资源类型的 NewForConfig() 函数创建对应的 Clientset;
249247
2. 后续可以使用 Clientset.<Group><Version>(),如 Clientset.ExtensionsV1beta1() 来调用具体资源类型的 Clientset;
250248

251249
``` go
@@ -326,7 +324,7 @@ func (c *ExtensionsV1beta1Client) Deployments(namespace string) DeploymentInterf
326324

327325
## 各资源类型的 RestFul 方法
328326

329-
调用 RestClient 时需要指定参数的编解码工厂 `scheme.ParameterCodec`,位于前面介绍的 `scheme package` 中。
327+
使用各资源类型的 Clientset 创建资源类型的 RestFul 方法,参数的编解码工厂 `scheme.ParameterCodec` 来源于前面介绍的 `scheme package` 中。
330328

331329
``` go
332330
// 来源于 k8s.io/client-go/kubernetes/typed/extensions/v1beta1/deployment.go

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /