大多数的对象或列表类型的资源还会有metadata、spec 和 status 这 3 个嵌套型的字段。其中 metadata 字段为资源提供元数据信息,例如名称、隶属的名称空间和标签等,因而也称为对象元数据(ObjectMeta);spec 字段则是由用户负责声明对象期望状态的字段,不同资源类型的期望状态描述方式各不相同,因此其嵌套支持的字段也不尽相同;而 status 字段则记录活动对象的当前状态信息,也称为观察状态,它由 Kubernetes 系统自行维护,对用户来说为只读字段,不需要在配置清单中提供,而是在查询集群中的对象时由 API Server 在响应中返回。
Kubernetes API 中定义的大部分资源都有 spec 和 status 两个字段:前一个是声明式 API 风格的期望状态,由用户负责定义而由系统读取;后一个是系统写入的实际观测到的状态,可被用户读取,以了解 API 对象的实际状况。控制器是 Kubernetes 的核心组件之一,负责将用户通过 spec 字段声明的 API 对象状态“真实”反映到集群之上,尤其是创建和更新操作,并持续确保系统观测到并写入 status 的实际状态符合用户期望的状态。
kubectl 的命令也可大体分为 3 类:命令式命令(imperative command)、命令式对象配置(imperative object configuration)和声明式对象配置(declarative object configuration)。
(1)命令式命令是指将实施于目标对象的操作以选项及选项参数的方式提供给 kubectl 命令,并直接操作 Kubernetes 集群中的活动对象,因而无法提供之前配置的历史记录。这是在集群中运行“一次性”任务的最简单方法。
(2)命令式对象配置管理方式包括 create、delete、get 和 replace 等命令。与命令式命令不同,它通过资源配置清单读取要管理的目标资源对象,通用格式为 kubectlcreate|delete| replace|get -f <filename|url>,其中的 filename 和 url 分别是指以本地文件路径或 URL 来指定配置清单文件。