在之前的文章中,我演示了Argo CD如何使基于拉动的GitOps部署变得简单。在本教程中,我将向你展示如何使用Argo CD本身在Argo CD中自动创建多个应用程序。
由于Argo CD的工作是监听 repo,并将它发现的Manifest文件应用到集群中,你也可以用这种方法来配置Argo CD的内部结构。在我之前的例子中,我使用GUI创建了一个有三个副本的Nginx应用程序样本。这一次,我使用与之前相同的方法,但我从GUI中创建一个应用程序,以部署三个独立的应用程序。app-1,app-2, 和app-3 。
配置我们的子应用程序
首先,先为你的三个应用程序创建Manifest文件。在我的example-assets 仓库中,我已经在argocd/my-apps 下创建了三个应用程序。这三个应用程序都是Nginx,有三个副本。请确保在自己的文件夹中创建每个应用程序。
创建一个YAML文件来定义第一个应用程序,并将其保存为my-apps/app-1/app.yml 。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-app-1
labels:
app: nginx-app-1
spec:
replicas: 3
selector:
matchLabels:
app: nginx-app-1
template:
metadata:
labels:
app: nginx-app-1
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
为第二个应用程序创建另一个YAML文件,并保存为my-apps/app-2/app.yml 。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-app-2
labels:
app: nginx-app-2
spec:
replicas: 3
selector:
matchLabels:
app: nginx-app-2
template:
metadata:
labels:
app: nginx-app-2
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
为你的最终应用程序创建第三个文件,并保存为my-apps/app-3/app.yml 。
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-app-3
labels:
app: nginx-app-3
spec:
replicas: 3
selector:
matchLabels:
app: nginx-app-3
template:
metadata:
labels:
app: nginx-app-3
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
现在你的Manifest文件已经准备好了,你必须创建指向这些Manifest的Argo CD应用程序。
Argo CD可以通过三种不同的方式进行配置:使用GUI、使用CLI或使用Kubernetes Manifest文件。在这篇文章中,我使用第三种方法。
在一个新文件夹中创建以下Manifest文件argocd/argo-apps 。这是argocd-apps/app-1.yml 。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app-1
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: argocd
server: https://kubernetes.default.svc
project: default
source:
path: argocd/my-apps/app-1
repoURL: https://gitlab.com/ayush-sharma/example-assets.git
targetRevision: HEAD
这是argocd-apps/app-2.yml 。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app-2
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: argocd
server: https://kubernetes.default.svc
project: default
source:
path: argocd/my-apps/app-2
repoURL: https://gitlab.com/ayush-sharma/example-assets.git
targetRevision: HEAD
而这是argocd-apps/app-3.yml 。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app-3
namespace: argocd
finalizers:
- resources-finalizer.argocd.argoproj.io
spec:
destination:
namespace: argocd
server: https://kubernetes.default.svc
project: default
source:
path: argocd/my-apps/app-3
repoURL: https://gitlab.com/ayush-sharma/example-assets.git
targetRevision: HEAD
如你所见,你正在argocd 命名空间中创建一个名为Application 的Kubernetes对象。这个对象包含了源 Git 仓库和目标服务器的详细信息。你的应用程序正指向你之前创建的Nginx清单文件。
配置我们的主应用程序
现在你需要告诉Argo CD如何找到你的三个Nginx应用程序。通过创建另一个应用程序来做到这一点。这种模式被称为App of Apps 模式,其中一个应用程序包含部署多个子应用程序的指令。
在GUI中创建一个新的应用程序,名为my-apps ,配置如下。
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-apps
spec:
destination:
namespace: default
server: 'https://kubernetes.default.svc'
source:
path: argocd/argocd-apps
repoURL: 'https://gitlab.com/ayush-sharma/example-assets.git'
targetRevision: HEAD
project: default
syncPolicy:
automated:
prune: true
selfHeal: true
一旦它被创建,my-apps 开始在GUI中进行同步。
图1:用ArgoCD自动化!- 主应用程序。
同步完成后,你的三个Nginx应用程序也出现在GUI中。

图2:用ArgoCD!自动生成ArgoCD!仪表盘。- 仪表板。
由于你没有启用AutoSync ,所以手动同步app-1 、app-2 、app-3 。一旦同步,你的Nginx副本就会被部署到所有三个应用程序。

图3:用ArgoCD!自动部署ArgoCD。- 部署。
总结
掌握App of Apps 模式对于充分利用Argo CD的全部功能至关重要。这种方法允许你干净地管理应用程序组。例如,部署Prometheus、Grafana、Loki和其他重要服务可以由DevOps应用程序管理,而部署前端代码则可以由前端应用程序管理。为每个人配置不同的同步选项和 repo 位置,可以精确控制不同的应用程序组。