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)。
 
