client-go
Client
client-go 里面有许许多多的库,先从 RESTClient 说起,client-go一共支持 4 种客户端逻辑:
DiscoveryClient:发现版本,请求访问 k8s 集群的 API 信息,如kubectl api-versions。ClientSet:客户端集合,仅限使用 k8s 内置资源,如Pods,Service等。DynamicClient:动态客户端,用于无类型资源,如CRD。RESTClient: 实现rest.Interface接口,自由度高,有需要时可以进行封装。
其中前三者都是基于 RESTClient 实现,可以在下图或源码中看到 restClient 踪影。
DiscoveryClient
实现方法:
ServerGroups: 返回metav1.ApiGroup列表。ServerResourcesForGroupVersion: 根据 GV 参数获取metav1.APIResource列表。ServerResources: 获取metav1.APIResource列表。ServerGroupsAndResources: 返回metav1.APIGroup数组和metav1.APIResource列表。ServerPreferredResources: 返回首选的资源列表。ServerPreferredNamespacedResources: 返回首选的命名空间层级资源列表。ServerVersion: 返回服务器版本。
|
|
ClientSet
使用ClientSet比较简单,只需要配置好RESTClient就可以操作系统资源。
|
|
DynamicClient
对自定义资源类型(CRD),采用DynamicClient进行 CRUD 操作,创建或返回数据的是Unstructured类型,本质是map[string]interface。目前有很多关于 CRD 库已经从自定义资源生成代码,关联相关类型,所以基本上没有这种接近原生数据的开发。
|
|
RESTClient
如果用RESTClientCRUD 某个资源,之前先要配置好rest.Config。
|
|
主要是以Resquest请求处理为主,封装了http.Client对象,但是http.Client对象是存放在RESTClient,当调用RESTClient时就返回Resquest对象,这是就可以调用Resources() VersionedParams() Do()等方法。最后在Do()方法返回Result类型,是用来进行对返回数据的处理,如Into(&pods)就是对数据转换成目录类型。
KubeConfig
下图是其中一个解析kubeconfig过程,主要涉及三个对象分别是DeferredLoadingClientConfig,DeferredLoadingClientConfig,DirectClientConfig。
DeferredLoadingClientConfig
对象里有个loader成员,用来调用加载配置的规则,对象里每个可导出的方法里首先执行createClientConfig()方法(除ConfigAccess()外),通过这个方调用config.loader.Load()。
|
|
ClientCofnigLoadingRules
作用是当有多个配置的时候会合成一个clientcmdapi.Config对象,返回给DeferredLoadingClientConfig对象,如上述代码。
LoadFromFile()加载文件,读取字节码。Load()调用Codec.Decoder.Decode()编解码器解析文件内容。
|
|
DirectClientConfig
最后通过DirectClientConfig.ClientConfig()获取rest.Config对象返回。
|
|
最后附上对象图:
Informer
WorkQueue
EventBroadcaster
代码生成器
client-gen 代码生成器
lister-gen 代码生成器
informer-gen 代码生成器
-
No backlinks found.