ArgoCD 不同命名空间中同一应用程序的不同版本

问题描述 投票:0回答:1

我有一个带有代表单个应用程序的 Helm 图表的 git 存储库,我想使用 ArgoCD 自动使该存储库与我们的 Kubernetes 集群保持同步。

我是 ArgoCD 的新手,我试图找到一种方法将同一应用程序的不同版本安装在不同的命名空间上。这一要求背后的原因是要有一个版本为 x.x.x-SNAPSHOT 的开发命名空间、一个与另一个版本的集成命名空间,以及可能还有一个与其他版本的质量和生产命名空间。

我在ArgoCD上发现了这个问题:https://github.com/argoproj/argo-cd/issues/9508,但这与命名空间更改的情况并不相同,但与应用程序的版本不同。

我已经写了这个清单文件:

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: my-appset
spec:
  generators:
    - list:
        elements:
          - namespace: development
          - namespace: integration
          - namespace: quality
          - namespace: production
  template:
    metadata:
      name: my-app
    spec:
      project: default
      syncPolicy:
        automated:
          selfHeal: true
      source:
        repoURL: 'my-repo-url'
        targetRevision: HEAD
        path: 'my-app-{{.namespace}}'
        helm:
          valueFiles:
            - 'values-{{.namespace}}.yaml'
      destination:
        server: 'kubernetes-url'
        namespace: 'my-app-{{.namespace}}'

我有以下文件夹结构:

root/
├─ argocd/
│  ├─ appset.yaml
├─ my-app-development/
│  ├─ values-development.yaml
├─ my-app-integration/
│  ├─ values-integration.yaml
├─ my-app-quality/
│  ├─ values-quality.yaml
├─ my-app-production/
   ├─ values-production.yaml

本质上,该应用程序被重复 4 次,并且每个版本另外还有一个特定的值文件。所有这些重复似乎都是不必要的,但我不确定是否还有其他方法。

在这种情况下,ArgoCD 的最佳实践有何建议?

kubernetes kubernetes-helm argocd gitops
1个回答
0
投票

问题是如何去除重复键。

您可以将值的公共键合并到唯一的 helm-values 文件中,并在 Argo 清单的“valueFiles”键中指定该文件。 如果你想保留结构,你必须清空“路径”键。 我在下面举了一个例子。

  source:
    repoURL: 'my-repo-url'
    targetRevision: HEAD
    path: ''
    helm:
      valueFiles:
        - 'values.yaml'
        - 'my-app-{{.namespace}}/values-{{.namespace}}.yaml'

您的目录如下所示:

root/
├─ argocd/
│  ├─ appset.yaml
├─ values.yaml
├─ my-app-development/
│  ├─ values-development.yaml
├─ my-app-integration/
│  ├─ values-integration.yaml
├─ my-app-quality/
│  ├─ values-quality.yaml
├─ my-app-production/
   ├─ values-production.yaml

此外,您可以删除目录并将单个应用程序的所有值文件保留在一起:

  ...
  source:
    repoURL: 'my-repo-url'
    targetRevision: HEAD
    path: 'my-app'
    helm:
      valueFiles:
        - 'values.yaml'
        - 'values-{{.namespace}}.yaml'
    ...

最后你的目录看起来像这样:

root/
├─ argocd/
│  ├─ appset.yaml
├─ my-app/
|  ├─ values.yaml
│  ├─ values-development.yaml
│  ├─ values-integration.yaml
│  ├─ values-quality.yaml
   ├─ values-production.yaml
© www.soinside.com 2019 - 2024. All rights reserved.