k8s client-go 01介绍

关于client-go

  client-go是一个golang的client,我们可以通过client-go与K8S apiServer进行交互,对k8s集群中资源对象,包括内置资源(例如:Pod、Deployment、Service等)和CRD进行增删改查等操作。

  client-go地址: https://github.com/kubernetes/client-go

目录结构:

  • kubernetes: 该包包含了可以访问kubernetes集群的api,通过这些API可以与apiServer进行通信,对集群的资源对象进行增删改查。比如,我们可以通过kubectl来创建一个deployment,同样的,我们可以使用kubernetes中的clientset来创建一个Deployment。
  • discovery: 该包用于发现Kubernetes apiServer支持的API。
  • dynamic:该包包含一个动态客户端,可以对任意Kubernetes API对象执行通用操作。
  • plugin/pkg/client/auth:该包包含可选的身份验证插件,用于从外部源获取凭证。
  • transport:该包用于设置认证并启动连接。
  • informers:每种k8s资源的informer实现。
  • listers:为每一个k8s资源提供list功能,将数据缓存到本地,然后get和list时从本地获取,减轻apiServer的压力。
  • tools:提供常用工具,例如SharedInformer、Reflector、DeltaFifo已经Indexers等。提供client查询和缓存机制,主要子目录为cache。
  • util:提供常用方法。例如WorkQueue工作队列,Certificate证书管理等。

确定要用的client-go版本

  client-go官方提供了多个版本,并且给出了和kubernetes版本的匹配列表,如下所示:

   解释一下表格中的 、+ 、- 的含义:

  •  表示精确匹配,如下图红框,表示v0.20.0版本可以精确匹配1.20.0版本的kubernetes;
  • + 表示有的新特性是client-go支持的,但是此kubernetes版本却不支持;
  • - 表示有的新特性是kubernetes支持的,但是此client-go版本却不支持;

client-go中的client

  client-go中提供了四种与k8s apiServer交互的客户端,分别是 Rest Client、ClientSet、 Discovery Client和Dynamic Client:

  • RestClient:最基础的client,底层是对标准库的net/http的封装,下面的client都是对rest client的封装。
  • ClientSet:基于Rest Client进行了封装,通过clientset可以更加方便地操作K8S地资源对象。
  • DiscoveryClient:发现客户端,负责发现apiServer支持地资源组、资源版本和资源信息,相当于使用kubectl api-resources
  • DynamicClient:动态客户端,用于发现kubernetes的API Server支持的Group、Version、Resources等信息;可以对任意的K8S资源对象进行操作,包括CRD.

 GVK和GVR

  • G(Group组):资源组,包含一组资源操作的集合,比如apps下面有deployment、demonset等。
  • V(Version版本):资源版本,用于区分不同API的稳定程度和兼容性,比如v1、v1alpha1等。
  • R(Resources资源):资源信息,用于区别不同的资源API,k8s中有很多资源,比如pod、deployment、ingress等。
  • K(Kind类别):资源对象的类型,每个资源对象都需要Kind来区分它自身代表的资源类型。

一般在调用接口时,我们只需要知道GVR即可,通过GVR操作对应的资源对象。

posted @ 2023-01-29 15:23  wushaoyu  阅读(329)  评论(0编辑  收藏  举报