全部產品
Search
文件中心

Container Service for Kubernetes:將ACK專有叢集熱遷移至ACK託管叢集Pro版

更新時間:Nov 01, 2024

如果您有存量的ACK專有叢集,但同時希望享受ACK叢集Pro版的功能和特性,例如控制面託管、控制面高可用等,您可以將ACK專有叢集熱遷移至ACK叢集Pro版,不中斷叢集業務的正常運行。

前提條件

條件項

說明

叢集

已有ACK專有叢集(待遷移叢集),且叢集版本為1.18及以上。如需升級叢集,請參見手動升級叢集

OSS Bucket

已在待遷移叢集的同一地區下建立一個OSS Bucket,且沒有為該Bucket設定防盜鏈(防盜鏈可能導致遷移失敗)。更多資訊,請參見建立儲存空間防盜鏈

注意事項

注意項

說明

公網訪問

部分時間較早的ACK專有叢集仍使用公網SLB訪問API Server,此類叢集遷移到ACK叢集Pro版後無法繼續通過公網SLB訪問。請手動切換為EIP模式(將EIP綁定到API Server內網SLB),以支援公網訪問API Server。關於手動切換EIP模式的具體操作,請參見控制叢集API Server的公網訪問能力

Pod自訂配置

ACK專有叢集啟用Pod自訂配置後,不能隨即轉移至ACK叢集Pro版。您需要在遷移前停止terway-controlplane,並在遷移後啟用terway-controlplane。具體操作, 請參見ACK專有叢集遷移時,停止terway-controlplane,關於如何自訂配置Pod,請參見為Pod配置固定IP及獨立虛擬交換器、安全性群組

Master節點

部分時間較早的叢集的Master節點未預設安裝雲助手,需手動安裝。具體操作,請參見安裝雲助手Agent。叢集遷移完成後,Master節點將變為Not Ready 。

ECS執行個體釋放

如您在刪除遷移後的Master節點時勾選釋放ECS執行個體,ACK僅會釋放隨用隨付類型的ECS執行個體及其資料盤。若您的ECS執行個體為訂用帳戶類型,需手動釋放。具體操作,請參見釋放執行個體

步驟一:熱遷移ACK專有叢集ACK叢集Pro版

完成前提條件中的準備工作和相關注意事項後,您可以開始遷移。熱遷移後的ACK叢集Pro版無法回退至ACK專有叢集

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面的操作列,單擊待遷移叢集對應的更多>遷移至Pro版

  3. 遷移至Pro版對話方塊,完成前置檢查和RAM授權,選擇為熱遷移準備的OSS Bucket的名稱,仔細閱讀遷移注意事項,然後單擊確定

    展開查看如何完成前置檢查

    單擊前置檢查,跳轉至容器智能營運控制台,然後單擊執行遷移檢查,在面板中確認檢查項後勾選我已知曉並同意,然後單擊執行檢查

    如前置檢查未通過,可按照控制台頁面指引修複問題。

    前置檢查.png

    展開查看如何完成熱遷移RAM授權

    1. 單擊存取控制台(RAM),前往完成熱遷移所需的授權。同時,擷取OSS Bucket名稱,供下一步策略內容修改使用。migrate

    2. 單擊以k8sMasterRolePolicy開頭的任一授權策略名稱稱,在策略詳情頁的策略內容頁簽,單擊修改策略內容,然後在指令碼編輯地區的Statement欄位中補充以下策略內容,然後單擊確定

      請將以下代碼中的<YOUR_BUCKET_NAME>替換為您在該地區下為目的地組群建立的Bucket的名稱(刪去<>),即在遷移至Pro版對話方塊指定的Bucket的名稱。

      ,
              {
                  "Action": [
                      "oss:PutObject",
                      "oss:GetObject"
                  ],
                  "Effect": "Allow",
                  "Resource": [
                      "acs:oss:*:*:<YOUR_BUCKET_NAME>/*"  
                  ]
              }

    遷移完成後,遷移至Pro版對話方塊將提示遷移已完成。您可以觀察叢集類型和Master節點狀態變更。

    • 叢集類型:返回叢集列表頁面,在叢集類型列查看類型由ACK專有版自動變更為ACK Pro版

    • Master節點狀態:在叢集列表頁面的操作列,單擊目的地組群對應的詳情,然後在左側導覽列單擊節點管理>節點。在節點列表的角色/狀態列下,查看原有的Master節點狀態變成未知,表明該Master節點已脫離叢集,終止使用。您可以參見步驟二:移除ACK專有叢集熱遷移後的Master節點,移除叢集熱遷移後的Master節點。

