在同一地理區域內的天翼云CCE One管理的Kubernetes集群間進行遷移,實現資源優化、應用升級或其他管理需求。其遷移流程如下圖所示:
前提條件
已開通天翼云分布式容器云平臺CCE One及其關聯產品的訪問權限。
同資源池情況下,CCE One聯邦自動打通與成員集群之間的管理網絡(同VPC或跨VPC均可),無需用戶額外配置操作。
適用場景
云上資源優化、應用升級或其他管理需求場景。
操作指引
本場景遷移,主要包含四個步驟:
步驟一:集群評估與納管
在這個階段,您將根據源集群的現狀來評估適合遷移的目標集群類型。
可以基于必要的開源工具自動或手工收集源集群的信息,包括Kubernetes版本、規模、工作負載、存儲等數據,并根據收集到的數據考慮合適的目標集群信息;
為方便后續的數據備份與恢復,或者基于聯邦的細粒度應用遷移,您需要將源集群注冊到天翼云CCE One注冊集群;
步驟二:數據遷移
若您的集群使用了云硬盤,需要隨集群一起遷往目標AZ,可以通過云備份服務創建云硬盤備份,再使用備份創建新的云硬盤,在配置云硬盤信息時,選擇目標可用區即可。
具體操作參考:云硬盤備份與恢復 以及 云硬盤數據跨可用區遷移
步驟三:目標集群創建與納管
在這個階段,您將評估目標集群所需規格信息并創建對應的天翼云CCE集群;然后將該目標集群關聯到分布式容器云平臺CCE One注冊集群;
云容器引擎允許用戶對集群資源進行個性化選取,以精準匹配其多樣化的業務訴求。如下所示的表中,列舉了集群的指標參數,并提供了參考規劃選擇;用戶應依據自身業務的確切需求,對相關設置做出合理調配,其間,我們建議盡可能保持與原集群性能配置的一致性水平。
| 主要指標參數 | 指標參數說明 | 本示例規劃 |
|---|---|---|
| kubernetes版本 |
| 1.29.3 |
| 網絡插件 |
| cubecni |
| apiserver訪問 | API Server的訪問需要依賴ELB實例,您可根據需要選擇合適的ELB規格,系統將根據該規格創建一個私網ELB實例。規格選擇請見:了解ELB實例規格 | 標準型I |
| 控制節點數 |
| 3 |
| 節點規格 | 分為控制節點規格和工作節點規格,如何選擇可以參考:集群規格推薦規劃 | 通用型4C8G |
| 工作節點操作系統 |
| ctyunos23.01 |
在目標CCE集群創建好后,需要進入天翼云分布式容器云平臺CCE One控制臺,將目標CCE集群關聯到CCE One的注冊集群以便支持后期的納管與聯邦調度能力;
步驟四:應用遷移
在這個階段,您將利用CCE One集群聯邦多集群應用調度能力,將您源CCE集群中的應用遷移到目標CCE注冊集群。
1. 訂購天翼云CCE One集群聯邦實例,并將源CCE集群和目標CCE集群作為成員加入聯邦(通過艦隊綁定);
應用遷移需要基于集群聯邦控制面來完成,因此需要用戶首先在CCE One聯邦管理界面首先創建一個聯邦實例。
聯邦實例只可以關聯一個艦隊,注冊集群可以加入艦隊;注冊集群加入已關聯聯邦的艦隊時,即自動作為成員集群加入該聯邦。
成員集群和聯邦實例之間涉及網絡鏈路打通,建議優先將相關注冊集群和聯邦創建到相同的資源池和VPC下,這樣可以默認內網互通并且無任何額外成本;若源和目標注冊集群的確需要跨資源池,可參考指引《打通注冊集群與聯邦實例之間的聯通網絡》配置網絡,并選擇正確的接入鏈路類型以確保成員集群、聯邦網絡互通。
成員集群加入聯邦成功后,在總覽頁面,可看到成員集群列表的“接入聯邦狀態”列,均顯示為“已聯通”。
2. 將需要遷移的工作負載或相關服務,提升到集群聯邦控制面管理;
成員集群加入聯邦后,其內部署的工作負載、Service、ConfigMap等還無法通過聯邦進行調度,需要首先將相關資源YAML作為配置模板提升到聯邦控制面管理,此后,才能再基于聯邦進行該工作負載的多集群調度分發。
底層集群工作負載提升到聯邦控制面管理的方式有兩種,對原始工作負載的影響也不同。需要業務按自身需求按需選擇:
方式一:工作負載維度接管,并且原集群中工作負載Pod不重啟;
假設成員集群member1中存在工作負載default/nginx,其狀態為running:
[root@cluster1]# kubectl get deploy nginxNAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 66s[root@cluster1]# kubectl get podNAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-sqjj4 1/1 Running 0 2m12s我們可以基于聯邦控制面kubectl方式,執行以下命令來將其提升到聯邦控制面管理:
[root@master1]# karmadactl promote deployment nginx -n default -c member1Resource "apps/v1, Resource=deployments"(default/nginx) is promoted successfully此時,再在聯邦控制面中查詢該工作負載,可看到已經可以查詢到,說明已被聯邦實例接管:
[root@master1]# kubectl get deployNAME READY UP-TO-DATE AVAILABLE AGE
nginx 1/1 1 1 7m25s檢查成員集群中對應nginx無狀態工作負載,對應Pod并未重啟:
[root@cluster1]# kubectl get podNAME READY STATUS RESTARTS AGE
nginx-6799fc88d8-sqjj4 1/1 Running 0 15m
方式二:批量提升接管,原集群中工作負載Pod會重啟;
對于希望批量提升到聯邦控制面接管,以及對Pod重啟無感知的的服務或資源,可考慮采用本方式,其執行效率相對更高。
在成員集群中已部署服務非常多或應用較復雜情況下,該方式更適合。可基于更大的粒度,來做資源的接管和提升,例如:
以資源為粒度,遷移某種類型的全部資源
以應用為粒度,遷移某個應用涉及的所有類型的資源
此時,就需要資源模板結合集群聯邦的調度策略PropagationPolicy,來接管相應資源,可以按如下方式操作。
a.將所有資源的 YAML 配置應用到 集群聯邦控制面, 作為集群聯邦的 ResourceTemplate。此時,資源模板只會存在聯邦控制面,并不會下發任何成員集群;
b.編寫 PropagationPolicy 調度策略, 并將其應用到集群聯邦控制面。 您需要注意以下兩個字段:
spec.conflictResolution: Overwrite:該字段的值必須是 Overwrite。
spec.resourceSelectors:指定哪些資源需要被遷移。
如果你希望的是將所有Deployment資源提升到聯邦控制面管理,則可以配置類似如下的調度策略:
apiVersion: policy.karmada.io/v1alpha1kind: PropagationPolicymetadata:
name: deployments-ppspec:
conflictResolution: Overwrite
placement:
clusterAffinity:
clusterNames:
- member1
priority: 0
resourceSelectors:
- apiVersion: apps/v1
kind: Deployment
schedulerName: default-scheduler當前,除了YAML方式創建外,也支持基于前端頁面的引導創建。可進入聯邦控制臺->策略管理->調度策略->創建調度策略頁面進行配置;
在以上調度策略配置完成后,聯邦實例將進行聯邦資源模板與底層的同步與覆蓋。一段時間后即可觀測到相關工作負載已被聯邦實例接管;
3. 基于集群聯邦,將服務逐步遷移到目標集群中;
已接管的工作負載,支持按需調整其調度策略及差異化策略,來實現工作負載多集群之間的靈活調度。此時,您可以在聯邦控制面中編輯需要遷移工作負載的實例數或調度策略,使其復制分發到目標成員集群中去。
點擊進入工作負載->無狀態,選在對應的工作負載實例后,點擊后側“全量替換”操作按鈕進行編輯:
在編輯頁面中,直接跳過模板配置步驟,進入調度與差異化配置頁面。通過設置調整集群調度策略,可將工作負載復制分發到目標集群,或按權重拆分部分副本到新集群。如下:
如上圖配置,提交更新后,工作負載將在源集群和目標集群中1:1比例部署。
4. 服務驗證及終端灰度切流;
該步驟中,用戶可基于應用實際架構及服務需求,在驗證目標成員服務正常后,實施真實用戶流量的逐步切流;
切流過程中,可配合通過調度策略逐步調整工作負載Pod副本在源集群與目標集群之間的分布,并最終全部遷移到天翼云上CCE集群,以實現完整的切流;