Helm在没有根Helm的情况下安装依赖关系图



我有一个有点奇怪的问题,但也许您可以为这个实现提供正确的方法。

我读过关于Helm Dependencies的文章——当你可以设置必要的图表列表并在你的";主";图表安装。

有没有可能在没有"版本"的情况下拥有这个依赖项列表(有版本(;主/根";图表

例如,我想将rabbit、redis、postgres和一些我的自定义图表安装到我的k8s集群中。

我不想跑几次"舵图安装"-我想要一个包含helms/versions列表的文件,并在一个命令中安装它们。

此外,我想使用同一个文件轻松升级舵图-我想更改版本,再次运行一个命令,只更新必要的舵图(使用不同的版本(。

有可能吗,或者,也许我应该用另一种东西来做这个?

Helm图表不需要包含任何自己的模板。可以有一个Helm图表,其中包含依赖项;则在该"0"上运行CCD_ 1;"父";chart将安装所有依赖项。

运行helm create以构建新图表,然后从生成器中删除values.yaml文件和template目录,并在Chart.yaml中填写要求,这将是有效的。

在您的设置中,您只是在安装基础设施服务。偶尔你会看到这样一个仅依赖关系的图表,用于安装几个应用程序组件;这有时被称为伞形图。Helm喜欢将依赖关系组合在一起的伞形图存在潜在问题:如果不同的应用程序组件依赖于某个图表的不同主要版本,则可能会发生冲突,如果您有多个组件,每个组件都依赖于Redis,伞形图安装通常只安装一个共享Redis,而不是每个组件安装一个独立的Redis。

有许多方法可以将多个helm install命令分组为一个执行。根据您的需要,编写一个简单的shell脚本通常是可行的。通用自动化工具(Ansible、Salt Stack、Chef(可能有运行Helm的方法,如果没有,则可以运行任意命令。这里还有一些特定于Helm的工具:Helmsman更简单,Helmfile更复杂,但两者都可以让你"安装";相关图表的集合,而不必构建伞形图表。

你在问题开头描述的内容被称为"伞形图表";。这些图表用于捆绑其他图表并将其作为一个单元进行管理。

如果这不是你想做的(这就是我理解你问题的方式(,那么你需要使用其他工具。其中一个工具是Helmfile,它允许您定义Helm图表、它们的版本和Helm值的列表。然后,您可以一次性安装/升级/卸载所有参考的Helm Charts。

另一种选择是使用kluctl(免责声明:我是它的主要开发者(。它基本上允许您做与Helmfile提供的相同的事情,但以不同的方式/风格。Kluctl专注于Kustomize部署,同时允许您轻松引入第三方Helm Charts。

在Kluctl部署中拥有上述Helm图表将需要您拥有一个Kluctl的部署项目,该项目看起来如下:

my_project
├── third-party
│   ├── rabbit
│   │   ├── kustomization.yaml
│   │   ├── helm-chart.yaml
│   │   └── helm-values.yaml
│   ├── redis
│   │   ├── kustomization.yaml
│   │   ├── helm-chart.yaml
│   │   └── helm-values.yaml
│   └── deployment.yaml
├── deployment.yaml
└── .kluctl.yaml

my_project/deployment.yaml

vars:
- values:
# this is arbitrary yaml
my:
ns: my-namespace
# this is also possible, loading vars from a file...
# many other sources are supported as well
# - file: my-config.yaml
deployments:
- include: third-party
commonLabels:
my.example.com/deployment: my-example-deployment
my.example.com/target: {{ target.name }}

my_project/第三方/deployment.yaml

deployments:
- path: rabbit
- path: redis

my_project/第三方/rebbit/kustomization.yaml

resources:
# this file is auto-generated by the helm-integration
- deploy.yaml

my_project/第三方/rebbit/helm-chart.yaml

helmChart:
repo: https://charts.bitnami.com/bitnami
chartName: rabbitmq
chartVersion: 10.3.2
releaseName: my-rabbit
# my.ns comes from the 'vars' defined in the root deployment.yaml
namespace: "{{ my.ns }}"
output: deploy.yaml

my_project/第三方/rebbit/helm-values.yaml

auth:
username: my-user
password: you-would-of-course-never-do-this

my_project/第三方/redis/helm-chart.yaml和helm-values.yaml

基本上与rabbitmq相同,但有redis特定的设置。

my_project/.kuctl.yaml

targets:
- name: dev
context: my-dev-cluster-context

使用kluctl

基于上面的示例,您将从根项目目录运行kluctl helm-pull,然后它将预拉所有涉及的Helm Charts,并写入Helm-chart.yaml文件之外的内容。这些预先提取的图表旨在添加到您的版本控制中(这可能在未来发生变化(。

之后,您可以运行kluctl diff -t devkluctl deploy -t devhelm install0等命令来处理部署。

kluctl helm-upgrade将帮助您升级预先绘制的Helm图表。

完整的工作示例

在这里可以找到一个完整的工作示例。上面显示的yamls只是为了给出一个关于Helm相关内容的想法。

最新更新