k8s 核心对象
TypeMeta
k8s对象最基本定义,通过GKV(Group,Kind,Version)模型定义一个对象的类型
- Group:Kubernetes 定义了非常多的对象,如何将这些对象进行归类是一门学问,将对象依据其功能范围归入不同的分组, 比如把支撑最基本功能的对象归入 core 组,把与应用部署有关的对象归入 apps 组,会使这些对象的可维护性和可 理解性更高。
- Kind:定义一个对象的基本类型,比如 Node、Pod、Deployment 等。
- Version:社区每个季度会推出一个 Kubernetes 版本,随着 Kubernetes 版本的演进,对象从创建之初到能够完全生产化就 绪的版本是不断变化的。与软件版本类似,
通常社区提出一个模型定义以后,随着该对象不断成熟,其版本可能会 从 v1alpha1 到 v1alpha2,或者到 v1beta1,最终变成生产就绪版本 v1。
MetaData
- Namespace
- Name 对象名称,与namespace一起定义某个对象
- Label 顾名思义就是给对象打标签,一个对象可以有任意对标签,其存在形式是键值对。Label定义了对象的可识别属性,Kubernetes API支持以 Label作为过滤条件,查询对象。
- Annotation:与Label一样用键值对来定义,但 Annotation 是作为属性扩展, 更多面向于系统管理员和开发人员,因此需要像其他属性一样做合理归类。
- Finalizer:资源锁,如果该字段不为空,如删除pod的时候只做软删除,更新metadata.deletionTimestamp字段
- ResourceVersion:乐观锁,取值为对应在etcd里的ResourceVersion
Spec与Status
spec是用户期望状态,也就是我们yaml中定义的期望对象 status是对象实际的状态,由控制器使用并更新