首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >K8s源码分析(2)-Resource Meta

K8s源码分析(2)-Resource Meta

作者头像
TA码字
发布2021-09-14 14:50:19
发布2021-09-14 14:50:19
59900
代码可运行
举报
文章被收录于专栏:TA码字TA码字
运行总次数:0
代码可运行

上一篇文章中我们主要介绍 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 的定义
代码语言:javascript
代码运行次数:0
运行
复制
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 的定义
代码语言:javascript
代码运行次数:0
运行
复制
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。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TA码字 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档