跨帳號備份恢複情境下,您可通過註冊叢集接入,將備份組群接入到恢複叢集帳號下的註冊叢集,並配置相關的OSS等雲產品許可權,實現將跨帳號的ACK叢集間的備份恢複轉化為同帳號叢集間的備份和恢複。
實現原理
注意事項
備份組群、恢複叢集與註冊叢集需處於同一地區,且備份組群為1.16或以上版本。考慮到apiVersion相容問題,不建議您通過備份中心將高版本叢集中的應用遷移至低版本的叢集中。
備份應用時,正在刪除的資源不會被備份。
如需恢複為容器網路檔案系統管理的NAS類型(即恢複時轉換為儲存類列選擇為alibabacloud-cnfs-nas),您需要先建立StorageClass。具體操作,請參見通過CNFS管理NAS檔案系統(推薦)。
恢複應用時,資源將優先按照恢複叢集版本推薦的apiVersion進行恢複。若某資源在兩個版本中無同時支援的apiVersion版本,恢複時您需要手動部署。例如:
1.16版本叢集Deployment支援
extensions/v1beta1
、apps/v1beta1
、apps/v1beta2
以及apps/v1
,恢複至1.28叢集時將全部恢複至apps/v1
。1.16版本叢集Ingress支援
extensions/v1beta1
、networking.k8s.io/v1beta1
,無法將其直接恢複至1.22及以上版本叢集。
更多叢集版本API變更資訊,請參見ACK版本發布說明、Deprecated API Migration Guide。
重要在1.16版本叢集中,
apps
、rbac.authorization.k8s.io
等groups已支援v1,升級至1.28版本叢集時,您需要手動恢複Ingress、CronJob等資源。註冊叢集與普通ACK叢集的備份中心安裝模板不同,涉及到備份組群接入或移出註冊叢集的操作時,若需要繼續使用備份中心功能,則需要在註冊叢集(叢集接入)或備份組群(叢集移出)中重新安裝備份中心組件。
在註冊叢集使用ECS快照功能做雲端硬碟備份時建立的快照屬於備份帳號,無法直接在恢複帳號中恢複。對於雲端硬碟類型應用,您可以通過ECS提供的共用快照功能,手動完成恢複;或在備份前修改全域配置,通過雲備份方案備份雲端硬碟資料。具體操作,請參見步驟四:在恢複叢集中建立恢複任務。
前提條件
已開通雲備份(Cloud Backup)服務。對NAS、OSS、本地碟類型儲存卷進行備份時,以及在混合雲情境中,備份中心需要使用雲備份進行檔案備份。具體操作,請參見雲備份。
已建立恢複叢集,為確保能正常使用ECS快照恢複雲端硬碟資料,建議恢複叢集為1.18及以上版本。具體操作,請參見建立ACK託管叢集、建立ACK專有叢集或建立註冊叢集並接入本機資料中心叢集。
重要恢複叢集必須使用CSI儲存外掛程式,使用Flexvolume儲存外掛程式或通過csi-compatible-controller組件同時使用CSI Flexvolume儲存外掛程式的叢集不支援恢複。
備份中心關注業務應用的備份和恢複。在恢複任務之前,您需要在恢複叢集中預先安裝並配置好所需的系統組件。例如:
ACR免密組件:您需要為恢複叢集重新授權並配置acr-configuration。
ALB Ingress組件:您需要預先配置ALBConfig等。
已安裝備份服務元件並完成對應許可權的配置。具體操作,請參見安裝migrate-controller備份服務元件並配置許可權。
如需使用雲端硬碟快照備份資料卷,需要安裝v1.1.0或以上版本的CSI外掛程式。關於如何安裝CSI外掛程式,請參見安裝與升級CSI組件。
計費說明
備份中心功能本身不收費,使用備份中心時,可能用到以下相關服務,您需要支付相關的儲存費用。
Object Storage Service:OSS Bucket用於儲存備份的叢集資源(即相關YAML)。OSS相關計費請參見計費概述。
雲端硬碟快照:用於備份阿里雲雲端硬碟儲存卷資料。快照計費請參見快照計費。
說明自2023年10月12日11:00起,阿里雲ECS雲端硬碟不再收取快照極速可用儲存費和快照極速可用功能費,更多資訊,請參見快照極速可用能力。
使用PL0、PL1、PL2、PL3層級的ESSD雲端硬碟或ESSD AutoPL雲端硬碟時,在備份時建立的快照預設開啟快照極速可用功能。
雲備份:用於備份其他類型(除雲端硬碟外)的儲存卷資料。雲備份側會建立容器備份庫,收取備份儲存容量費。更多資訊,請參見價格詳情。
應用樣本
本文以以下情境為例,為您介紹如何?叢集應用資料的備份和恢複操作。
備份組群中包含如下應用:
應用 | 掛載儲存卷 | 應用特性 | 是否需要備份資料 |
sts-disk |
| 對資料有強一致性需求,備份前會暫停寫入。 | 是(雲備份/ECS快照) |
sts-nas |
| 對資料無強一致性需求,接受備份期間寫入的資料可能丟失。 沒有跨帳號VPC打通計劃,恢複叢集無法讀取原NAS服務資料。 | 是(雲備份) |
sts-oss |
| 海量資料,希望通過備份帳號的AK授權繼續使用原Bucket。 | 否(直接按原PVC/PV的YAML恢複,指向原OSS Bucket) |
如何建立掛載不同類型儲存卷的應用,請參見儲存-CSI。
(可選)步驟一:在備份組群中卸載備份中心
若您之前在備份組群中使用過備份中心相關功能,由於註冊叢集與普通ACK叢集的備份中心安裝模板不同,因此需要先在備份組群中卸載備份中心組件。若備份組群未安裝備份中心組件,則無需執行該步驟。
使用備份帳號登入Container Service管理主控台。
在左側導覽列選擇叢集,然後在叢集列表中單擊目的地組群即備份組群的名稱。
在左側導覽列選擇
,然後單擊應用管理頁簽。找到migrate-controller組件卡片,並單擊右下角的卸載。
在彈出的卸載組件對話方塊中單擊確定,完成組件卸載。
步驟二:在註冊叢集中安裝備份中心
使用恢複帳號建立註冊叢集,並將備份組群接入註冊叢集中。
具體操作,請參見建立註冊叢集。
在註冊叢集中安裝備份中心組件,並配置許可權。
具體操作,請參見安裝migrate-controller備份服務元件並配置許可權。
說明由於備份組群為同地區雲上ACK叢集,無需配置OSS內網網段路由。
步驟三:在註冊叢集中建立備份任務
此操作步驟需要全部在恢複帳號下的註冊叢集中進行,請勿切換至備份帳號下的備份組群中操作。
與使用HBR雲備份服務相比,使用ECS快照功能備份具有速度快、一致性強的優勢。但是,在註冊叢集使用ECS快照功能做雲端硬碟備份時建立的快照屬於備份帳號,無法直接在恢複帳號中恢複。
對於雲端硬碟類型應用sts-disk,有兩種方式實現跨帳號恢複:
備份方案 | 雲備份方案 | ECS快照方案 |
實現方式 | 在備份前,通過配置csdr下的configmap/csdr-config,改用雲備份服務備份雲端硬碟內資料。 恢複時,通過配置儲存類轉換,重新恢複為雲端硬碟類型的儲存卷。 | 使用預設的ECS快照功能備份雲端硬碟資料,通過ECS的共用快照功能,將建立的快照由備份帳號共用給恢複帳號。 通過備份中心恢複完成後,還需要手動修改叢集中volumesnapshotcontent資源指向快照ID,保證雲端硬碟正常建立掛載。 |
優勢 | 基本不需要額外的手動操作。 | 由ECS雲端硬碟快照保證單盤資料的一致性,備份恢複速度快。 |
不足 | 雲備份服務備份恢複時間長度較長且不保證資料一致。若應用對資料一致性要求較高,暫停寫入時間較長。 | 若涉及雲端硬碟數量較多,手動操作部分較為繁瑣。 |
若您的應用未使用雲端硬碟儲存,請直接根據云備份方案進行備份。
雲備份方案
如果您的應用使用了雲端硬碟儲存,且希望使用雲備份方案完成雲端硬碟備份。請參考如下操作進行資料備份。
確認ECS快照功能已關閉。
執行以下命令編輯
csdr-config
。kubectl -ncsdr edit cm csdr-config
確認
enable_ecs_snapshot
配置項為false
,否則修改並儲存退出。若配置已修改,執行以下命令,重啟工作群組件使配置生效。
kubectl -ncsdr delete pod -l control-plane=csdr-controller
若恢複帳號下還未有備份的倉庫,請建立備份倉庫並關聯恢複帳號下以
cnfs-oss-*
格式命名的OSS Bucket。具體操作,請參見建立備份倉庫。為sts-oss建立備份。具體操作,請參見建立備份計劃或立即備份。
由於sts-oss應用需要使用原OSS bucket,即不需要備份OSS儲存卷中的資料,因此需要為其單獨建立備份,建立備份任務時,備份儲存卷不勾選開啟。
假設sts-oss應用運行在命名空間OSS中,備份僅選擇包含命名空間OSS的應用。(若sts-oss應用與其他應用在同一命名空間,可通過指定標籤選擇備份)。
在應用備份的備份記錄頁簽,確認相關備份任務的狀態由InProgress轉為Completed。單擊備份記錄名稱,確認sts-oss相關的資源,如StatefulSet、Pod、PVC、PV及存放AK資訊的Secret均已備份。
為sts-nas、sts-disk應用建立備份,具體操作,請參見建立備份計劃或立即備份。
建立備份任務時,備份儲存卷勾選開啟。
由於
enable_ecs_snapshot
已設為false
,雲端硬碟儲存卷的資料備份同樣通過雲備份實現。您可以在雲備份控制台左側導覽列單擊容器備份,在備份任務頁簽中找到每個儲存聲明的備份進展及結果。
ECS快照方案
如果您的應用使用了雲端硬碟儲存,且希望使用ECS快照方案完成雲端硬碟備份。請參考如下操作進行資料備份。
確認ECS快照功能已開啟。
執行以下命令編輯
csdr-config
。kubectl -ncsdr edit cm csdr-config
確認
enable_ecs_snapshot
配置項為true
,否則修改並儲存退出。若配置已修改,執行以下命令,重啟工作群組件使配置生效。
kubectl -ncsdr delete pod -l control-plane=csdr-controller
若恢複帳號下還未有備份的倉庫,請建立備份倉庫並關聯恢複帳號下以
cnfs-oss-*
格式命名的OSS Bucket。具體操作,請參見建立備份倉庫。為sts-oss建立備份。具體操作,請參見建立備份計劃或立即備份。
由於sts-oss應用需要使用原OSS bucket,即不需要備份OSS儲存卷中的資料,因此需要為其單獨建立備份,建立備份任務時,備份儲存卷不勾選開啟。
假設sts-oss應用運行在命名空間OSS中,備份僅選擇包含命名空間OSS的應用。(若sts-oss應用與其他應用在同一命名空間,可通過指定標籤選擇備份)。
在應用備份的備份記錄頁簽,確認相關備份任務的狀態由InProgress轉為Completed。單擊備份記錄名稱,確認sts-oss相關的資源,如StatefulSet、Pod、PVC、PV及存放AK資訊的Secret均已備份。
為sts-nas、sts-disk應用建立備份backup-nas-disk。具體操作,請參見建立備份計劃或立即備份。
步驟四:在恢複叢集中建立恢複任務
在建立恢複任務之前,您需要在恢複叢集中預先安裝並配置好所需的系統組件。例如:
ACR免密組件:您需要為恢複叢集重新授權並配置acr-configuration。
ALB Ingress組件:您需要預先配置ALBConfig等。
若恢複叢集中已存在同名的資源,則恢複任務將跳過該資源。
若您的應用未使用雲端硬碟儲存,請直接根據云備份方案進行恢複。
Service資源恢複時,根據Service類型的不同將進行如下適配:
NodePort類型的Service:跨叢集恢複時,預設保留連接埠號碼。
LoadBalancer類型的Service:ExternalTrafficPolicy為Local時,HealthCheckNodePort預設使用隨機連接埠號碼。若您需要保留連接埠號碼,請在建立恢複任務時,設定
spec.preserveNodePorts: true
。在備份組群中由指定已有SLB的Service,恢複時將使用原有的SLB並預設關閉強制監聽,您需要前往SLB控制台配置監聽。
在備份組群中由CCM管理SLB的Service,恢複時將由CCM建立新的SLB執行個體,更多資訊,請參見Service的負載平衡配置注意事項。
雲備份方案
您需要使用恢複帳號,在恢複叢集下執行以下操作。
建立恢複任務,恢複sts-oss應用。具體操作,請參見恢複應用和資料卷。
在應用備份頁面單擊立即恢複,選擇備份倉庫並初始化,等待備份同步至恢複叢集。
選擇備份backup-oss建立恢複任務。
在恢複叢集中確認sts-oss是否正常恢複。可通過
kubectl exec
命令進入容器中檢查資料是否一致。
建立恢複任務,恢複sts-nas、sts-disk應用,並通過儲存類轉換恢複資料的儲存類型。具體操作,請參見恢複應用和資料卷。
在應用備份頁面單擊立即恢複,選擇備份backup-nas-disk。並為pvc-disk選擇儲存類alicloud-disk、為pvc-nas選擇儲存類alibabacloud-cnfs-nas。
其中alicloud-disk預設指代CSI提供的alicloud-disk-topology-alltype儲存類。您也可以在叢集中建立自訂的儲存類用於轉換。
在恢複叢集中確認應用、資料是否正常。您可以在ECS控制台確認是否在恢複帳號中建立了新雲端硬碟並掛載至對應的節點上。
ECS快照方案
使用恢複帳號,在恢複叢集下建立恢複任務,恢複sts-oss應用。具體操作,請參見恢複應用和資料卷。
在應用備份頁面單擊立即恢複,選擇備份倉庫並初始化,等待備份同步至恢複叢集。
選擇備份backup-oss建立恢複任務。
在恢複叢集中確認sts-oss是否正常恢複。可通過
kubectl exec
命令進入容器中檢查資料是否一致。
切換至備份帳號,在ECS控制台將快照集共用給恢複帳號。具體操作,請參見關於2024年7月19日Windows系統藍屏問題的臨時解決方案。
由備份中心建立的快照均以“snapshot-”開頭,您可通過備份記錄的建立時間快速確認目標快照。
切換至恢複帳號,在資源共用控制台接收共用的快照。具體操作,請參見關於2024年7月19日Windows系統藍屏問題的臨時解決方案。
快照集共用至恢複帳號後,快照名稱不變,但快照ID已變更。您可通過快照名稱得到快照ID的映射關係。
在恢複叢集中建立恢複任務,恢複sts-nas 、sts-disk應用。具體操作,請參見恢複應用和資料卷。
在應用備份頁面單擊立即恢複,選擇備份backup-nas-disk。在不選擇儲存類轉換的情況下,將預設使用原儲存類進行恢複,恢複前請確認儲存類存在。
在恢複叢集中查看pvc-disk狀態,發現處於Pending狀態,這是由於快照ID已發生變更,原快照ID不可用導致的,需要手動修改快照ID指向。相關event內容如下:
Warning ProvisioningFailed 2m27s (x9 over 4m35s) diskplugin.csi.alibabacloud.com_csi-provisioner-7ff546495c-glmj7_e333fc6a-8bd6-4192-92ee-a48155e711b9 failed to provision volume with StorageClass "alicloud-disk-topology-alltype": error getting handle for DataSource Type VolumeSnapshot by Name pvc-disk-0-volumesnapshot2024010817xxxx: snapshot pvc-disk-0-volumesnapshot2024010817xxxx is not Ready
其中,
pvc-disk-0-volumesnapshot2024010817xxxx
為叢集內volumesnapshot資源名稱。執行以下命令確認叢集內volumesnapshot資源的snapshotcontent。
說明命令中的volumesnapshot資源名稱即
pvc-disk-0-volumesnapshot2024010817xxxx
需要替換為您實際在event中查看到的資源名稱。kubectl -n<disk-ns> get volumesnapshot pvc-disk-0-volumesnapshot2024010817xxxx
預期輸出如下:可以看到返回的
SOURCESNAPSHOTCONTENT
的值即為volumesnapshot資源的snapshotcontent。NAME READYTOUSE SOURCEPVC SOURCESNAPSHOTCONTENT RESTORESIZE SNAPSHOTCLASS SNAPSHOTCONTENT CREATIONTIME AGE pvc-disk-0-volumesnapshot2024010817xxxx true snapcontent-7c9ef8fa-e83c-4900-8df8-40268662d10e-2024010820xxxx 20Gi snapcontent-7c9ef8fa-e83c-4900-8df8-40268662d10e-2024010820xxxx 51m 44m
執行以下命令,修改volumesnapshotcontent執行的snapshothandle為共用至恢複帳號下的ECS快照ID,修改後儲存並退出。
說明命令中
volumesnapshotconent
的值需要替換為您在上一步驟中實際擷取的傳回值。kubectl edit volumesnapshotconent snapcontent-7c9ef8fa-e83c-4900-8df8-40268662d10e-2024010820xxxx
為每個恢複後處於Pending狀態的雲端硬碟pvc修改對應的volumesnapshotcontent,並等待pvc的狀態由Pending轉化為Bound。
在恢複叢集中確認應用、資料是否正常。您可在ECS控制台確認是否在恢複帳號中建立了新雲端硬碟並掛載至對應的節點上。
(可選)步驟五:將備份組群移出註冊叢集,重新部署組件
若您不需要再進行跨帳號備份和恢複,您可以將備份組群從註冊叢集中移除。
若您需要在備份帳號下的備份組群中繼續使用備份中心,請卸載組件後重新安裝。
相關文檔
如果需要實現跨儲存外掛程式、跨版本叢集間的應用遷移,請參見通過備份中心實現低版本Kubernetes叢集應用遷移。
如果需要實現同一地區叢集的應用遷移,請參見同地區跨叢集遷移應用。
如果需要實現跨地區叢集的應用遷移,請參見跨地區跨叢集遷移應用。
如果需要通過kubectl命令列實現叢集應用的遷移,請參見通過kubectl實現叢集應用的備份和恢複。