我最近接触了 Helm。虽然我读了一些关于它如何好的文章。我对用例还不是很清楚。
当我可以在一个 yaml 文件中为我的 kubernetes 定义多个对象时,为什么我要使用 helm。现实生活中什么用例可以完美地适合 helm?
Helm 的主要功能在于其模板资源的能力。
虽然您可以使用单个 yaml 来声明您的资源,但对于简单的用例来说,这完全没问题(我也这样做)
当您谈论使用不同值运行该 yaml 的多个副本时,您可以为不同的副本拥有该 yaml 的不同副本(例如,一个用于测试,一个用于开发,一个用于生产);或者有一个模板化的 yaml,Helm 将在运行时根据您传递给它的值将其值替换到其中,并且仅传递每个环境将更改的内容。
使用模板化 yaml 意味着可以保证在不同环境中保持一致。在某些时候,拥有单独的独立 yaml 会导致其中一个或多个出现分歧,因为您几乎肯定会忘记对一个或多个 yaml 进行更改。
例如,环境的名称可能因环境而异,因此您可以使用以下方式在 yaml 中对其进行参数化:
{{ .Values.resourceName }}
然后在开发者的
values.yaml
中你可以拥有
resourceName: dev-stack
然后,当您安装 Helm 图表时,将其传入
helm upgrade --install chart-name repo/chart --values dev-values.yaml
Helm 将在模板顶部覆盖
dev-values.yaml
中指定的值,替换 {{..}}
以提供渲染的 yaml,然后将其上传到集群。此时,这与您在问题中提到的单个 yaml 中发送资源 yaml 没有什么不同 - 不同的是它如何到达那里以及在多个“配置文件”之间更改它是多么容易(可以这么说) 。您不再需要 3 个 yaml 保持同步,只需一个模板 yaml 和该模板内更改的项目列表
希望这一切都有道理,如果没有,请告诉我,我会尽力澄清。