迁移Git仓库配置和GitOps应用

本文介绍如何将应用中心使用Git仓库作为部署源创建的应用迁移至ACK One GitOps。

索引

前提条件

步骤一:通过ArgoCD CLI访问应用中心主控集群

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

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

    argocd app list

    预期输出:

    NAME                   CLUSTER             NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO                                              PATH  TARGET
    gitops-demo  https://192.168.0.244:6443      default  Synced  Healthy  <none>      <none>      git@github.com:haoshuwei/gitops-demo-private.git  helm  main

    预期输出表明,获取到的需要迁移的应用名称为gitops-demo,使用的Repo为git@github.com:haoshuwei/gitops-demo-private.git,应用部署在目标集群https://192.168.0.244:6443中。

步骤二:导出应用Manifest

在应用中心主控集群中执行以下命令,导出应用Application CR Manifests。

kubectl -n appcenter get application gitops-demo -oyaml > gitops-demo.yaml

步骤三:查看ACK One GitOps集群列表

在ACK One主控实例中执行以下命令,查看关联集群信息。

argocd cluster list

预期输出:

SERVER                          NAME                     VERSION  STATUS      MESSAGE                                                  PROJECT
https://<apiserver>:6443        <clusterid>-ack-cluster  1.24+    Successful
https://kubernetes.default.svc  in-cluster                        Unknown     Cluster has no applications and is not being monitored.

预期输出中,https://kubernetes.default.svc集群为主控实例自身的API Server,其他的Server地址为ACK One主控实例已关联的集群的API Server。为了更高的安全性,ACK One主控实例优先使用集群的内网地址关联集群,应用中心使用公网地址,因此同一个集群在ACK One主控实例和应用中心的API Server地址可能不同。

步骤四:导入应用Manifest至ACK One主控实例

  1. 修改步骤二:导出应用Manifest中导出的gitops-demo.yaml文件。

    1. 确定应用下发的目标集群,确认gitops-demo.yaml中的目标集群{.spec.destination.server} 的Server地址与步骤三查看ACK One主控实例中列出的目标集群的Server地址是否一致。若不一致,则执行以下Shell命令进行修改。

      sed -i "s/192.168.0.244/<请替换为ACK One实例中集群server ip地址>/g" gitops-demo.yaml
    2. 执行以下Shell命令,修改gitops-demo.yaml中的Namespace为argocd。

      sed -i "s/namespace: appcenter/namespace: argocd/g" gitops-demo.yaml
  2. 导入Application Manifests至ACK One主控实例。

    1. 在ACK One主控实例中执行以下命令,导入gitops-demo.yaml。

      kubectl apply -f gitops-demo.yaml
    2. 在ACK One主控实例中执行以下命令,查看Application列表,并确认此处应用的状态与应用中心的状态一致。

      argocd app list

      预期输出:

      NAME         CLUSTER                   NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO                                              PATH  TARGET
      gitops-demo  https://<apiserver>:6443  gitops     default  Synced  Healthy  <none>      <none>      git@github.com:haoshuwei/gitops-demo-private.git  helm  main

步骤五:从应用中心移除应用

在应用中心主控集群中执行以下命令,移除应用中心的应用。

重要

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

argocd app delete gitops-demo --cascade=false