Kubernetes 对象管理

kubectl 命令行工具支持多种不同的方式来创建和管理 Kubernetes 对象。本文档概述了不同的方法。有关通过 Kubectl 管理对象的详细信息,请阅读 Kubectl 书籍

管理技术

管理技术操作推荐环境支持的作者学习曲线
命令式命令活跃对象开发项目1+最低
命令式对象配置单个文件生产项目1中等
声明式对象配置文件目录生产项目1+最高

命令式命令

使用命令式命令时,用户直接在集群中的活跃对象上操作。用户将操作作为参数或标志提供给 kubectl 命令。

这是开始或在集群中运行一次性任务的推荐方式。由于此技术直接在活跃对象上操作,因此它不提供以前配置的历史记录。

示例

通过创建 Deployment 对象运行 Nginx 容器实例

kubectl create deployment nginx --image nginx

权衡

与对象配置相比的优势

  • 命令以单个动作词表示。
  • 命令只需一步即可对集群进行更改。

与对象配置相比的缺点

  • 命令不与更改审查流程集成。
  • 命令不提供与更改相关的审计跟踪。
  • 命令除了活跃状态之外不提供任何记录来源。
  • 命令不提供创建新对象的模板。

命令式对象配置

在命令式对象配置中,kubectl 命令指定操作(创建、替换等)、可选标志和至少一个文件名。指定的文件必须包含 YAML 或 JSON 格式的对象的完整定义。

有关对象定义的更多详细信息,请参阅 API 参考

示例

创建配置文件中定义的对象

kubectl create -f nginx.yaml

删除两个配置文件中定义的对象

kubectl delete -f nginx.yaml -f redis.yaml

通过覆盖活跃配置来更新配置文件中定义的对象

kubectl replace -f nginx.yaml

权衡

与命令式命令相比的优势

  • 对象配置可以存储在 Git 等源代码控制系统中。
  • 对象配置可以与诸如在推送前审查更改和审计跟踪之类的流程集成。
  • 对象配置提供了一个创建新对象的模板。

与命令式命令相比的缺点

  • 对象配置需要对对象模式有基本了解。
  • 对象配置需要额外编写 YAML 文件的步骤。

与声明式对象配置相比的优势

  • 命令式对象配置行为更简单,更容易理解。
  • 截至 Kubernetes 1.5 版本,命令式对象配置更成熟。

与声明式对象配置相比的缺点

  • 命令式对象配置最适合文件,而不是目录。
  • 对活跃对象的更新必须反映在配置文件中,否则它们将在下次替换时丢失。

声明式对象配置

使用声明式对象配置时,用户在本地存储的对象配置文件上操作,但用户不定义对文件执行的操作。创建、更新和删除操作由 kubectl 自动按对象检测。这使得可以在目录上工作,其中不同的对象可能需要不同的操作。

示例

处理 configs 目录中的所有对象配置文件,并创建或修补活跃对象。你可以先 diff 查看将要进行的更改,然后应用

kubectl diff -f configs/
kubectl apply -f configs/

递归处理目录

kubectl diff -R -f configs/
kubectl apply -R -f configs/

权衡

与命令式对象配置相比的优势

  • 即使未合并回配置文件,直接对活跃对象所做的更改也会保留。
  • 声明式对象配置更好地支持按对象操作目录和自动检测操作类型(创建、修补、删除)。

与命令式对象配置相比的缺点

  • 声明式对象配置在意外情况下更难调试和理解结果。
  • 使用差异进行的局部更新会创建复杂的合并和修补操作。

下一步

最后修改于 2022 年 1 月 8 日下午 6:09 PST:重新组织 Kubernetes 对象操作部分 (634c17f61c)