本文介紹如何將自建ArgoCD主控叢集遷移至分布式雲容器平台 ACK One。
概述
在自建ArgoCD環境遷移到ACK One GitOps時,由於涉及的叢集、倉庫和應用數量較多,手動逐個遷移耗時較長。因此,我們提供了onectl命令以支援快速將其遷移至ACK One。架構如下所示:
onectl根據您指定的艦隊ID和自建ArgoCD主控叢集的ACK叢集ID(含註冊叢集),通過二者的KubeConfig,將自建ArgoCD主控叢集中ArgoCD的Cluster Secret(s)、Repo Secret(s)及Application(s)資源遷移至ACK One Fleet執行個體。
說明若您的自建ArgoCD主控叢集是IDC叢集,請先將其接入註冊叢集。具體操作,請參見建立註冊叢集。
如果您對自建ArgoCD主控叢集自訂配置了ConfigMap,請在遷移之前在ACK One Fleet執行個體中完成相應配置。
如果您為Cluster Secret(s)添加了自訂標籤,請在遷移叢集後通過ACK One GitOps的ArgoCD UI進行相應配置。
onectl遷移完應用之後,您可以通過非串聯刪除的方式,刪除自建ArgoCD主控叢集的Application(s)來斷開其與應用所在叢集的聯絡,而僅由ACK One GitOps對其進行管理。
前提條件
已開通分布式雲容器平台ACK One。並開啟多叢集管理功能。具體操作,請參見開啟艦隊管理功能。
如果是IDC叢集,請先將IDC叢集接入註冊叢集。具體操作,請參見建立註冊叢集。
已在Fleet執行個體中開啟GitOps功能,並通過ArgoCD CLI登入系統。具體操作,請參見GitOps快速入門。
步驟一:配置onectl RAM使用者
RAM使用者登入後,才能將自建ArgoCD應用中心的應用遷移到ACK One GitOps,onectl將使用該使用者的AK和SK訪問阿里雲資源。因此,阿里雲帳號需要對RAM使用者授予以下相關許可權。
授予AliyunAdcpFullAccess許可權。具體操作,請參見為RAM使用者授予系統權限原則。
授予AliyunCSReadOnly許可權,或添加ACK Template許可權,ACK Template權限原則內容如下。
{ "Action": [ "cs:DescribeTemplates", "cs:DescribeTemplateAttribute", "cs:DescribeClusterUserKubeconfig" ], "Resource": [ "*" ], "Effect": "Allow" }授予自建ArgoCD叢集的管理員權限。具體操作,請參見授予叢集RBAC。
執行以下命令,配置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控制台將自建ArgoCD環境的子叢集(非主控叢集)關聯至ACK One Fleet執行個體。
方式二:通過onectl命令列遷移叢集。
給自建ArgoCD主控叢集中所有的Cluster Secret(s)添加標籤
ack_cluster_id: <your ack cluster id>,以指定其所對應的ACK叢集。可以通過自建ArgoCD UI或kubectl修改Secret。執行以下onectl命令,將自建ArgoCD主控叢集中叢集遷移到ACK One GitOps。
onectl migrate clusters -n argocd說明如果您在自建ArgoCD環境中已對Cluster Secret(s)添加
label或者annotation,可在本步驟完成後在ACK One GitOps的ArgoCD UI上進行添加。
步驟三:遷移Git倉庫
執行以下命令,將應用中心主控叢集中的倉庫遷移到ACK One GitOps。
onectl migrate repos -n argocd執行以下命令,查看某一類或所有類資源狀態。
#onectl migrate status [clusters|repos|apps] -nargocd # 查看所有資源狀態。 onectl migrate status -nargocd # 查看單類資源狀態。 onectl migrate status clusters -nargocd onectl migrate status repos -nargocd onectl migrate status apps -nargocd預期輸出:
#################### Clusters Status #################### All 1 clusters were attached successfully to ACK One ccc47****** ! CLUSTER STATE MESSAGE ce4b****** Succeed #################### Repositories Status #################### All 1 repos were migrated successfully to ACK One ccc47****** ! STATE REPO TYPE NAME MESSAGE Succeed https://github.com/AliyunContainerService/gitops-demo.git git #################### 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 argocd application has not been migrated to ACK One ccc47****** -------------------- Template Applications -------------------- STATE NAME NAMESPACE TEMPLATEID TEMPLATEPATH MESSAGE
步驟四:遷移應用
onectl支援同時遷移一個或多個應用,也支援同時遷移所有應用,具體方式建議您根據自身情況進行選擇。
遷移所有應用
執行以下命令,遷移所有應用。
onectl migrate apps -n argocd --all預期輸出:
Applications in source cluster (ArgoCD or AppCenter cluster): NAME NAMESPACE TYPE TEMPLATEID app-git-2 argocd Git/Helm will be migrated to ACK One ccc47******. 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 ccc47****** ... -------------------- Git/Helm Applications -------------------- Application argocd/app-git-2 was migrated succeessfully. All 1 'Git/Helm' type applications has been migrated successfully o ACK One ccc47******. 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 ${app1Name} -n argocd # 將${app1Name}替換為您需要遷移的應用程式名稱。預期輸出:
Applications in source cluster (ArgoCD or AppCenter cluster): NAME NAMESPACE TYPE TEMPLATEID app-git-2 argocd Git/Helm will be migrated to ACK One ccc47******. 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 ccc47****** ... -------------------- Git/Helm Applications -------------------- Application argocd/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.在應用中心主控叢集中執行以下命令,需要以非級聯的方式移除自建ArgoCD中的Application資源,以確保不影響實際業務的運行。
kubectl --kubeconfig ${ARGOCD_CLUSTER_KUBECONFIG_PATH} delete app ${appName} -n argocd --cascade=false說明必須使用參數
--cascade=false,否則在移除應用時,實際運行在目的地組群中的K8s資源會隨之被移除。
FAQ
向ACK One GitOps添加的Repo的CONNECTION STATUS為Failed。
串連到ACK One Fleet執行個體,並執行以下命令查看日誌。
kubectl -nargocd get pod kubectl -nargocd logs argocd-server-xx -c argocd-repo-server如果日誌中出現
context deadline exceeded (Client.Timeout exceeded while awaiting headers)相關資訊,則可能是由於網路不通導致的。建議確認ACK One Fleet執行個體是否具有訪問外網的能力。確認VPC是否建立了公網NAT Gateway。
登入ACK One控制台,在左側導覽列選擇。
單擊基礎資訊頁簽,找到Virtual Private Cloud絡VPC,單擊右側對應的VPC進入詳情頁。
在專用網路詳情頁面,單擊資源管理頁簽,查看公網訪問服務。
argocd-server中主要Container有哪些?
Container名稱 | 說明 |
| ArgoCD的API Server,用於暴露API給Web UI、CLI和CI/CD系統使用。 |
| 是一個K8s Controller,用於協調叢集中的Application和Project資源,並同步Application狀態(從Git中同步到K8s叢集中)。 |
| 用於協調叢集中的ApplicationSet資源,ApplicationSet用於給多個叢集分發應用。 |
| 與Git倉庫互動,並產生和返回Kubernetes manifests。 |
| 主要用來為ArgoCD提供緩衝層,減少發送到K8s的API Server和Git伺服器的請求。 |
| ArgoCD依賴Dex來實現與外部OIDC供應商的身分識別驗證。也可以使用其他工具代替Dex。 |
| 用來檢測被ArgoCD管理的K8s Workload(如Deployment)的容器鏡像變化,並自動將其更新至最新版本。 |