在之前的文章中,我演示了 Argo CD 如何简化基于拉取的 GitOps 部署。在本教程中,我将向您展示如何使用 Argo CD 本身在 Argo CD 中自动创建多个应用程序。
由于 Argo CD 的工作是监听仓库并将找到的 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
为您的第二个应用程序创建另一个文件,并将其保存为 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 文件。在本文中,我使用第三种方法。
在名为 argocd/argo-apps
的新文件夹中创建以下 Manifest 文件。这是 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 manifest 文件。
配置主应用程序
现在您需要某种方法来告诉 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 自动化 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 应用程序管理,而部署前端代码可以由前端应用程序管理。为每个应用程序配置不同的同步选项和仓库位置,使您可以精确控制不同的应用程序组。
评论已关闭。