ArgoCD单仓库场景:如何判断当前所处的集群/ArgoCD Server?
解决方案:在独立ArgoCD实例中配置全局环境标识并在ApplicationSet中调用
针对你的场景(每个集群对应独立ArgoCD实例,单仓库多环境配置),以下是两种直接可行的实现方案:
方案一:给ApplicationSet Controller注入环境变量
每个ArgoCD实例的ApplicationSet Controller可通过环境变量携带当前环境标识,在ApplicationSet模板中直接引用:
- 修改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"
- 在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中通过模板函数读取:
- 修改argocd-cm ConfigMap
在每个ArgoCD实例的argocd命名空间下,给argocd-cm添加自定义环境字段:
apiVersion: v1 kind: ConfigMap metadata: name: argocd-cm namespace: argocd data: environment: "stage1"
- 在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
相关产品推荐
相关产品推荐

