使用onectl自動化遷移應(yīng)用至ACK One GitOps
應(yīng)用中心已不再進行功能升級并逐步停止維護,您可以通過onectl自動化遷移,將應(yīng)用中心的應(yīng)用快速遷移至ACK One GitOps。本文介紹如何使用onectl自動化遷移應(yīng)用中心應(yīng)用至ACK One GitOps。
遷移原理
onectl依賴應(yīng)用中心主控集群和ACK One Fleet實例兩者的KubeConfig,將應(yīng)用中心主控集群中,與ArgoCD對應(yīng)的資源Cluster(Secret)、Repo(Secret)和Application都遷移到ACK One Fleet實例中。其中Cluster的遷移是通過ACK One的關(guān)聯(lián)集群功能來實現(xiàn)。
Template type Application是個特例,onectl會將其模板內(nèi)容(資源YAML)記錄在本地目錄,以便您可以將其上傳至自己的Git倉庫,并經(jīng)由GitOps快速入門發(fā)布應(yīng)用到ACK One中。
在onectl遷移完應(yīng)用之后,刪除應(yīng)用中心主控集群中的Application以斷開其與應(yīng)用的聯(lián)系,而與ACK One Fleet實例中的Application進行關(guān)聯(lián)。
前提條件
已開通分布式云容器平臺ACK One,并開啟多集群管理功能。具體操作,請參見開啟艦隊管理功能。
已從ACK One控制臺獲取Fleet實例的KubeConfig,并通過kubectl連接至Fleet實例。
已在主控實例中開啟GitOps功能,并通過ArgoCD CLI登錄系統(tǒng)。具體操作,請參見在ACK One主控實例中開啟GitOps。
已從容器服務(wù)管理控制臺的應(yīng)用中心頁面獲取待遷移的應(yīng)用中心主控集群,并獲取集群的KubeConfig,通過kubectl連接至應(yīng)用中心主控集群。
步驟一:配置onectl RAM用戶
RAM用戶登錄后才能將應(yīng)用中心的應(yīng)用遷移到ACK One GitOps,onectl會使用該用戶的AK、SK操作阿里云的云資源。該RAM用戶需要擁有AliyunAdcpFullAccess權(quán)限和ACK Template自定義相關(guān)權(quán)限。
為RAM用戶授予AliyunAdcpFullAccess權(quán)限,具體操作,請參見為RAM用戶授權(quán)。
為RAM用戶授予ACK Template自定義權(quán)限策略。具體策略內(nèi)容如下。
{ "Action": [ "cs:DescribeTemplates", "cs:DescribeTemplateAttribute" ], "Resource": [ "*" ], "Effect": "Allow" }
執(zhí)行以下命令,配置onectl RAM用戶的AK、SK信息。
此處僅配置
Access Key Id
和Access Key Secret
。onectl configure
預(yù)期輸出:
Configuring profile default ... Access Key Id [*********************NaY]: Access Key Secret [***************************HUd]: Ram Username []: Default Kubeconfig Path (default is ~/.kube/config) []: Saving profile[default] ... Done.
步驟二:配置所需環(huán)境變量
為了簡化遷移命令,ACK One Fleet實例的ID和應(yīng)用中心主控集群的ID被設(shè)置為環(huán)境變量,onectl會根據(jù)ClusterID自動獲取兩者的KubeConfig,保存在~/.onectl/
目錄下。
export ACKONE_HUB_CLUSTER_ID=ccc47ca148d0147519f229bba********
export ARGOCD_CLUSTER_ID=ce4bb2004bb0e409eaa4c593d********
步驟三:遷移集群
執(zhí)行以下命令,將集群從應(yīng)用中心主控集群遷移至ACK One GitOps。
onectl migrate clusters -n appcenter
步驟四:遷移Git倉庫
執(zhí)行以下命令,將倉庫從應(yīng)用中心主控集群遷移至ACK One GitOps。
onectl migrate repos -n appcenter
(可選)步驟五:查看遷移狀態(tài)
執(zhí)行以下命令,查看資源狀態(tài)。
#onectl migrate status [clusters|repos|apps] -nappcenter
# 查看所有資源狀態(tài)。
onectl migrate status -nappcenter
# 查看單類資源狀態(tài)。
onectl migrate status clusters -nappcenter
onectl migrate status repos -nappcenter
onectl migrate status apps -nappcenter
預(yù)期輸出:
#################### 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
步驟六:遷移應(yīng)用
onectl支持同時遷移一個或多個應(yīng)用,也支持同時遷移所有應(yīng)用,建議逐個遷移。
執(zhí)行以下命令遷移一個或多個應(yīng)用。
onectl migrate apps ${app1Name} -n appcenter
預(yù)期輸出:
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.
執(zhí)行以下命令遷移所有應(yīng)用。
onectl migrate apps -n appcenter --all
預(yù)期輸出:
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
步驟七:移除應(yīng)用中心的應(yīng)用
在應(yīng)用中心主控集群中執(zhí)行以下命令,移除應(yīng)用中心的應(yīng)用。
確保應(yīng)用在ACK One GitOps中運行正常后,再移除應(yīng)用中心的應(yīng)用。
以下命令行中,必須使用參數(shù)
--cascade=false
,否則在移除應(yīng)用時,實際運行在目標(biāo)集群中的K8s資源會被一起移除。
kubectl --kubeconfig ${ARGOCD_CLUSTER_KUBECONFIG} delete app ${appName} -n appcenter --cascade=false
步驟八:卸載應(yīng)用中心組件
將應(yīng)用中心主控集群中所有應(yīng)用都遷移至ACK One GitOps,并確保應(yīng)用運行狀態(tài)正常后,且不再需要appcenter組件時,您可以通過組件管理頁面卸載appcenter組件。
登錄容器服務(wù)管理控制臺,在左側(cè)導(dǎo)航欄選擇集群。
在集群列表頁面,單擊目標(biāo)集群名稱,然后在左側(cè)導(dǎo)航欄,選擇 。
在組件管理頁面,單擊應(yīng)用管理頁簽,找到appcenter組件,單擊右下角的卸載。
相關(guān)文檔
您可以登錄ACK One GitOps查看應(yīng)用的運行狀態(tài),并通過ACK One GitOps管理應(yīng)用。具體操作,請參見ACK One GitOps最佳實踐。