Client-go简单教程(一)-关于Client-go
目录
初步认识 Client-go 主体框架.
关于client-go
-
client-go
是kubernetes
官方提供的go语言的客户端库,go应用使用该库可以访问kubernetes
的API Server
,这样我们就能通过编程来对kubernetes
资源进行增删改查操作。 -
除了提供丰富的
API
用于操作kubernetes
资源,client-go
还为controller
和operator
提供了重要支持,如下图,client-go
的informer
机制可以将controller
关注的资源变化及时带给此controller
,使controller
能够及时响应变化:
我们先来瞄一眼 client-go 的主要代码结构,我会给出各个主要部分的核心功能让大家有一个感性的认识:
|
|
注意
为了简化,不重要的文件与目录没有列出来。
Client-go 版本
client-go官方提供了多个版本,并且给出了和kubernetes版本的匹配列表,具体访问官方 github 查看。
客户端对象
Client-go 提供了以下四种客户端对象与kubernetes的API Server进行交互
RESTClient
- 这是最基础的客户端对象,仅对HTTPRequest进行了封装,实现RESTFul风格API,这个对象的使用并不方便,因为很多参数都要使用者来设置,于是client-go基于RESTClient又实现了三种新的客户端对象。
ClientSet
- 把Resource和Version也封装成方法了,用起来更简单直接,一个资源是一个客户端,多个资源就对应了多个客户端,所以ClientSet就是多个客户端的集合了,这样就好理解了,不过ClientSet只能访问内置资源,访问不了自定义资源。
DynamicClient
- 可以访问内置资源和自定义资源,拿出的内容是Object类型,按实际情况自己去做强制转换,当然了也会有强转失败的风险。
DiscoveryClient
- 用于发现kubernetes的API Server支持的Group、Version、Resources等信息。
各模块的依赖关系
client-go 主要功能模块以及各模块的依赖关系大致如下面这张图所示:
可以看到,不管是各种静态类型的客户端 ClientSet
,动态客户端 DynamicClient
还是资源发现客户端 DiscoveryClient
都封装了 RESTClient
,也就是说最后请求的发送都是有 RESTClient
发送给 kube-apiserver
的。而 k8s.io/api-machinery
中 API
资源的分组与版本是所有类型客户端的基础,具体每种 API
资源的定义则是包含在 k8s.io/api
模块。
至此,关于 Client-go 的介绍就结束了,接下来一同去探索强大的 Client-go 吧!