问题描述
希望通过 ArgoCD 使用 Helm 部署应用,并使用提供的 Helm charts。同时,他想以声明性的方式指定自定义的值,而不是在部署后通过 Argo 的界面或命令行来设置这些值。然而,Argo 似乎假设你控制 Helm 仓库,从而控制了 values.yaml
文件,但是用户想要使用外部的仓库,而不必在 git 仓库中维护所有的 values.yaml
。用户列举了以下几种做法,但都存在疑问:
1. 使用自己的 values.yaml
镜像 Helm chart(需要维护多个应用的更新)。
2. 在 git 仓库中创建一个使用 Helm 的应用(不确定如何实现)。
3. 在 Helm 仓库中创建一个应用,然后通过 Kustomize 进行定制(同样不确定如何实现)。
用户想知道这个问题的正确解决方法。
解决方案
请注意以下操作可能因环境和工具版本差异而有所不同。
最佳解决方案:使用 Kustomize 和 Helm 来自定义部署
目前,在 ArgoCD 中以声明性方式为 Helm 部署添加自定义值的最佳方法是结合使用 Kustomize 和 Helm。
- 创建 Kustomization 文件: 在你的应用 git 仓库中创建一个 Kustomization 文件(例如
kustomization.yaml
)来指定 Helm chart 以及你要覆盖的值。示例如下:
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- your-helm-chart/
patchesStrategicMerge:
- values.yaml
- 创建 Values 文件: 在同一目录下创建一个
values.yaml
文件,用于指定你想要自定义的值,例如:
apiVersion: helm.cattle.io/v1
kind: HelmValues
metadata:
name: custom-values
spec:
valuesContent: |
yourValueKey: yourCustomValue
- 部署应用: 使用 ArgoCD 部署 Kustomization 文件。ArgoCD 将会应用 Kustomize 的配置并覆盖 Helm chart 的值。
这种方法的优势在于,你可以在自己的 git 仓库中维护 Kustomization 和自定义值文件,而无需担心镜像原始 Helm chart 或维护多个 values.yaml
。
方案2:使用 Helm 和 Values 文件
另一种方法是在 Helm chart 的根目录下创建一个 values.yaml
文件,指定你想要的自定义值。然后使用 ArgoCD 部署 Helm chart,并将 values.yaml
文件作为参数传递。这种方法相对直接,但可能需要在不同应用间维护多个 values.yaml
。
方案3:使用 Kustomize 自定义 Helm chart
你可以使用 Kustomize 来对已有的 Helm chart 进行进一步定制。在你的应用 git 仓库中创建一个 Kustomization 文件,然后使用 patchesStrategicMerge
指定要覆盖的 Helm chart 配置文件,然后使用 Kustomize 来生成定制后的 Helm chart。
请确保在执行任何操作之前备份你的数据和配置。方案的可行性可能会因你的环境和工具版本而有所不同。
无论你选择哪种方法,都可以在 ArgoCD 中以声明性方式为 Helm 部署添加自定义值。这将使你能够使用外部 Helm 仓库,并同时保持你的自定义值的可维护性。
结论
在 ArgoCD 中,你可以通过结合使用 Kustomize 和 Helm,或者直接使用 Helm 的方式,以声明性的方式为 Helm 部署添加自定义值。这样,你可以在维护外部仓库的同时,对部署进行必要的定制。记得在执行操作之前,了解你所使用工具的版本差异和操作细节。