Kubernetes笔记5-Kubernetes对象管理

Kubernetes 对象管理

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

管理技巧

警告:应该只使用一种技术来管理 Kubernetes 对象。同一对象的混合和匹配技术会导致未定义的行为。

管理技术 操作于 推荐环境 支持的作家 学习曲线
命令式命令 活动对象 开发项目 1+ 最低
命令式对象配置 个体文件 生产项目 1 缓和
声明性对象配置 文件目录 生产项目 1+ 最高

命令式命令

使用命令式命令时,用户直接对集群中的活动对象进行操作。用户向kubectl命令提供操作作为参数或标志。

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

例子

通过创建一个 Deployment 对象来运行 nginx 容器的一个实例:

kubectl create deployment nginx --image nginx

权衡

与对象配置相比的优势:

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

与对象配置相比的缺点:

  • 命令不与变更审查过程集成。
  • 命令不提供与更改相关的审计跟踪。
  • 命令不提供记录的来源,除了实时的。
  • 命令不提供用于创建新对象的模板。

命令式对象配置

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

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

警告:replace命令式命令用新提供的规范替换现有规范,删除对配置文件中缺少的对象的所有更改。这种方法不应该用于其规范独立于配置文件更新的资源类型。LoadBalancer例如,类型服务的externalIPs字段更新独立于集群的配置。

例子

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

kubectl create -f nginx.yaml

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

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

通过覆盖实时配置来更新配置文件中定义的对象:

kubectl replace -f nginx.yaml

权衡

与命令式命令相比的优点:

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

与命令式命令相比的缺点:

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

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

  • 命令式对象配置行为更简单、更容易理解。
  • 从 Kubernetes 1.5 版本开始,命令式对象配置更加成熟。

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

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

声明性对象配置

使用声明性对象配置时,用户对本地存储的对象配置文件进行操作,但用户并未定义要对文件进行的操作。自动检测每个对象的创建、更新和删除操作kubectl。这使得可以处理目录,其中不同的对象可能需要不同的操作。

注意:声明性对象配置保留其他作者所做的更改,即使这些更改没有合并回对象配置文件。这可以通过使用patchAPI 操作仅写入观察到的差异,而不是使用replace API 操作替换整个对象配置来实现。

例子

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

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

递归处理目录:

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

权衡

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

  • 直接对活动对象所做的更改会保留,即使它们没有合并回配置文件。
  • 声明式对象配置更好地支持对目录进行操作并自动检测每个对象的操作类型(创建、修补、删除)。

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

  • 当结果出乎意料时,声明性对象配置更难调试和理解。
  • 使用差异的部分更新会创建复杂的合并和补丁操作。
参考 kubernetes.io文档

你可能感兴趣的:(Kubernetes笔记5-Kubernetes对象管理)