在上一篇文章中我们主要介绍 kubernetes 中的 resource 以及 API,包括基于 namespace 和是否为核心组的不同维度来区分 resource。在 kubertenes 提供的标准 RESTful API 的 URI 定义中如何来映射不同 resource 的组,版本, namespace,类型,名称等。以及在我们常用的 YAML 文件里。各个节点元素如何映射到 API 定义之中。这里我们主要介绍 resource meta,以及相关的定义。
在 kubernetes resource 中比较重要的 meta 分为两种类型, type meta 和 object meta。type meta 主要定义了 resource 的组,版本,类型,即 group, version, kind (GVK)。object meta 主要定义了 resource 的名称,所属的 namesapce,添加的 label 等信息。这里再一次把上一篇文章中我们熟悉的 YAML 文件中 type meta 和 object meta 等的定义列举如下:
staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go 源文件中定义了 kubernetes resource 的 type meta 及 object meta。
TypeMeta 的定义
type TypeMeta struct {
Kind string `json:"kind,omitempty" protobuf:"bytes,1,opt,name=kind"`
APIVersion string `json:"apiVersion,omitempty" protobuf:"bytes,2,opt,name=apiVersion"`
}
由上述源码我们发现字段 Kind 定义了资源的类型,字段 APIVersion 定义了资源的 group 和 version。
ObjectMeta 的定义
type ObjectMeta struct {
Name string `json:"name,omitempty" protobuf:"bytes,1,opt,name=name"`
GenerateName string `json:"generateName,omitempty" protobuf:"bytes,2,opt,name=generateName"`
Namespace string `json:"namespace,omitempty" protobuf:"bytes,3,opt,name=namespace"`
SelfLink string `json:"selfLink,omitempty" protobuf:"bytes,4,opt,name=selfLink"`
UID types.UID `json:"uid,omitempty" protobuf:"bytes,5,opt,name=uid,casttype=k8s.io/kubernetes/pkg/types.UID"`
ResourceVersion string `json:"resourceVersion,omitempty" protobuf:"bytes,6,opt,name=resourceVersion"`
Generation int64 `json:"generation,omitempty" protobuf:"varint,7,opt,name=generation"`
CreationTimestamp Time `json:"creationTimestamp,omitempty" protobuf:"bytes,8,opt,name=creationTimestamp"`
DeletionTimestamp *Time `json:"deletionTimestamp,omitempty" protobuf:"bytes,9,opt,name=deletionTimestamp"`
DeletionGracePeriodSeconds *int64 `json:"deletionGracePeriodSeconds,omitempty" protobuf:"varint,10,opt,name=deletionGracePeriodSeconds"`
Labels map[string]string `json:"labels,omitempty" protobuf:"bytes,11,rep,name=labels"`
Annotations map[string]string `json:"annotations,omitempty" protobuf:"bytes,12,rep,name=annotations"`
OwnerReferences []OwnerReference `json:"ownerReferences,omitempty" patchStrategy:"merge" patchMergeKey:"uid" protobuf:"bytes,13,rep,name=ownerReferences"`
Finalizers []string `json:"finalizers,omitempty" patchStrategy:"merge" protobuf:"bytes,14,rep,name=finalizers"`
ClusterName string `json:"clusterName,omitempty" protobuf:"bytes,15,opt,name=clusterName"`
ManagedFields []ManagedFieldsEntry `json:"managedFields,omitempty" protobuf:"bytes,17,rep,name=managedFields"`
}
由上述源码我们发现里面定义的都是资源本身的各个属性,例如资源的名称 Name,所属的命名空间 Namespace,被打上的标签 Lables,被创建的时间 CreationTimestamp,被删除的时间 DeletionTimestamp 等等。
目前先我们写到这里,在下一篇文章中我们来介绍 kubernates resource 的 group 和 version。