步驟二:移除ACK專有叢集熱遷移後的Master節點

完成熱遷移後,您可以通過控制台或kubectl命令手動將Master節點從ACK專有叢集中移除。

通過控制台

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇節點管理 > 節點

  3. 節點頁面的操作列,單擊待移除Master節點對應的更多>移除,或選中多個Master節點後單擊下方的大量移除,然後按照對話方塊指引選擇配置,仔細閱讀對話方塊的注意事項,並單擊確定

使用kubectl

執行命令前,請確保您可以使用kubectl命令串連叢集。關於如何使用kubectl命令串連叢集的具體操作,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集

  1. 執行以下命令,查看並記錄待移除的Master節點名稱。

    kubectl get node | grep control-plane
  2. 執行以下命令移除目標Master節點,將<MASTER_NAME>替換為上一步記錄的Master節點名稱。

    kubectl delete node <MASTER_NAME>

    如需大量刪除多個Master節點,可將以下命令中的多個<MASTER_NAME>替換。例如,需要同時刪除Master節點cn-hangzhou.192.xx.xx.65和cn-hangzhou.192.xx.xx.66時,範例程式碼如下。

    kubectl delete node cn-hangzhou.192.xx.xx.65 cn-hangzhou.192.xx.xx.66

步驟三:組件處理

重新安裝ALB Ingress Controller組件

ACK專有叢集中安裝了組件ALB Ingress Controller,您需要在遷移成功後重新安裝該組件。關於如何安裝ALB Ingress Controller組件,請參見管理組件。安裝完成後需要通過kubectl刪除原來的應用,刪除具體操作可以通過執行以下命令完成。執行命令前,請確保您可以使用kubectl命令串連叢集。詳細資料,請參見擷取叢集KubeConfig並通過kubectl工具串連叢集

kubectl delete deployment alb-ingress-controller -n kube-system

遷移ack-virtual-node至託管版

若ACK專有叢集中安裝了ACK Virtual Node組件,為實現業務無縫遷移,您需要在叢集遷移成功後,將ACK Virtual Node組件也遷移至託管版。

  1. 登入Container Service管理主控台,在左側導覽列選擇叢集

  2. 叢集列表頁面,單擊目的地組群名稱,然後在左側導覽列,選擇營運管理 > 組件管理

  3. 組件管理頁面,安裝ACK Virtual Node組件。

  4. ACK Virtual Node組件安裝完成後,請依次執行以下命令,清除不再需要的舊組件和配置。

    # 依次刪除舊的vk-webhook服務、ack-virtual-node-controller部署、虛擬節點相關的ClusterRoleBinding、虛擬節點的服務賬戶。
    kubectl -n kube-system delete service vk-webhook
    kubectl -n kube-system delete deployment ack-virtual-node-controller
    kubectl -n kube-system delete clusterrolebinding virtual-kubelet
    kubectl -n kube-system delete serviceaccount virtual-kubelet
  5. 遷移完成後,您可以通過建立新Pod測試叢集是否正常運行。

後續步驟

常見問題

ACK專有叢集遷移後支援回退嗎?

叢集遷移成功後不支援回退。若叢集遷移失敗,系統會自動復原。

遷移過程中ACK專有叢集的業務是否受影響?

叢集遷移過程中會休眠ACK專有叢集的管控組件,但不影響正在啟動並執行業務。

遷移流程大概需要多長時間?

叢集遷移主要包括控制面休眠、etcd資料備份以及託管側組件啟動三個階段。整體流程預計耗時10~15分鐘,其中API Server不可用時間預計持續5~10分鐘。

叢集遷移後,訪問鏈路是否會變

遷移後,API Server SLB IP地址不會改變,通過KubeConfig訪問叢集時,叢集地址不發生變化。

前置檢查ACK Virtual Node環境變數配置失敗處理

若在ACK專有叢集中安裝了ACK Virtual Node組件,需要在遷移前手動設定kube-apiserver內網端點。具體操作如下:

  1. 叢集資訊頁面,擷取kube-apiserver內網端點資訊。

  2. 無狀態頁面的kube-system命名空間下,找到名為ack-virtual-node-controller的Deployment,然後為該Deployment的spec.template.spec.containers[0].env欄位添加如下環境變數:

  • KUBERNETES_APISERVER_HOST:表示kube-apiserver內網IP地址。

  • KUBERNETES_APISERVER_PORT:表示kube-apiserver內網連接埠,通常取值為6443。