• Client-go学习(1)


    GVR和GVK

    kubernetes API是通过Http协议以RESTful的形式提供的,同时支持JSON和Protobuf的数据格式,Protobuf是为了方便集群内部调用而支持的。我们自己平时调用kubernetes接口,一版都是使用json数据格式。
    在 kubernetes API中一版使用GVR或GVK来区分特定的资源,更具不同的分组,版本及资源,进行URL的定义,有了分组和多版本的支持,即便是后续的版本中,需要去掉资源对象的某些字段或者重构API资源,也可以保证版本之间的兼容性。
    kubernetes API的分组可以分为无组名资源组和有组名资源组,无组名资源组也被称为核心资源组Core Group
    有组名资源组:
    在这里插入图片描述
    无组名资源组:
    在这里插入图片描述

    GVR/GVK含义

    G(Group):资源组,包含一组资源操作的集合。
    V(version):资源版本,用于区分不同API的稳定程度及兼容性。
    R(Resource):资源信息,用于区分不同的资源API。
    K(Kind):资源对象的类型,每个资源对象都需要Kind来区分他自身代表的资源类型。

    一般在接口调用的时候,我们只需要知道GVR即可。通过GVR操作对应的资源对象。
    通过GVR组成RESTful API请求路径,例如,针对apps/v1下面的Deployment的RESTful API请求路径如下。

    GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}
    
    • 1

    GVK相反通过GVK信息则可以获取要读取的资源对象的GVR,进而构建RESTful API请求获取对应的资源。这种GVK与GVR的映射叫做RESTMapper
    RESTMapper其主要作用是在ListerWatcher时,根据Schema定义的类型GVK解析出GVR,向APIServer发起HTTP请求获取资源,然后watch。

    client-go

    client-go是负责与kubernetes APIServer服务进行交互的客户端库,利用Client-go与Kubernetes APIServer进行交互访问,由此对k8s中的各类资源对象进行管理操作,包括内置的资源对象及CRD。
    client-go不仅被k8s进行使用,其他围绕k8s的生态也被大量使用,例如:kubectl ETCD-operator等。
    client-go一共提供了4种与kubernetes APIServer交互的客户端对象,分别为RESTClientDiscoveryClientClientSetDynamicClient
    RESTClient::最基础的客户端,主要对HTTP请求进行了封装,支持json和protobuf格式的数据。
    DiscoveryClient:发现客户端,负责发现APIServer支持的资源组、资源版本和资源信息。
    ClientSet:负责操作k8s内置的资源对象,比如:pod,service。
    DynamicClient:动态客户端,可以对任意的k8s资源对象进行通用操作,包括CRD。
    在这里插入图片描述

  • 相关阅读:
    CentOS(4)——关于Linux软件下载时:amd64、x86、x86_64、arm64 的说明
    Docker初级:Docker常用命令总结
    Go 语言高级网络编程
    【C++】C++ 语言对 C 语言的加强 ③ ( 类型检查增强 - 所有函数和变量必须有类型 | 新增 bool 类型 - bool 类型简介 )
    学习新语言方法总结(一)
    nginx(三十七)在线预览pdf文件
    数据库设计:防止MySQL字段名与关键字相撞,保护数据完整性!
    【Redis】 缓存双写一致性
    beamManagement(四)connected mode UL training
    Map介绍
  • 原文地址:https://blog.csdn.net/passnetY/article/details/126176514