在 argocd 中的不同部署中使用相同的规范

Using same spec across different deployment in argocd

我目前正在使用 Kustomize。我们有多个部署和服务。它们具有相同的 spec 但名称不同。是否可以将 spec 存储在单独的文件中并在所有部署文件中引用它们?

使用 Helm,在 ArgoCD 中创建一个带有 helm:3 容器的管道,并创建一个 helm-chart 目录或存储库。拉取图表存储库,使用 helm 进行部署。使用 values.yaml 作为您要使用的动态值。此外,您需要将 kubeconfig 文件添加到您的管道,但这是另一个问题。

这是我能给的最好的报价。有关更多信息,我需要检查 ArgoCD。

我遇到了这个问题,我使用 Helm3 图表解决了它:

  • 我有一张图表。 Yaml 文件,我在其中指明了我的发布名称和版本
  • 值。 Yam,我在其中定义了用于特定环境的所有变量。
  • 价值观测试。 Yaml 文件,例如,在测试环境中使用的文件,您应该只放置必须从一个环境更改为另一个环境的变量。

希望可以帮助您解决问题。

Helm 非常适合该解决方案。 但是,由于我们已经在使用 Kustomize 并且迁移到 Helm 需要时间,因此我们在 Kustomize 中使用 namePrefix 和标签修饰符解决了这个问题。

我还建议使用 Helm。然而,Helm 的一个限制是您不能创建动态 values.yaml 文件 (https://github.com/helm/helm/issues/6699) - 这可能非常烦人,尤其是对于 multi-environment 设置。然而,ArgoCD 提供了一种非常好的方法来使用它的 Application 类型来做到这一点。

解决方案是创建一个自定义 Helm chart 来生成您的 ArgoCD 应用程序(可以为每个环境使用不同的配置调用)。此 helm chart 中的模板将生成 ArgoCD Application 类型。此类型支持 source.helm.values 字段,您可以在其中动态设置 values.yaml.

例如,HashiCorp Vaultvalues.yaml 可能非常复杂,在这种情况下,每个环境都非常需要动态 values.yaml(因为这可以防止多个 values.yaml 每个环境的文件很大但非常相似)。

如果您的自定义 ArgoCD helm chart 是 my-argocd-application-helm,则以下是示例 values.yaml 以及生成您的 Vault 应用程序的模板,即

values.yaml

server: 1.2.3.4           # Target kubernetes server for all applications

vault:
  name: vault-dev
  repoURL: https://git.acme.com/myapp/vault-helm.git
  targetRevision: master
  path: helm/vault-chart
  namespace: vault
  hostname: 5.6.7.8       # target server for Vault
  ...

templates/vault-application.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: {{ .Values.vault.name }}
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  destination:
    namespace: 'vault'
    server: {{ .Values.server }}
  project: 'default'
  source:
    path: '{{ .Values.vault.path }}'
    repoURL: {{ .Values.vault.repoURL }}
    targetRevision: {{ .Values.vault.targetRevision }}
    helm:
      # Dynamically generate `values.yaml` 
      values: |
        vault:
          server:
            ingress:
              activeService: true
              hosts:
                - host: {{ required "Please set 'vault.hostname'" .Values.vault.hostname | quote }}
                  paths:
                    - /
            ha:
              enabled: true
              config: |
                ui = true

                ...     

然后这些值将覆盖驻留在 {{ .Values.vault.repoURL }} 指定的 values.yaml 中的任何基本配置,其中可以包含不会因每个环境而改变的配置。