通过 Argocd 将 Helm chart 部署到多个环境的声明式方法

Declarative approach to deploy Helm chart by Argocd to multiple environments

我正在使用带有 helm 图表的 Argocd。我有两个环境:uat, prod.

据我了解,helm 的正确方法是让基本文件夹包含 commons + 每个 env 文件夹。

所以我有一个包含 3 个文件夹的分支:

base # for commons: Chart.yaml, templates, etc.
uat  # for uat values.yaml
prod # for prod values.yaml

在我的 helm 图表中,我有以下 Chart.yaml(存储在基本文件夹中):

apiVersion: v1
appVersion: 1.0.11 
name: my-nice-app
version: 1.0.11

每次发布我都会增加appVersionversionversion用作图像标签图表中的版本)。

我使用声明式方法部署 helm chart(这是 uat 应用程序资源,类似用于 prod):

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-nice-app
  namespace: argocd
spec:
  project: default

  source:
    repoURL: some-url
    targetRevision: HEAD
    path: base

    helm:
      version: v3
      valueFiles:
        - uat/values.yaml

  destination:
    server: https://kubernetes.default.svc
    namespace: uat

  syncPolicy:
    syncOptions:
    - CreateNamespace=false

    automated:
      selfHeal: true
      prune: true

问题:

我确实更新了 uat 值文件。

我用新版本更新 Chart.yaml。

我只想部署 uat(但是当我更新基础产品时也会触发)。

我应该在哪里或如何存储 Chart.yaml?我应该更改 Argocd 应用程序资源吗?或者唯一的选择是为每个环境复制图表?

我也不希望在 Argocd 应用程序资源中存储任何与版本相关的信息(因此不要每次都更改它)。

不申请就好了kustomized.io。

您应该将其分成 2 个图表(base chartvalue chart
base chart是价值图表的chart dependency,这样如果你更新基本图表,如果你不更新图表依赖,value chart不会受到影响。

value-chart 的文件 Chart.yaml 将如下所示。

apiVersion: v2
name: my-nice-app-prod
description: Chart for production

type: application

version: 0.0.1

appVersion: "1.0.0"

dependencies:
- name: my-nice-app-chart
  version: 0.1.9

Link 参考文献:
https://helm.sh/docs/helm/helm_dependency/