Kubernetes源码剖析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.2 ResourceList

Kubernetes Group、Version、Resource等核心数据结构存放在vendor/k8s.io/apimachinery/pkg/apis/meta/v1目录中。它包含了Kubernetes集群中所有组件使用的通用核心数据结构,例如APIGroup、APIVersions、APIResource等。其中,我们可以通过APIResourceList数据结构描述所有Group、Version、Resource的结构,以最常用的Pod、Service、Deployment资源为例,APIResourceList Example代码示例如下:

Kubernetes的每个资源可使用metav1.APIResource结构进行描述,它描述资源的基本信息,例如资源名称(即Name字段)、资源所属的命名空间(即Namespaced字段)、资源种类(即Kind字段)、资源可操作的方法列表(即Verbs字段)。

每一个资源都属于一个或多个资源版本,资源所属的版本通过metav1.APIVersions结构描述,一个或多个资源版本通过Versions []string字符串数组进行存储。

在APIResourceList Example代码示例中,通过GroupVersion字段来描述资源组和资源版本,它是一个字符串,当资源同时存在资源组和资源版本时,它被设置为<group>/<version>;当资源不存在资源组(Core Group)时,它被设置为/<version>。可以看到Pod、Service资源属于v1版本,而Deployment资源属于apps资源组下的v1版本。

另外,可以通过Group、Version、Resource结构来明确标识一个资源的资源组名称、资源版本及资源名称。Group、Version、Resource简称GVR,在Kubernetes源码中该数据结构被大量使用,它被定义在vendor/k8s.io/apimachinery/pkg/runtime/schema中。代码示例如下:

代码路径:vendor/k8s.io/apimachinery/pkg/runtime/schema/group_version.go

以Deployment资源为例,资源信息描述如下:

在vendor/k8s.io/apimachinery/pkg/runtime/schema包中定义了常用的资源数据结构,如表3-1所示。

表3-1 常用的资源数据结构说明

Group、Version、Resource核心数据结构详情如图3-2所示。

图3-2 Group、Version、Resource核心数据结构详情