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