Kubernetes系统使用client-go作为Go语言的官方编程式交互客户端库,提供对Kubernetes API Server服务的交互访问。Kubernetes的源码中已经集成了client-go的源码,无须单独下载。client-go源码路径为vendor/k8s.io/client-go,client-go项目github地址:https://github.com/kubernetes/client-go
client-go源码结构
➜ kubernetes git:(huaihe) ✗ tree vendor/k8s.io/client-go -L 1
vendor/k8s.io/client-go
├── LICENSE
├── applyconfigurations
├── discovery
├── dynamic
├── informers
├── kubernetes
├── listers
├── metadata
├── pkg
├── plugin
├── rest
├── restmapper
├── scale
├── testing
├── third_party
├── tools
├── transport
└── util
Client客户端对象
client-go支持4种Client客户端对象与Kubernetes API Server交互的方式,交互对象如图:
RESTClient是最基础的客户端。RESTClient对HTTP Request进行了封装,实现了RESTful风格的API。ClientSet、DynamicClient及DiscoveryClient客户端都是基于RESTClient实现的。
ClientSet在RESTClient的基础上封装了对Resource和Version的管理方法。每一个Resource可以理解为一个客户端,而ClientSet则是多个客户端的集合,每一个Resource和Version都以函数的方式暴露给开发者。ClientSet只能够处理Kubernetes内置资源,它是通过client-gen代码生成器自动生成的。
DynamicClient与ClientSet最大的不同之处是,ClientSet仅能访问Kubernetes自带的资源(即Client集合内的资源),不能直接访问CRD自定义资源。DynamicClient能够处理Kubernetes中的所有资源对象,包括Kubernetes内置资源与CRD自定义资源。
DiscoveryClient发现客户端,用于发现kube-apiserver所支持的资源组、资源版本、资源信息(即Group、Versions、Resources)。
以上4种客户端:RESTClient、ClientSet、DynamicClient、DiscoveryClient都可以通过kubeconfig配置信息连接到指定的Kubernetes API Server
kubeconfig配置管理
kubeconfig用于管理访问kube-apiserver的配置信息,同时也支持访问多kube-apiserver的配置管理,可以在不同的环境下管理不同的kube-apiserver集群配置,不同的业务线也可以拥有不同的集群。Kubernetes的其他组件都使用kubeconfig配置信息来连接kube-apiserver组件,例如当kubectl访问kube-apiserver时,会默认加载kubeconfig配置信息。
kubeconfig中存储了集群、用户、命名空间和身份验证等信息,在默认的情况下,kubeconfig存放在$HOME/.kube/config路径下。Kubeconfig配置信息如下: