Kubernetes使用Client-go作为Go语言的官方交互式编程客户端。
Client-go源码集成在了Kubernetes项目中,路径为:vendor/k8s.io/client-go
xiangqilin@xiangqilindeMacBook-Pro ~/go/src/k8s.io/kubernetes master tree ./vendor/k8s.io/client-go -L 1
./vendor/k8s.io/client-go
├── BUILD
├── CONTRIBUTING.md
├── Godeps
├── INSTALL.md
├── LICENSE
├── OWNERS
├── SECURITY_CONTACTS
├── code-of-conduct.md
├── discovery // 提供DiscoveryClient的客户端
├── dynamic // 提供DynamicClient客户端
├── examples
├── go.mod
├── go.sum
├── informers // 每种Kubernetes资源的Informer实现
├── kubernetes // 提供ClientSet客户端
├── kubernetes_test
├── listers // 为每种Kubernetes资源提供Listener功能,该功能对Get和List请求提供只读的缓存数据
├── metadata
├── pkg
├── plugin // 提供OpenStack、GCP和Azure等云服务商授权插件
├── rest // 提供RestClient客户端,对Kubernetes API Server执行RESTful操作
├── restmapper
├── scale // 提供ScaleClient客户端,用于扩缩容Deployment、ReplicaSet、Replication Controller等资源对象
├── testing
├── third_party
├── tools // 提供常用工具,例如SharedInformer、Reflector、DealtFIFO及Indexer。提供Client的查询缓存机制,以减少向kube-apiserver发起请求等。
├── transport // 提供安全的TCP连接,支持Http Stream,某些操作需要在客户端和容器之间传输二进制流,例如exec、attach等操作。该功能由spdy包提供支持。
└── util // 提供常用的方法,例如WorkQueue工作队列、Certificate正数管理等
RestClient是最基础的Client。RestClient对Http Request进行了封装,实现了Restful风格的API。ClientSet、DynamicClient及DiscoveryClient客户端都是基于RestClient实现的。
- ClientSet:ClientSet在RestClient的基础上封装了对Resource和Version的管理方法。每一个Resource都可以理解为一个客户端,而ClientSet则是多个客户端的集合,每一个Resource和Version都以函数的形式暴露给开发者。ClientSet只能处理Kubernetes内置资源,它是通过client-gen代码生成器自动生成的。
- DynamicClient:能处理Kubernetes中所有的资源包括自定义资源。
- DiscoveryClient:发现客户端,用于发现kube-apiserver所支持的资源组,资源版本,资源信息(即Group、Version、Resource)。