K8S 四种client简单介绍
一、K8S四种client简单介绍
client-go支持RESTClient、ClientSet、DynamicClient、DiscoveryClient四种客户端与Kubernetes Api Server进行交互
RESTClient客户端
restclient客户端为其他客户端的父类
RESTClient案例
clientcmd.BuildConfigFromFlags的返回值config可以进行一些处理
// 从本机加载kubeconfig配置文件,因此第一个参数为空字符串 config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig) // kubeconfig加载失败就直接退出了 if err != nil { panic(err.Error()) } // 参考path : /api/v1/namespaces/{namespace}/pods config.APIPath = "api" // pod的group是空字符串 config.GroupVersion = &corev1.SchemeGroupVersion // 指定序列化工具 config.NegotiatedSerializer = scheme.Codecs // 根据配置信息构建restClient实例 restClient, err := rest.RESTClientFor(config) if err!=nil { panic(err.Error()) } // 保存pod结果的数据结构实例 result := &corev1.PodList{} // 指定namespace namespace := "kube-system" // 设置请求参数,然后发起请求 // GET请求 err = restClient.Get(). // 指定namespace,参考path : /api/v1/namespaces/{namespace}/pods Namespace(namespace). // 查找多个pod,参考path : /api/v1/namespaces/{namespace}/pods Resource("pods"). // 指定大小限制和序列化工具 VersionedParams(&metav1.ListOptions{Limit:100}, scheme.ParameterCodec). // 请求 Do(context.TODO()). // 结果存入result Into(result)
ClientSet客户端
ClientSet是在RESTClient的基础上封装了对Resource和Version的管理方法。每一个Resource可以理解为一个客户端,而ClientSet是多个客户端的集合,每一个Resource和
Version都以函数的方式暴露出来。ClientSer仅能访问Kubernetes自身内置的资源,不能直接访问CRD自定义的资源
DynamicClient客户端
DynamicClient是一个动态客户端,可以对任意Kubernetes资源进行RESTFful操作,包括CRD自定义资源。DynamicClient与ClientSet操作类似,同样是封装了RESTClient。
DiscoveryClient客户端
DiscoveryClient是发现客户端,主要用于发现Kubernetes API Server所支持的资源组、资源版本、资源信息。除此之外,还可以将这些信息存储到本地,用户本地缓存,以减轻对Kubernetes API Server访问的压力。
kubectl的api-versions和api-resources命令输出也是通过DiscoversyClient实现的