Kubernetes 对象管理
kubectl
命令行工具支持多种方法来创建和管理 Kubernetes 对象。本文件概述了不同的方法。阅读 Kubectl 文档 以了解有关使用 Kubectl 管理对象的详细信息。
管理技术
警告
应仅使用一种技术来管理 Kubernetes 对象。对同一对象混合使用不同的技术会导致未定义的行为。管理技术 | 操作对象 | 推荐环境 | 支持的编写者 | 学习曲线 |
---|---|---|---|---|
命令式命令 | 实时对象 | 开发项目 | 1+ | 最低 |
命令式对象配置 | 单个文件 | 生产项目 | 1 | 中等 |
声明式对象配置 | 文件目录 | 生产项目 | 1+ | 最高 |
命令式命令
使用命令式命令时,用户直接操作集群中的实时对象。用户将操作作为参数或标志提供给 kubectl
命令。
这是入门或在集群中执行一次性任务的推荐方法。由于此技术直接操作实时对象,因此它不会提供以前配置的历史记录。
示例
通过创建 Deployment 对象运行 nginx 容器的实例
kubectl create deployment nginx --image nginx
权衡
与对象配置相比的优势
- 命令表示为单个操作词。
- 命令只需一步即可更改集群。
与对象配置相比的劣势
- 命令不与变更审查流程集成。
- 命令不提供与变更相关的审计跟踪。
- 命令不提供记录来源,除了实时记录。
- 命令不提供创建新对象的模板。
命令式对象配置
在命令式对象配置中,kubectl 命令指定操作(创建、替换等)、可选标志和至少一个文件名。指定的文件必须包含以 YAML 或 JSON 格式定义的对象。
有关对象定义的更多详细信息,请参阅 API 参考。
警告
命令式replace
命令用新提供的规范替换现有规范,删除配置文
示例
创建配置文
kubectl create -f nginx.yaml
删除两个配置文
kubectl delete -f nginx.yaml -f redis.yaml
通过覆盖实时配置来更新配置文
kubectl replace -f nginx.yaml
权衡
与命令式命令相比的优势
- 对象配置可以存储在源代码控制系统(如 Git)中。
- 对象配置可以与流程集成,例如在推送之前审查更改和审计跟踪。
- 对象配置提供用于创建新对象的模板。
与命令式命令相比的劣势
- 对象配置需要了解基本的对象架构。
- 对象配置需要额外步骤来编写 YAML 文件。
与声明式对象配置相比的优势
- 命令式对象配置的行为更简单,更容易理解。
- 从 Kubernetes 版本 1.5 开始,命令式对象配置更加成熟。
与声明式对象配置相比的劣势
- 命令式对象配置最适合文件,而不适合目录。
- 对实时对象的更新必须反映在配置文
声明式对象配置
使用声明式对象配置时,用户操作本地存储的对象配置文
注意
声明式对象配置保留由其他编写者做出的更改,即使这些更改没有合并回对象配置文示例
处理 configs
目录中的所有对象配置文
kubectl diff -f configs/
kubectl apply -f configs/
递归处理目录
kubectl diff -R -f configs/
kubectl apply -R -f configs/
权衡
与命令式对象配置相比的优势
- 直接对实时对象做出的更改将保留,即使它们没有合并回配置文
- 声明式对象配置在操作目录和自动检测每个对象的“创建”、“修补”、“删除”操作类型方面具有更好的支持。
与命令式对象配置相比的劣势
- 声明式对象配置在结果出乎意料时更难调试和理解。
- 使用 diff 进行部分更新会创建复杂的合并和修补操作。
下一步
上次修改时间:2022 年 1 月 8 日下午 6:09 PST:重新组织“使用 Kubernetes 对象”部分 (634c17f61c)