You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArgoCD单仓库场景:如何判断当前所处的集群/ArgoCD Server?

解决方案:在独立ArgoCD实例中配置全局环境标识并在ApplicationSet中调用

针对你的场景(每个集群对应独立ArgoCD实例,单仓库多环境配置),以下是两种直接可行的实现方案:

方案一:给ApplicationSet Controller注入环境变量

每个ArgoCD实例的ApplicationSet Controller可通过环境变量携带当前环境标识,在ApplicationSet模板中直接引用:

  1. 修改ApplicationSet Controller的Deployment
    编辑argocd-applicationset-controller的Deployment,添加对应环境的环境变量(每个实例替换为stage1/stage2等对应值):
apiVersion: apps/v1
kind: Deployment
metadata:
  name: argocd-applicationset-controller
  namespace: argocd
spec:
  template:
    spec:
      containers:
      - name: argocd-applicationset-controller
        env:
        - name: ARGOCD_ENV_STAGE
          value: "stage1"
  1. 在ApplicationSet中引用环境变量
    通过Git Generator遍历配置仓库中的应用模板,同时用环境变量指定对应环境的values文件:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: bootstrap-apps
spec:
  generators:
  - git:
      repoURL: https://your-config-repo.git
      revision: main
      files:
      - path: "tools/*/app.yaml"
      values:
        env_stage: "{{ env \"ARGOCD_ENV_STAGE\" }}"
  template:
    metadata:
      name: '{{ .path.basename }}'
    spec:
      project: default
      source:
        repoURL: https://your-config-repo.git
        targetRevision: main
        path: '{{ .path.dirname }}'
        helm:
          valueFiles:
          - '{{ .values.env_stage }}_values.yaml'
      destination:
        server: https://kubernetes.default.svc
        namespace: '{{ .path.basename }}'

方案二:通过ArgoCD ConfigMap存储环境标识

利用ArgoCD自带的argocd-cm ConfigMap存储环境信息,在ApplicationSet中通过模板函数读取:

  1. 修改argocd-cm ConfigMap
    在每个ArgoCD实例的argocd命名空间下,给argocd-cm添加自定义环境字段:
apiVersion: v1
kind: ConfigMap
metadata:
  name: argocd-cm
  namespace: argocd
data:
  environment: "stage1"
  1. 在ApplicationSet中读取ConfigMap的值
    使用ArgoCD支持的lookup模板函数,直接从ConfigMap中获取环境标识并引用:
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: bootstrap-apps
spec:
  generators:
  - git:
      repoURL: https://your-config-repo.git
      revision: main
      files:
      - path: "tools/*/app.yaml"
  template:
    metadata:
      name: '{{ .path.basename }}'
    spec:
      project: default
      source:
        repoURL: https://your-config-repo.git
        targetRevision: main
        path: '{{ .path.dirname }}'
        helm:
          valueFiles:
          - '{{ (lookup "v1" "ConfigMap" "argocd" "argocd-cm").data.environment }}_values.yaml'
      destination:
        server: https://kubernetes.default.svc
        namespace: '{{ .path.basename }}'

注意事项

  • 方案一中,修改Deployment后需重启ApplicationSet Controller Pod,确保环境变量生效。
  • 方案二中,lookup函数依赖ApplicationSet Controller具备读取argocd命名空间下ConfigMap的权限,默认ArgoCD的ServiceAccount已包含该权限。
  • 两种方案均可实现"每个独立ArgoCD实例自动匹配对应环境配置"的需求,可根据部署流程偏好选择。

内容的提问来源于stack exchange,提问作者Yanik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:33:10