K8s:编辑vs修补vs更新

时间:2019-10-15 14:52:29

标签: kubernetes kubectl

在kubectl备忘单(https://kubernetes.io/docs/reference/kubectl/cheatsheet/)中,有3种修改资源的方法。您可以更新,修补或编辑。

它们之间的实际区别是什么?何时应使用它们?

2 个答案:

答案 0 :(得分:0)

我想我没有答案,但是我希望这会有所帮助。

这三种方法都做同样的事情,它们修改了一些资源配置,但是命令和实现方法并不相同。

如文档中所述:

  • 编辑是当您打开kubernetes集群中的yaml配置文件并对其进行编辑(使用vim或其他文件)以在您的集群上进行直接修改时。我不会在测试目的之外建议这样做,从原始yaml文件重新应用conf将删除修改。
  • 修补程序对我来说似乎是相同的,但是没有打开文件并且没有针对资源的特定部分。
  • 在文档中更新似乎是不使用补丁或编辑即可更新资源的所有其他方法。其中一些可用于调试/测试,例如强制替换资源或更新映像版本。其他用于更新新配置。

根据经验,我只使用编辑和一些更新命令来进行测试,大多数时候我会重新应用配置。

答案 1 :(得分:0)

我想在 night-gold的答案中添加一些内容。我会说,没有任何更好和更差的方法来修改您的资源。 一切取决于特定的情况和您的需求。

值得强调编辑和修补之间的主要区别,即第一个是交互式方法,第二个可以称为 batch方法与第一个脚本不同,它很容易在脚本中使用。试想一下,您需要对数十种甚至数百种不同的 kubernetes资源/对象进行更改,并且编写一个简单的脚本来轻松进行修改,您可以在其中进行补丁所有这些资源都是自动化的。打开它们中的每一个进行编辑都不会很方便和有效。只是一个简单的例子:

kubectl patch resource-type resource-name --type json -p '[{"op": "remove", "path": "/spec/someSection/someKey"}]'

尽管起初它看上去比不必要的复杂,并且与交互式编辑和手动删除特定部分中的特定行相比使用起来不是很方便,但实际上这是一种非常快速有效的方法,可以在脚本中轻松实现,并且可以当您处理许多对象时,可以节省大量的工作和时间。

对于apply命令,您可以阅读documentation

  

通过定义Kubernetes的文件来应用程序管理应用程序   资源。它通过以下方式创建和更新集群中的资源   运行kubectl适用。 这是推荐的管理方式   Kubernetes生产应用程序。

通过从更新的yaml清单中重新应用配置,您还可以修改运行的配置。从git存储库中拉出。

如果用update来表示rollout(以前称为rolling-update),正如您在documentation中所见,则它的功能完全不同。它主要用于更新部署。您不要使用它来更改任意类型的资源。