使用onectl自动化迁移应用至ACK One GitOps

应用中心已不再进行功能升级并逐步停止维护,您可以通过onectl自动化迁移,将应用中心的应用快速迁移至ACK One GitOps。本文介绍如何使用onectl自动化迁移应用中心应用至ACK One GitOps。

迁移原理

image
  • onectl依赖应用中心主控集群和ACK One Fleet实例两者的KubeConfig,将应用中心主控集群中,与ArgoCD对应的资源Cluster(Secret)、Repo(Secret)和Application都迁移到ACK One Fleet实例中。其中Cluster的迁移是通过ACK One的关联集群功能来实现。

  • Template type Application是个特例,onectl会将其模板内容(资源YAML)记录在本地目录,以便您可以将其上传至自己的Git仓库,并经由GitOps快速入门发布应用到ACK One中。

  • 在onectl迁移完应用之后,删除应用中心主控集群中的Application以断开其与应用的联系,而与ACK One Fleet实例中的Application进行关联。

前提条件

步骤一:配置onectl RAM用户

RAM用户登录后才能将应用中心的应用迁移到ACK One GitOps,onectl会使用该用户的AK、SK操作阿里云的云资源。该RAM用户需要拥有AliyunAdcpFullAccess权限和ACK Template自定义相关权限。

  1. 为RAM用户授予AliyunAdcpFullAccess权限,具体操作,请参见为RAM用户授权

  2. 为RAM用户授予ACK Template自定义权限策略。具体策略内容如下。

    {
        "Action": [
            "cs:DescribeTemplates",
            "cs:DescribeTemplateAttribute"
        ],
        "Resource": [
            "*"
        ],
        "Effect": "Allow"
    }
  3. 执行以下命令,配置onectl RAM用户的AK、SK信息。

    此处仅配置Access Key IdAccess Key Secret

    onectl configure

    预期输出:

    Configuring profile default ...
    Access Key Id [*********************NaY]: 
    Access Key Secret [***************************HUd]: 
    Ram Username []: 
    Default Kubeconfig Path (default is ~/.kube/config) []: 
    Saving profile[default] ...
    Done.

步骤二:配置所需环境变量

为了简化迁移命令,ACK One Fleet实例的ID和应用中心主控集群的ID被设置为环境变量,onectl会根据ClusterID自动获取两者的KubeConfig,保存在~/.onectl/目录下。

export ACKONE_HUB_CLUSTER_ID=ccc47ca148d0147519f229bba********
export ARGOCD_CLUSTER_ID=ce4bb2004bb0e409eaa4c593d********

步骤三:迁移集群

执行以下命令,将集群从应用中心主控集群迁移至ACK One GitOps。

onectl migrate clusters -n appcenter

步骤四:迁移Git仓库

执行以下命令,将仓库从应用中心主控集群迁移至ACK One GitOps。

onectl migrate repos -n appcenter

(可选)步骤五:查看迁移状态

执行以下命令,查看资源状态。

#onectl migrate status [clusters|repos|apps] -nappcenter

# 查看所有资源状态。
onectl migrate status -nappcenter

# 查看单类资源状态。
onectl migrate status clusters -nappcenter
onectl migrate status repos -nappcenter
onectl migrate status apps -nappcenter

预期输出:

#################### Clusters Status ####################
All 1 clusters were attached successfully to ACK One ccc47ca148d0147519f229bbaea2963b6 !
CLUSTER                            STATE    MESSAGE
ce4bb2004bb0e409eaa4c593da9e2bc96  Succeed  

#################### Repositories Status ####################
All 1 repos were migrated successfully to ACK One ccc47ca148d0147519f229bbaea2963b6 !
STATE    REPO                                     TYPE  NAME              MESSAGE
Succeed  git@github.com:ivan-cai/gitops-demo.git  git   ivan-gitops-demo  

#################### Applications Status ####################
-------------------- Git/Helm Applications --------------------
Total 'Git/Helm' type applications: 1, success to migrate: 0, pending to migrate: 1
STATE    NAME       NAMESPACE  CLUSTER  STATUS  HEALTH  REPO  PATH  TARGET  MESSAGE
Pending  app-git-2  appcenter                                               application has not been migrated to ACK One ccc47ca148d0147519f229bbaea2963b6

