如何在Argo CD中预创建应用所需环境?
用Argo CD的App of Apps模式搞定全流程GitOps上线
核心结论:App of Apps完全能管非Application资源
别纠结,App of Apps模式本质就是用一个父Application统筹所有上线相关资源——不止是子Application CRD,Namespace、Secret、ConfigMap这类K8s原生资源都能直接用它创建。至于集群外的Azure ACR令牌这类任务,也能通过Argo的扩展能力搞定。
具体玩法
1. 预创建Namespace和集群内基础资源
把这些前置资源和子应用放在同一个Git仓库里,用父Application统一同步就行:
- 参考目录结构:
git-repo/ ├── base-setup/ │ ├── my-app-ns.yaml # 手动定义的Namespace │ ├── app-db-secret.yaml # 应用所需的Secret │ └── app-config.yaml # 应用的ConfigMap └── apps/ ├── backend-app.yaml # 后端服务的Application CR └── frontend-app.yaml # 前端服务的Application CR - 父Application配置里,
spec.source.path可以用逗号分隔多个路径(比如base-setup,apps),这样Argo CD会先同步基础资源,再部署依赖这些资源的子应用,刚好符合“不让应用自动创建Namespace”的要求。
2. 搞定集群外资源(比如Azure ACR令牌)
Argo CD本身不直接处理集群外资源,但有两种靠谱方式:
- 用Argo Workflows:在父Application里加入一个Argo Workflow CR,这个Workflow可以调用Azure CLI或Azure REST API创建ACR令牌,甚至能把生成的令牌自动同步到集群内的Secret中,供应用直接使用。
- 自定义Argo CD插件:编写简单的插件脚本,在Argo CD同步资源时触发,完成ACR令牌的创建或更新。插件配置在Argo CD的
configmap里,绑定到对应的Application即可。
踩坑提醒
- 控制资源同步顺序:给子Application添加
dependsOn字段,让它们等基础资源创建完成后再部署,示例:
同时在父Application的同步选项里设置spec: dependsOn: - name: base-setup-app namespace: argocdPrune=false,防止误删基础资源。 - 敏感数据别乱存:Secret这类敏感内容不要直接写在Git仓库中,可通过Argo CD集成HashiCorp Vault这类工具管理,或者通过Workflow动态生成后注入集群。
内容的提问来源于stack exchange,提问作者Zveratko
相关产品推荐
相关产品推荐

