应用中心已不再进行功能升级并逐步停止维护,您可以通过onectl自动化迁移,将应用中心的应用快速迁移至ACK One GitOps。本文介绍如何使用onectl自动化迁移应用中心应用至ACK One GitOps。
迁移原理
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进行关联。
前提条件
已开通分布式云容器平台ACK One,并开启多集群管理功能。具体操作,请参见开启舰队管理功能。
已从ACK One控制台获取Fleet实例的KubeConfig,并通过kubectl连接至Fleet实例。
已在主控实例中开启GitOps功能,并通过ArgoCD CLI登录系统。具体操作,请参见在ACK One主控实例中开启GitOps。
已从容器服务管理控制台的应用中心页面获取待迁移的应用中心主控集群,并获取集群的KubeConfig,通过kubectl连接至应用中心主控集群。
步骤一:配置onectl RAM用户
RAM用户登录后才能将应用中心的应用迁移到ACK One GitOps,onectl会使用该用户的AK、SK操作阿里云的云资源。该RAM用户需要拥有AliyunAdcpFullAccess权限和ACK Template自定义相关权限。
为RAM用户授予AliyunAdcpFullAccess权限,具体操作,请参见为RAM用户授权。
为RAM用户授予ACK Template自定义权限策略。具体策略内容如下。
{ "Action": [ "cs:DescribeTemplates", "cs:DescribeTemplateAttribute" ], "Resource": [ "*" ], "Effect": "Allow" }
执行以下命令,配置onectl RAM用户的AK、SK信息。
此处仅配置
Access Key Id
和Access 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组件。
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在组件管理页面,单击应用管理页签,找到appcenter组件,单击右下角的卸载。
相关文档
您可以登录ACK One GitOps查看应用的运行状态,并通过ACK One GitOps管理应用。具体操作,请参见ACK One GitOps最佳实践。