-------------------- Template Applications --------------------
STATE    NAME            NAMESPACE  TEMPLATEID                            TEMPLATEPATH  MESSAGE
Pending  busybox-e2bc96  appcenter  3aa43610-cc02-463a-a600-629b2a97e887                application has not been migrated to ACK One ccc47ca148d0147519f229bbaea2963b6

步骤六:迁移应用

onectl支持同时迁移一个或多个应用,也支持同时迁移所有应用,建议逐个迁移。

  • 执行以下命令迁移一个或多个应用。

    onectl migrate apps ${app1Name} -n appcenter

    预期输出:

    Applications in source cluster (ArgoCD or AppCenter cluster):
    NAME       NAMESPACE  TYPE      TEMPLATEID
    app-git-2  appcenter  Git/Helm  
    will be migrated to ACK One ccc47ca148d0147519f*********b6. Please checking the source cluster and ACK One cluster. Are you sure to migrate the Applications? [Y/n] y
    
    Total 1 applications will be migrated to ACK One ccc47ca148d0147519f*********b6 ...
    -------------------- Git/Helm Applications --------------------
    Application appcenter/app-git-2 was migrated succeessfully.
    All 1 'Git/Helm' type applications has been migrated successfully o ACK One ccc47ca148d0147519f229bbaea2963b6.
    STATE    NAME       NAMESPACE  CLUSTER                     STATUS  HEALTH   REPO                                     PATH                        TARGET  MESSAGE
    Succeed  app-git-2  argocd     https://172.16.**.**:6443  Synced  Healthy  git@github.com:**/gitops-demo.git  manifests/helm/echo-server  main    
    
    -------------------- Template Applications --------------------
    No 'Template' type applications need to be migrated.
  • 执行以下命令迁移所有应用。

    onectl migrate apps -n appcenter --all

    预期输出:

    Applications in source cluster (ArgoCD or AppCenter cluster):
    NAME            NAMESPACE  TYPE      TEMPLATEID
    app-git-2       appcenter  Git/Helm  
    busybox-e2bc96  appcenter  Template  3aa43610-cc02-463a-a600-629b2a97e887
    will be migrated to ACK One ccc47ca148d0147519f*********b6. Please checking the source cluster and ACK One cluster. Are you sure to migrate the Applications? [Y/n] y
    
    Total 2 applications will be migrated to ACK One ccc47ca148d0147519f*********b6 ...
    -------------------- Git/Helm Applications --------------------
    Application appcenter/app-git-2 was migrated succeessfully.
    All 1 'Git/Helm' type applications has been migrated successfully o ACK One ccc47ca148d0147519f229bbaea2963b6.
    STATE    NAME       NAMESPACE  CLUSTER                     STATUS  HEALTH   REPO                                     PATH                        TARGET  MESSAGE
    Succeed  app-git-2  argocd     https://172.16.**.**:6443  Synced  Healthy  git@github.com:**/gitops-demo.git  manifests/helm/echo-server  main    
    
    -------------------- Template Applications --------------------
    Total 1 'Template' type applications need to be migrated, the k8s resources' templates have been saved in '/tmp/appcentertemplates/', please pushing them to your Git repository, and then using ACK One GitOps to publish applications!
    NAME            NAMESPACE  TEMPLATEID                            TEMPLATENAME  TEMPLATEPATH                                           MESSAGE
    busybox-e2bc96  appcenter  3aa43610-cc02-463a-a600-629b2a97e887  busybox       /tmp/appcentertemplates/appcenter-busybox-e2bc96.yaml  

步骤七:移除应用中心的应用

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

重要
  • 确保应用在ACK One GitOps中运行正常后,再移除应用中心的应用。

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

kubectl --kubeconfig ${ARGOCD_CLUSTER_KUBECONFIG} delete app ${appName}  -n appcenter --cascade=false

步骤八:卸载应用中心组件

将应用中心主控集群中所有应用都迁移至ACK One GitOps,并确保应用运行状态正常后,且不再需要appcenter组件时,您可以通过组件管理页面卸载appcenter组件。

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

  2. 集群列表页面,单击目标集群名称,然后在左侧导航栏,选择运维管理 > 组件管理

  3. 在组件管理页面,单击应用管理页签找到appcenter组件,单击右下角的卸载。

相关文档

您可以登录ACK One GitOps查看应用的运行状态,并通过ACK One GitOps管理应用。具体操作,请参见ACK One GitOps最佳实践