跨賬號備份恢復場景下,您可通過注冊集群接入,將備份集群接入到恢復集群賬號下的注冊集群,并配置相關的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快照恢復云盤數據,建議恢復集群為v1.18及以上版本。具體操作,請參見創建ACK托管集群、創建ACK專有集群或創建注冊集群并接入本地數據中心集群。
重要恢復集群必須使用CSI存儲插件,使用Flexvolume存儲插件或通過csi-compatible-controller組件同時使用CSI Flexvolume存儲插件的集群不支持恢復。
備份中心關注業務應用的備份和恢復。在恢復任務之前,您需要在恢復集群中預先安裝并配置好所需的系統組件。例如:
ACR免密組件:您需要為恢復集群重新授權并配置acr-configuration。
ALB Ingress組件:您需要預先配置ALBConfig等。
已安裝備份服務組件并完成對應權限的配置。具體操作,請參見安裝migrate-controller備份服務組件并配置權限。
如需使用云盤快照備份數據卷,需要安裝v1.1.0或以上版本的CSI插件。關于如何安裝CSI插件,請參見安裝與升級CSI組件。
計費說明
備份中心功能本身不收費,使用備份中心時,可能用到以下相關服務,您需要支付相關的存儲費用。
應用示例
本文以以下場景為例,為您介紹如何實現集群應用數據的備份和恢復操作。
備份集群中包含如下應用:
應用 | 掛載存儲卷 | 應用特性 | 是否需要備份數據 |
sts-disk |
| 對數據有強一致性需求,備份前會暫停寫入。 | 是(云備份/ECS快照) |
sts-nas |
| 對數據無強一致性需求,接受備份期間寫入的數據可能丟失。 沒有跨賬號VPC打通計劃,恢復集群無法讀取原NAS服務數據。 | 是(云備份) |
sts-oss |
| 海量數據,希望通過備份賬號的AK授權繼續使用原Bucket。 | 否(直接按原PVC/PV的YAML恢復,指向原OSS Bucket) |
如何創建掛載不同類型存儲卷的應用,請參見存儲-CSI。
(可選)步驟一:在備份集群中卸載備份中心
若您之前在備份集群中使用過備份中心相關功能,由于注冊集群與普通ACK集群的備份中心安裝模板不同,因此需要先在備份集群中卸載備份中心組件。若備份集群未安裝備份中心組件,則無需執行該步驟。
使用備份賬號登錄容器服務管理控制臺。
在左側導航欄選擇集群,然后在集群列表中單擊目標集群即備份集群的名稱。
在左側導航欄選擇
,然后單擊應用管理頁簽。找到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控制臺將快照共享給恢復賬號。具體操作,請參見將快照共享給其他阿里云賬號。
由備份中心創建的快照均以“snapshot-”開頭,您可通過備份記錄的創建時間快速確認目標快照。
切換至恢復賬號,在資源共享控制臺接收共享的快照。具體操作,請參見將快照共享給其他阿里云賬號。
快照共享至恢復賬號后,快照名稱不變,但快照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實現集群應用的備份和恢復。