kubectl的命令可分为三类:
- 陈述式命令(imperative command) 陈述式对象配置(imperative object configuration)
- 声明式对象配置(declarative object configuration)
陈述式管理方式包括create、delete、get和replace等命令,与陈述式命令的不同之处在于,它通过资源配置清单读取需要管理的目标资源对象。陈述式对象配置的管理操作直接作用于活动对象,即便仅修改配置清单中的极小一部分内容,使用replace命令进行的对象更新也将会导致整个对象被替换。进一步地,混合使用陈述式命令进行清单文件带外修改时,必然会导致用户丢失活动对象的当前状态。
声明式对象配置并不直接指明要进行的对象管理操作,而是提供配置清单文件给K8S系统,并委托系统跟踪活动对象的状态变动。资源对象的创建、删除及修改操作全部通过唯一的命令apply来完成,并且每次操作时,提供给命令的配置信息都将保存于对象的注解信息(kubectl.kubernets.io/last-applied-configuration)中,并通过对比检查活动对象的当前状态、注解中的配置信息及资源清单中的配置信息三方进行变更合并,从而实现仅修改变动字段的高级补丁机制。