K8s源码分析(2)-Resource Meta

上一篇文章中我们主要介绍 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。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值