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}
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交互的客户端对象,分别为RESTClient,DiscoveryClient,ClientSet,DynamicClient。
RESTClient::最基础的客户端,主要对HTTP请求进行了封装,支持json和protobuf格式的数据。
DiscoveryClient:发现客户端,负责发现APIServer支持的资源组、资源版本和资源信息。
ClientSet:负责操作k8s内置的资源对象,比如:pod,service。
DynamicClient:动态客户端,可以对任意的k8s资源对象进行通用操作,包括CRD。

Kubernetes API采用RESTful设计,支持JSON和Protobuf格式,通过GVR(Group-Version-Resource)和GVK(Group-Version-Kind)来管理资源。GVR用于指定资源的组、版本和具体资源,GVK标识资源对象类型。客户端库client-go提供与API Server交互的工具,如RESTClient、DiscoveryClient、ClientSet和DynamicClient。RESTMapper根据GVK解析GVR以构建请求。通过GVR和GVK,k8s确保了版本兼容性和资源管理的灵活性。
4533

被折叠的 条评论
为什么被折叠?



