对象类型格式
metadata 嵌套字段
metadata 字段用于描述对象的属性信息,其内嵌多个字段用于定义资源的元数据,例如name 和labels 等, 这些字段大体可分为必要字段和可选字段两大类。名称空间级别的资源的必选字段包括如下三项。
- nameespace:指定当前对象隶属的名称空间,默认值为default。
- name:设定当前对象的名称,在其所属的名称空间的同一类型中必须唯一。
- uid:当前对象的唯一表示符, 其唯一性仅发生在特定的时间段和名称空间中;此标识符主要是用于区别拥有同样名字的 “已删除” 和 “重新创建” 的同一个名称的对象。
可选字段通常是指由Kubernetes系统自行维护和设置,或者存在默认,或者本身允许使用空值等类型的字段,常用的有如下几个;
- labels:设定用于标识当前对象的标签,键值数据,常被用作挑选条件。
- annotations:非标识型键值数据,用来作为挑选条件,用于labels的补充。
- resourceVersion:当前对象的内部版本标识符,用于客户端确定对象变动是否。
- generation:用于标识当前对象目标状态的代码。
- creationTimestamp:当前对象创建日期的时间戳。
- deletionTimestamp:当前对象删除日期的时间戳。
此外,用户通过配置清单创建资源时,通常仅需要给出必选字段,可选字段可按需指定,对于用户未明确定义的嵌套字段,则需要由一系列的finalizer 组件自动予以填充。而用户需要对资源创建的目标资源对象镜进行强制效验,或者在修改时需要用到initalizer 组件完成,例如,为每个待创建的Pod 对象添加一个Sidecar 容器等。不同的资源类型也会存在一些专有的嵌套字段,例如,ConfigMap 资源还支持使用cluserName等。
spec和status字段
Kubernetes用spec 来描述所期望的对象应该具有的状态,而用status字段来记录对象在系统上的当前状态,因此status字段仅对活动对象才有意义。这两个字段都属于嵌套类型的字段。在定义资源 配置清单时,spec时必须定义的字段,用于描述对象的目标状态,即用户期望对象需要表现出来的特征。status字段则记录了对象的当前状态(或实际状态),此字段于Kubernetes系统负责填充或更新,用户不能手动镜像定义。Master 的controller-manager通过相应的控制器组件动态管理并确保对象的实际状态匹配用户所期望的状态,它时一种调和(reconciliation)配置系统。
例如,Deployment时一种用于描述集群中允许的应用的对象,因此,创建Deployment类型的对象时,需要为目标Deployment对象设定spec,指定期望需要允许的Pod副本数量,使用的标签选择器以及Pod模板等。Kubernetes系统读取待创建的Deployment对象的spec以及系统上响应的活动对象的当前状态,必要时进行对象更新以确保status字段吻合spec字段中期望的状态。如果这启动任一实例出现问题(status字段值发生变化),那么Kubernetes系统则需要即使对spec 和status字段的差异做出响应,例如,补足缺失的Pod副本数目等。
spec字段且套的字段对于不同的对象类型来说各不相同,具体需要参照Kubernetes API 参考手册中的说明分别进行获取。