Kubernetes使用Client-go作为Go语言的官方交互式编程客户端。
    Client-go源码集成在了Kubernetes项目中,路径为:vendor/k8s.io/client-go

    1. xiangqilin@xiangqilindeMacBook-Pro ~/go/src/k8s.io/kubernetes master tree ./vendor/k8s.io/client-go -L 1
    2. ./vendor/k8s.io/client-go
    3. ├── BUILD
    4. ├── CONTRIBUTING.md
    5. ├── Godeps
    6. ├── INSTALL.md
    7. ├── LICENSE
    8. ├── OWNERS
    9. ├── SECURITY_CONTACTS
    10. ├── code-of-conduct.md
    11. ├── discovery // 提供DiscoveryClient的客户端
    12. ├── dynamic // 提供DynamicClient客户端
    13. ├── examples
    14. ├── go.mod
    15. ├── go.sum
    16. ├── informers // 每种Kubernetes资源的Informer实现
    17. ├── kubernetes // 提供ClientSet客户端
    18. ├── kubernetes_test
    19. ├── listers // 为每种Kubernetes资源提供Listener功能,该功能对Get和List请求提供只读的缓存数据
    20. ├── metadata
    21. ├── pkg
    22. ├── plugin // 提供OpenStack、GCP和Azure等云服务商授权插件
    23. ├── rest // 提供RestClient客户端,对Kubernetes API Server执行RESTful操作
    24. ├── restmapper
    25. ├── scale // 提供ScaleClient客户端,用于扩缩容Deployment、ReplicaSet、Replication Controller等资源对象
    26. ├── testing
    27. ├── third_party
    28. ├── tools // 提供常用工具,例如SharedInformer、Reflector、DealtFIFO及Indexer。提供Client的查询缓存机制,以减少向kube-apiserver发起请求等。
    29. ├── transport // 提供安全的TCP连接,支持Http Stream,某些操作需要在客户端和容器之间传输二进制流,例如exec、attach等操作。该功能由spdy包提供支持。
    30. └── 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)。