在 Argo CD 中自动创建多个应用程序

在本教程中,我将向您展示如何使用 Argo CD 在 Argo CD 中自动创建多个应用程序。
43 位读者喜欢这篇文章。
gears and lightbulb to represent innovation

Opensource.com

在之前的文章中,我演示了 Argo CD 如何简化基于拉取的 GitOps 部署。在本教程中,我将向您展示如何使用 Argo CD 本身在 Argo CD 中自动创建多个应用程序。

由于 Argo CD 的工作是监听仓库并将找到的 Manifest 文件应用到集群,您也可以使用这种方法来配置 Argo CD 内部组件。在我之前的示例中,我使用了 GUI 创建了一个包含三个副本的示例 Nginx 应用程序。这一次,我使用与之前相同的方法,但从 GUI 创建一个应用程序来部署三个独立的应用程序:app-1app-2app-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 中同步

Automating ArgoCD with ArgoCD! - Main app.

图 1:使用 ArgoCD 自动化 ArgoCD!- 主应用程序。

同步完成后,您的三个 Nginx 应用程序也会显示在 GUI 中

Automating ArgoCD with ArgoCD! - Dashboard.

图 2:使用 ArgoCD 自动化 ArgoCD!- 仪表板。

由于您没有启用 AutoSync,请手动同步 app-1app-2app-3。同步后,您的 Nginx 副本将部署到所有三个应用程序。

Automating ArgoCD with ArgoCD! - Deployment.

图 3:使用 ArgoCD 自动化 ArgoCD!- 部署。

结论

掌握 App of Apps 模式对于充分利用 Argo CD 的强大功能至关重要。此方法允许您清晰地管理应用程序组。例如,部署 Prometheus、Grafana、Loki 和其他重要服务可以由 DevOps 应用程序管理,而部署前端代码可以由前端应用程序管理。为每个应用程序配置不同的同步选项和仓库位置,使您可以精确控制不同的应用程序组。

接下来阅读什么

Argo CD 入门

Argo CD 是一款简单的基于拉取的 GitOps 部署工具,可将 Kubernetes manifest 文件与集群同步,实现简单、直接的部署。

标签
https://ayushsharma.in
我是一名作家和 AWS 解决方案架构师。我与初创公司和企业合作,从事软件工程、DevOps、SRE 和云架构方面的工作。我在 https://ayushsharma.in 上撰写有关我的经验的文章。

评论已关闭。

© . All rights reserved.