ApplicationSet 批量应用管理
ApplicationSet 根据生成器模板创建 Application,适合多个环境或集群具有相同交付模式的场景。它能降低重复 YAML,但一次模板错误也可能影响大量应用,因此必须将生成范围、变更审核和删除策略视为生产风险。

1. List Generator:显式环境列表
List Generator 最直观,适合环境数量有限且需要明确审核每个目标的团队。
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
name: user-center-environments
namespace: argocd
spec:
generators:
- list:
elements:
- env: dev
namespace: user-center-dev
- env: prod
namespace: user-center-prod
template:
metadata:
name: 'user-center-{{env}}'
spec:
project: production
source:
repoURL: https://git.example.com/platform/app-config.git
targetRevision: main
path: 'apps/user-center/overlays/{{env}}'
destination:
server: https://kubernetes.default.svc
namespace: '{{namespace}}'
生产环境应单独 Project 或至少单独审批规则,避免开发环境参数通过模板意外传播到生产。
2. Git 与 Cluster Generator
- Git Generator:按仓库目录自动生成应用,适合服务目录规范稳定的平台。
- Cluster Generator:按已注册集群的标签生成应用,适合统一部署基础组件。
- Matrix Generator:组合目录与集群,适合“多个服务 x 多个集群”,但影响范围最大。
给集群添加标签前,先在测试集群验证 selector。一个宽泛的 Cluster Generator 可能把生产级资源同步到所有被注册集群。
3. 预览与删除保护
# 查看 ApplicationSet 生成的 Application 与目标集群
kubectl get applications -n argocd \
-l app.kubernetes.io/instance=user-center-environments
# 查看单个生成应用的源、目标与同步状态
argocd app get user-center-prod
启用自动化删除前,先确认从 Generator 输入中移除元素是否会删除对应 Application 及其受管资源。生产删除应通过 PR、审批和备份验证执行;不要让目录临时重命名触发批量 Prune。
4. 生产约束
- 模板、生成器输入和 Project 都进入 Git 审核;
- 生成器必须有明确路径、标签或列表,禁止宽泛通配;
- 生产与非生产分离 ApplicationSet 或至少分离审批流水线;
- 每次变更前统计预计新增、修改、删除的 Application 数量;
- 发布后等待每个目标应用
Synced + Healthy,不要只检查 ApplicationSet 自身存在。