迁移通过编排模板创建的应用

ACK One GitOps基于开源社区ArgoCD构建,不支持通过编排模板创建应用。为了迁移通过编排模板创建的应用,您需要首先将编排模板提交到Git仓库中,之后创建GitOps应用,然后从Git仓库中获取编排模板,将GitOps应用下发到关联集群中。后续应用变更时,您可以在Git仓库中更新编排模板,GitOps应用将通过自动或者手动的方式更新下发到关联集群中。本文通过示例介绍如何将通过编排模板创建的应用迁移至ACK One GitOps。

索引

前提条件

步骤一:从应用中心获取待迁移应用的信息

  1. 登录容器服务管理控制台,在左侧导航栏选择多集群 > 应用中心

  2. 应用中心页面,获取待迁移应用的信息。

    1. 主控集群下拉列表中,选择应用所在的主控集群。

    2. 找到待迁移的应用,单击左侧箭头,展开应用详情。

    3. 获取应用的目标集群的名称,在目标集群右侧,单击查看YAML,获取集群的编排模板。

      此处需要获取所有目标集群的编排模板。

      编排模板1.png

步骤二:在ACK One主控实例中添加关联集群

步骤一中获取到的所有目标集群,依次添加到ACK One主控实例中。具体操作,请参见添加关联集群

步骤三:将编排模板添加到Git仓库中

建议您创建新的Git仓库用于存储编排模板,也支持自行选择已有的Git仓库。

  1. 在Git仓库中创建文件目录,用于存储应用application1的编排模板。

  2. 在目录application1中为每个目标集群建立子目录。

  3. 在目标集群对应的子目录中,创建对应的YAML文件,存储从步骤一中获取的编排模板。目录与文件结构示例如下。

    .
    └── applicatioin1
        ├── cluster-hk
        │   └── template.yaml
        └── cluster-hk-1
            └── template.yaml
  4. 将Git仓库添加到ACK One GitOps中。具体操作,请参见添加Git源仓库

步骤四:迁移应用

  1. 通过ArgoCD CLI访问应用中心主控集群。

    1. 在应用中心主控集群中执行以下命令,导入环境变量。

      export ARGOCD_OPTS='--port-forward-namespace appcenter --plaintext'
    2. 在应用中心主控集群中执行以下命令,查看应用列表。

      argocd app list | grep application1

      预期输出:

      NAME                 CLUSTER                     NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO        PATH  TARGET
      application1-451a02  https://8.217.XX.XX:6443   default    default  Synced  Healthy  <none>      <none>      aliyun.com        HEAD
      application1-46b9bb  https://172.17.XX.XX:6443  default    default  Synced  Healthy  <none>      <none>      aliyun.com        HEAD

      预期输出表明,应用application1对应了2个ArgoCD Application,每个ArgoCD Application对应一个目标集群,同时获取每个目标集群的API Server地址。

  2. 在ACK One主控实例中执行以下命令,获取ACK One主控实例中关联集群的API Server地址。

    argocd cluster list

    预期输出:

    SERVER                          NAME                                          VERSION  STATUS      MESSAGE                                                  PROJECT
    https://172.17.XX.XX:6443       c03a223407a044cc7b0a9cc1c0a45****-cluster-hk  1.24+    Successful
    https://172.17.XX.XX:6443       c3f218b3af71b44c189485abd4846****-cluster-hk-1           Unknown     Cluster has no applications and is not being monitored.
    https://kubernetes.default.svc  in-cluster                                              Unknown     Cluster has no applications and is not being monitored.
  3. 在ACK One主控实例中执行以下命令,导出其中一个名为application1-451a02的ArgoCD Application的Manifests,应用的目标集群为cluster-hk

    kubectl -n appcenter get application application1-451a02 -oyaml > application1-cluster-hk.yaml
  4. 修改上一步导出的application1-cluster-hk.yaml文件。

    1. 由于application1-451a02的目标集群为cluster-hk,对应的Server地址为https://8.217.XX.XX:6443,而与ACK One主控实例中对应的cluster-hk关联集群的Server地址为https://172.17.XX.XX:6443,两者不一致,所以需要执行以下命令,将其修改为主控实例的Server地址。

      sed -i "s/8.217.XX.XX/172.17.XX.XX/g" application1-cluster-hk.yaml
    2. 执行以下Shell命令,修改application1-cluster-hk.yaml中的Namespace为argocd。

      sed -i "s/namespace: appcenter/namespace: argocd/g" application1-cluster-hk.yaml
    3. 执行以下Shell命令,修改application1-cluster-hk.yaml中的应用名称为application1-cluster-hk。

      sed -i "s/name: application1-451a02/name: application1-cluster-hk/g" application1-cluster-hk.yaml
    4. 修改application1-cluster-hk.yaml中的spec.source字段,将应用源修改为步骤三使用的Git仓库。

      修改前YAML示例如下:

      apiVersion: argoproj.io/v1alpha1
      kind: Application
      metadata:
        name: application1-cluster-hk
        namespace: appcenter
      spec:
        destination:
          namespace: default
          server: https://172.17.XX.XX:6443
        project: default
        # 当前配置是ACK编排模版,需要修改为Git仓库配置。
        source:
          repoURL: aliyun.com
          targetRevision: HEAD
          template:
            aliUID: "14****01"
            id: 3e****af

      修改后YAML示例如下:

      apiVersion: argoproj.io/v1alpha1
      kind: Application
      metadata:
        name: application1-cluster-hk
        namespace: appcenter
      spec:
        destination:
          namespace: default
          server: https://172.17.XX.XX:6443
        project: default
        # 修改后,此处配置为Git仓库。
        source:
          # Git仓库中的目录。
          path: application1/cluster-hk
          # Git仓库地址,可通过argocd repo list查看。
          repoURL: https://github.com/AliyunContainerService/gitops-demo
          # Git仓库的分支名称。
          targetRevision: one-demo
    5. 删除application1-cluster-hk.yaml中status的所有内容。

  5. 导入Application Manifests至ACK One主控实例。

    1. 在ACK One主控实例中执行以下命令,导入application1-cluster-hk.yaml文件。

      kubectl apply -f application1-cluster-hk.yaml
    2. 在ACK One主控实例中执行以下命令,查看Application列表并确认应用状态。

      argocd app list

      预期输出:

      NAME                     CLUSTER                     NAMESPACE        PROJECT  STATUS     HEALTH   SYNCPOLICY  CONDITIONS                REPO                                                       PATH                     TARGET
      application1-cluster-hk  https://172.17.XX.XX:6443  default          default  OutOfSync  Healthy  <none>      SharedResourceWarning(2)  https://github.com/AliyunContainerService/gitops-demo      application1/cluster-hk  one-demo
  6. 在应用中心主控集群中执行以下命令,移除应用中心的应用。

    重要

    以下命令行中,必须使用参数--cascade=false,否则在移除应用时,实际运行在目标集群中的K8s资源会随之被移除。

    argocd app delete application1-451a02 --cascade=false
  7. 在ACK One主控实例中执行以下命令,同步应用并查看确认应用状态为Synced

    argocd app sync application1-cluster-hk

    预期输出:

    argocd app list
    NAME                     CLUSTER                     NAMESPACE        PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO                                                       PATH                     TARGET
    application1-cluster-hk  https://172.17.XX.XX:6443  default          default  Synced  Healthy  <none>      <none>      https://github.com/AliyunContainerService/gitops-demo      application1/cluster-hk  one-demo
  8. 重复执行步骤3步骤7,完成其他应用的迁移。