k8s-client-go 源码剖析 (一)
简介:云原生社区活动---Kubernetes源码剖析第一期
有幸参与云原生社区举办的Kubernetes源码剖析活动,活动主要以书籍《Kubernetes源码剖析》为主要思路进行展开,提出在看书过程中遇到的问题,和社区成员一起讨论,最后会将结果总结到云原生社区的知识星球或Github。
第一期活动主要以书本第五章<Client-go编程式交互>为主题进行学习,计划共三周半。
计划如下:
client-go客户端学习
Infoermer机制学习
WorkQueue学习
整体结构回顾、逻辑回顾、优秀代码回顾
学习总得有个重要的优先级,我个人的优先级是这样的,仅供参考:
Informer机制原理
WorkerQueue原理
几种Client-go客户端的使用、优劣
学习环境相关:
Kubernetes 1.14版本
对应版本的client-go
本文主题
本文是第一周,课题有两个:
Client-go源码结构
几种Client客户端对象学习
Client-go源码目录结构
client-go代码库已经集成到了Kubernetes源码中,所以书本中展示的内容是在Kubernetes源码中源码结构,而这里展示的是Client-go代码库中原始的内容,所以多了一些源码之外的内容,例如README、example、go.mod等。下面讲一下各个目录的作用,内容引自书本:
几种Client-go客户端
下图是一个简单的总结,其中ClientSet、DynamicClient、DiscoveryClient都是基于RESTClient封装的。
RESTClient
最基础的客户端,对HTTP Request进行了封装,实现了RESTFul风格的API。
案例代码:
预期运行结果将会打印K8S集群中的node
ClientSet
对RESTClient进行了对象分类方式的封装,可以实例化特定资源的客户端,
以Resource和Version的方式暴露。例如实例化一个只操作appsv1版本的Deploy客户端,
ClientSet可以认为是一系列资源的集合客户端。缺点是不能直接访问CRD。
通过client-gen代码生成器生成带有CRD资源的ClientSet后可以访问CRD资源。(未测试)
案例代码:
代码中分别打印了获取到K8S集群中的500个Pod和500个deploy,目前打印语句是注释了,如果要看效果需要先删掉注释。
案例代码中还留了一个小内容,请求获取daemonset资源,感兴趣的可以试一试。
DynamicClient
这是一种动态客户端,对K8S任意资源进行操作,包括CRD。
请求返回的结果是map[string]interface{}
代码案例:
这个案例是打印了namespace为default下的500个pod,同样的,在案例中也有一个todo,获取CRD资源,感兴趣的可以尝试一下。如果K8S集群中没有TIDB的资源可以自行换成自己想要的CRD资源。
代码中已经有获取v1alpha1版本的tidbclusters资源。如果你不知道CRD相关的信息,可以按照下面的步骤来找出对应的信息:
通过kubectl api-resources 获取到资源的Group和Resource
通过kubectl api-versions 找到对应Group的版本
这样 资源的GVR(Group、Version、Resource)都有了
DiscoveryClient
这是一种发现客户端,在前面的客户端中需要知道资源的Resource和Version才能找到你想要的,
这些信息太多很难全部记住,这个客户端用于获取资源组、版本等信息。
前面用到的api-resources和api-versions都是通过discoveryClient客户端实现的,源码在Kubernetes源码库中 pkg/kubectl/cmd/apiresources/apiresources.gopkg/kubectl/cmd/apiresources/apiversions.go
案例代码:
获取集群中的GVR
预期效果:打印集群中的GVR
DiscoveryClient在请求到数据之后会缓存到本地,默认存储位置是~/.kube/cache和~/.kube/http-cache,默认是每10分钟会和API Server同步一次。
总结
第一周主要是了解下各种客户端的使用以及不同,有时间的可以再进行一些拓展试验,研究对象可以选择一些主流的框架或官方示例,例如:
Sample-Controller 中如何使用client-go的
Kubebuilder中如何使用client-go的
Operator-sdk中如何使用client-go的
延伸阅读:
版权声明: 本文为 InfoQ 作者【LanLiang】的原创文章。
原文链接:【http://xie.infoq.cn/article/c99fcb4181542624601a7b1f3】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论