使用ApplicationSet创建多个应用

ApplicationSet用于简化多集群应用编排,它可以基于单一应用编排并根据用户的编排内容自动生成一个或多个Application。本文介绍如何使用ApplicationSet创建多个应用。

前提条件

  • 已登录GitOps系统。具体操作,请参见登录GitOps系统

  • 已安装kubectl命令行工具并获取ACK One Fleet实例的KubeConfig,默认路径为~/.kube/config

示例说明

将echo-server应用部署至Production和Staging集群,echo-server的Git仓库中manifests目录结构如下所示:

.
├── Dockerfile
├── go.mod
├── go.sum
├── main.go
└── manifests
    └── directory
        ├── production
        │ ├── deployment.yaml
        │ └── service.yaml
        └── staging
            ├── deployment.yaml
            └── service.yaml

由于Production和Staging集群中部署的echo-server应用版本以及服务暴露方式不同,所以需要创建productionstaging两个子目录来保存不同的应用编排。

操作步骤

  1. 使用以下内容,创建applicationset.yaml

    该ApplicationSet编排将创建2个应用,分别是production-echo-serverstaging-echo-server,其中production-echo-server应用将部署manifests/directory/production子目录下的manifests,staging-echo-server将部署manifests/directory/staging目录下的manifests。

    apiVersion: argoproj.io/v1alpha1
    kind: ApplicationSet
    metadata:
      name: echo-server
    spec:
      generators:
      - list:
          elements:
          - cluster: production
            url: https://47.91.XX.XX:6443
          - cluster: staging
            url: https://47.111.XX.XX:6443
      template:
        metadata:
          name: '{{cluster}}-echo-server'
        spec:
          project: default
          source:
            repoURL: https://code.aliyun.com/shuwei.hsw/echo-server.git
            targetRevision: main
            path: manifests/directory/{{cluster}}
          destination:
            server: '{{url}}'
            namespace: multi-echo-server
  2. 执行以下命令,部署ApplicationSet。

    kubectl -n argocd apply -f applicationset.yaml
  3. 执行以下命令,查看已创建的应用列表。

    kubectl -n argocd get application

    预期输出:

    NAME                     SYNC STATUS   HEALTH STATUS
    production-echo-server   OutOfSync     Missing
    staging-echo-server      OutOfSync     Missing
  4. 执行以下命令,同步部署应用到目标集群。

    argocd app sync production-echo-server staging-echo-server
  5. 验证集群中的echo-server服务是否正常。

    • 执行以下命令,验证Production集群中的echo-server服务是否正常。

      curl XX.XX.XX.XX:8080/version     #替换XX.XX.XX.XX为echo-server服务的IP地址。

      预期输出:

      "Hello Echo Server v1.0"
    • 执行以下命令,验证Staging集群中的echo-sercer服务是否正常。

      curl XX.XX.XX.XX:8080/version     #替换XX.XX.XX.XX为echo-server服务的IP地址。

      预期输出:

      "Hello Echo Server v2.0"

相关文档

更多关于ApplicationSet的使用,请参见ApplicationSet