當您無法通過Container Service控制台操作備份中心或容災備份需要自動化實現時,您可以通過kubectl命令列在備份組群和恢複叢集中部署備份倉庫、應用備份、應用恢複的CR資源,以實現不同叢集間應用的遷移。
前提條件
已安裝備份服務元件並完成對應許可權的配置。具體操作,請參見安裝migrate-controller備份服務元件並配置許可權。
使用情境
因許可權問題,無法通過Container Service控制台操作備份中心。
容災備份流程需要自動化實現。
注意事項
備份及恢複任務不能通過kubectl的
delete
命令簡單刪除。具體操作,請參見下文步驟四:刪除叢集備份中心的相關資源。關注備份中心組件migrate-controller版本發布情況,並及時升級。具體操作,請參見管理組件。
請勿刪除下文範例程式碼中出現的配置參數,以免備份恢複失敗。
步驟一:建立備份倉庫
使用以下內容,在備份組群和恢複叢集中建立backuplocation.yaml檔案。
apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupLocation metadata: name: <yourBackuplocationName> namespace: csdr spec: backupSyncPeriod: 0s config: network: internal region: cn-beijing objectStorage: bucket: <cnfs-oss-yourBucketName> prefix: <subDir> provider: alibabacloud
其餘參數無需設定,保持預設配置即可。
參數
是否必選
說明
name
是
備份倉庫的名稱,須符合K8s命名規則。
network
是
OSS Bucket的網路訪問方式。取值:
internal:內網訪問模式,所有關聯集群與OSS Bucket需處於同一地區。
public:公網訪問模式,無地區限制。
region
是
OSS Bucket所在地區。
bucket
是
OSS Bucket名稱,需提前建立,且名稱需符合以cnfs-oss-****開頭的命名規則。
prefix
否
OSS Bucket子目錄。設定該參數後,實際備份內容儲存在此子目錄下。
分別在備份組群和恢複叢集中執行以下命令,部署backuplocation對象。
kubectl apply -f backuplocation.yaml
分別在備份組群和恢複叢集中執行以下命令,查看backuplocation的狀態。
kubectl describe backuplocation <yourBackuplocationName> -n csdr
預期輸出:
... Status: Last Validation Time: 2022-12-08T04:00:22Z Message: success by csdr-controller Phase: Available
由預期輸出可看到,已建立的備份倉庫狀態為
Available
,說明當前叢集具有訪問OSS的許可權可以直接存取。
步驟二:建立備份任務
建立立即備份任務
使用以下內容,在備份組群中建立applicationbackup.yaml檔案。
apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationBackup metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<yourBackuplocationName>","region":"cn-beijing","bucket":"<cnfs-oss-yourBucketName>","prefix":"<subDir>","provider":"alibabacloud"}} name: <yourApplicationBackupName> namespace: csdr spec: includedNamespaces: - default includedResources: - statefulset excludedResources: - deployment labelSelector: matchLabels: app: mysql-sts includeClusterResources: false pvBackup: defaultPvBackup: false storageLocation: <yourBackuplocationName> ttl: 720h0m0s
其餘參數無需設定,保持預設配置即可。
參數
是否必選
說明
csdr.alibabacloud.com/backuplocations
是
備份所在的備份倉庫資訊,需與備份倉庫的配置一致。
name
是
立即備份任務的名稱。
includedNamespaces
是
指定命名空間名稱。
includedResources
否
指定叢集資源類型。
重要為避免非預期備份結果,includedResources和excludedResources您只需配置一項。當兩者均為空白時,表示備份所有資源類型。
excludedResources
否
排除叢集資源類型。
重要為避免非預期備份結果,includedResources和excludedResources您只需配置一項。當兩者均為空白時,表示備份所有資源類型。
matchLabels
否
指定標籤,只備份符合的資源。
includeClusterResources
否
是否備份Cluster層級的資源,例如StorageClass、CRD、Webhook等。
true
:備份所有Cluster層級資源。false
:僅備份被選擇的命名空間中的Namespace層級資源引用的Cluster層級資源。例如,備份Pod時,引用的ServiceAccount授權了某ClusterRole,該ClusterRole將被自動備份;備份CR時,CRD將被自動備份。
說明通過Container Service管理主控台建立的備份任務,預設
IncludeClusterResources
欄位為false
。defaultPvBackup
是否備份儲存卷,開啟資料備份。取值:
true:備份應用和儲存卷。
false:只備份應用。
storageLocation
是
備份倉庫名稱。
說明若您的叢集已使用Velero,請加入DingTalk使用者群(DingTalk群號:35532895)諮詢。
ttl
是
備份有效期間,即備份任務的資料存放區有效期間,到期之後資料將無法恢複。格式如720h0m0s,取值範圍:24h0m0s~1572864h0m0s。
在備份組群中執行以下命令,部署applicationbackup對象。
kubectl apply -f applicationbackup.yaml
在備份組群中執行以下命令,查看立即備份任務的狀態。
kubectl describe applicationbackup <yourApplicationBackupName> -n csdr
預期輸出:
... Status: Completion Timestamp: 2022-12-05T15:02:35Z Expiration: 2023-01-04T15:02:25Z Message: success Phase: Completed
當立即備份任務由
Inprogress
轉為Completed
狀態,說明立即備份任務建立成功。
建立定時備份計劃
使用以下內容,在備份組群中建立backupschedule.yaml檔案。
apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupSchedule metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<yourBackuplocationName>","region":"cn-beijing","bucket":"<cnfs-oss-yourBucketName>","prefix":"<subDir>","provider":"alibabacloud"} name: <yourBackupScheduleName> namespace: csdr spec: schedule: 1 4 * * * template: includedNamespaces: - default includedResources: - statefulset excludedResources: - deployment labelSelector: matchLabels: app: mysql-sts includeClusterResources: false pvBackup: defaultPvBackup: true storageLocation: <yourBackuplocationName> ttl: 720h0m0s
其餘參數無需設定,保持預設配置即可。
參數
是否必選
說明
csdr.alibabacloud.com/backuplocations
是
備份所在的備份倉庫資訊,需與備份倉庫的配置一致。
name
是
定時備份計劃的名稱。
schedule
是
備份周期,請使用Cron運算式。
includedNamespaces
是
指定命名空間名稱。
includedResources
否
指定叢集資源類型。
重要為避免非預期備份結果,includedResources和excludedResources您只需配置一項。當兩者均為空白時,表示備份所有資源類型。
excludedResources
否
排除叢集資源類型。
重要為避免非預期備份結果,includedResources和excludedResources您只需配置一項。當兩者均為空白時,表示備份所有資源類型。
matchLabels
否
指定標籤,只備份合格資源。
includeClusterResources
否
是否備份Cluster層級的資源,例如StorageClass、CRD、Webhook等。
true
:備份所有Cluster層級資源。false
:僅備份被選擇的命名空間中的Namespace層級資源引用的Cluster層級資源。例如,備份Pod時,引用的ServiceAccount授權了某ClusterRole,該ClusterRole將被自動備份;備份CR時,CRD將被自動備份。
說明通過Container Service管理主控台建立的備份任務,預設
IncludeClusterResources
欄位為false
。defaultPvBackup
是
是否備份儲存卷,開啟資料備份。取值:
true:備份應用和儲存卷。
false:只備份應用。
storageLocation
是
備份倉庫名稱。
說明若您的叢集已使用Velero,請加入DingTalk使用者群(DingTalk群號:35532895)諮詢。
ttl
是
備份有效期間,即備份任務的資料存放區有效期間,到期之後資料將無法恢複。格式如720h0m0s,取值範圍:24h0m0s~1572864h0m0s。
在備份組群中執行以下命令,部署backupschedule對象。
kubectl apply -f backupschedule.yaml
在備份組群中執行以下命令,查看定時備份計劃的狀態。
kubectl describe backupschedule <yourBackupScheduleName> -n csdr
預期輸出:
... Status: Last Backup: 2022-12-07T20:01:11Z Last Processed Time: 2022-12-08T13:05:37Z Phase: Enabled
當定時備份計劃狀態為
Enabled
,表明定時備份計劃建立成功。在備份組群中執行以下命令,查看定期建立的備份。
kubectl get applicationbackup -n csdr | grep <yourBackupScheduleName>
預期輸出:
<yourBackupScheduleName>-20221205225845 2d22h <yourBackupScheduleName>-20221206040104 2d17h <yourBackupScheduleName>-20221207040137 41h <yourBackupScheduleName>-20221208040111 17h
步驟三:建立恢複任務
使用以下內容,在恢複叢集中建立applicationrestore.yaml檔案。
apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationRestore metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<yourBackuplocationName>","region":"cn-beijing","bucket":"<cnfs-oss-yourBucketName>","prefix":"<subDir>","provider":"alibabacloud"} name: <yourApplicationRestoreName> namespace: csdr spec: appRestoreOnly: false preserveNodePorts: true includedNamespaces: - default includedResources: - statefulset excludedResources: - secret convertedarg: - convertToStorageClassType: alicloud-disk-topology-alltype namespace: nas persistentVolumeClaim: pvc-nas - convertToStorageClassType: alicloud-disk-topology-alltype namespace: oss persistentVolumeClaim: pvc-oss backupName: <yourApplicationBackupName> namespaceMapping: <backupNamespace>: <restoreNamespace>
其餘參數無需設定,保持預設配置即可。
參數
是否必選
說明
csdr.alibabacloud.com/backuplocations
是
備份所在的備份倉庫資訊,需與備份倉庫的配置一致。
name
是
恢複任務的名稱。
appRestoreOnly
否
對於備份了儲存卷的備份,是否僅恢複應用,不恢複儲存聲明、儲存卷及其對應的資料,取值:
true:僅恢複應用。如果您需要更改備份應用的資料來源,可以先手動建立儲存聲明、儲存卷,然後再建立恢複任務並將該參數設定為true。
false:恢複應用以及相關的儲存資料,預設為false。
preserveNodePorts
否
是否保持應用的NodePort連接埠。當備份組群與恢複叢集相同時,預設為false,將隨機修改連接埠值,避免與已有的同類應用衝突。否則設定為true。
includedNamespaces
是
指定恢複的命名空間名稱。設定為空白時,表示恢複所有已備份的命名空間。
includedResources
否
指定待恢複的叢集資源類型。
重要為避免非預期備份結果,includedResources和excludedResources您只需配置一項。均為空白時,表示恢複所有已備份的資源類型。
excludedResources
否
排除待恢複的叢集資源類型。
重要為避免非預期備份結果,includedResources和excludedResources您只需配置一項。均為空白時,表示恢複所有已備份的資源類型。
backupName
是
待恢複的備份名稱。使用定期備份功能時,需要指定為某個時間點建立的備份名稱,例如<yourBackupScheduleName>-20221205225845。
namespaceMapping
否
重定義命名空間。取值:
<backupNamespace>:建立備份任務時指定的備份組群命名空間。
<restoreNamespace>:根據備份建立的資源在恢複叢集的所在命名空間。若不設定,則預設在同名命名空間中恢複。
說明若<restoreNamespace>不存在,將建立新的命名空間。
convertedarg
否
轉換儲存類列表。備份中的FileSystem資料類型的儲存卷(OSS、NAS、CPFS、本機存放區等)的儲存聲明,在當前叢集中恢複為目標儲存類,實現例如NAS儲存至雲端硬碟儲存的轉換。
convertToStorageClassType:目標儲存類,需要在當前叢集已存在。目前的版本僅支援選擇雲端硬碟或NAS類型的儲存類。
namespace:儲存聲明所在的命名空間。
persistentVolumeClaim:儲存聲明名稱。
您可以通過
kubectl -ncsdr describe <backup-name>
查詢備份的儲存聲明資訊,在輸出的status.resourceList.dataResource.pvcBackupInfo
列表中dataType欄位為資料類型,分為FileSystem與Snapshot,nameSpace與pvcName分別為儲存聲明所在的命名空間與儲存聲明名稱。重要對於ReadWriteMany類型的儲存卷,暫不支援恢複為雲端硬碟類型;對於ReadOnlyMany類型的儲存卷,恢複為雲端硬碟類型時,需由業務保證不會被多個節點上的副本同時掛載,造成強制拔盤。
在恢複叢集中執行以下命令,部署applicationrestore對象。
kubectl apply -f applicationrestore.yaml
在恢複叢集中執行以下命令,查看恢複任務的狀態。
kubectl describe applicationrestore <yourApplicationRestoreName> -n csdr
預期輸出:
... Status: Completion Timestamp: 2022-12-05T15:52:19Z Phase: Completed Start Timestamp: 2022-12-05T15:52:09Z
當恢複任務由
Inprogress
轉為Completed
狀態,說明恢複任務建立成功。
步驟四:刪除叢集備份中心的相關資源
由於您已建立的備份倉庫可能正在被其他叢集使用,所以備份中心不支援備份倉庫BackupLocation資源的刪除。
刪除定時備份計劃
執行以下命令,刪除定時備份計劃BackupSchedule資源,停止定時備份。
kubectl delete backupschedule <yourBackupSchedule> - ncsdr
刪除備份任務或恢複任務
使用以下內容,在待刪除任務的叢集中建立deleterequest.yaml檔案。
apiVersion: csdr.alibabacloud.com/v1beta1 kind: DeleteRequest metadata: name: <objectName-dbr> namespace: csdr spec: deleteObjectName: <objectName> deleteObjectType: "Backup"
其餘參數無需設定,保持預設配置即可。
參數
是否必選
說明
name
是
刪除請求的名稱。
刪除備份任務時:待刪除的備份任務ApplicationBackup的名稱+“-dbr”。
刪除恢複任務時:待刪除的恢複任務ApplicationRestore的名稱+“-dbr”。
deleteObjectName
是
待刪除的資源名稱。
deleteObjectType
是
待刪除的資源類型。取值:
"Backup":刪除備份任務ApplicationBackup及配套資源。
"Restore":刪除恢複任務ApplicationRestore及配套資源。
說明刪除備份任務不會影響已同步到叢集中的副本。
刪除恢複任務不會影響已恢複的內容。
在待刪除任務的叢集中執行以下命令,部署deleterequest刪除請求。
kubectl apply -f deleterequest.yaml
使用以下命令,查看資源狀態。
查看刪除的備份任務
執行以下命令,查看刪除備份任務的狀態。
kubectl get applicationbackup <yourApplicationBackupName> -n csdr
預期輸出:
Error from server (NotFound): applicationbackups.csdr.alibabacloud.com "yourApplicationBackupName" not found
由預期輸出可看到,備份任務資源已被刪除。
執行以下命令,查看刪除請求資源的狀態。
kubectl get deleterequest <yourApplicationBackupName-dbr> -n csdr
預期輸出:
Error from server (NotFound): deleterequests.csdr.alibabacloud.com "yourApplicationBackupName-dbr" not found
由預期輸出可看到,除備份任務資源被刪除外,刪除請求的相關資源也自動被刪除。
查看刪除的恢複任務
執行以下命令,查看刪除備份任務的狀態。
kubectl get applicationrestore <yourApplicationRestoreName> -n csdr
預期輸出:
Error from server (NotFound): applicationrestores.csdr.alibabacloud.com "yourApplicationRestoreName" not found
由預期輸出可看到,恢複任務資源已被刪除。
執行以下命令,查看刪除請求資源的狀態。
kubectl get deleterequest <yourApplicationRestoreName-dbr> -n csdr
預期輸出:
Error from server (NotFound): deleterequests.csdr.alibabacloud.com "yourApplicationRestoreName-dbr" not found
由預期輸出可看到,除恢複任務資源被刪除外,刪除請求的相關資源也自動被刪除。
相關文檔
如果需要通過控制台實現叢集應用的備份遷移,請根據實際需求參見如下文檔:
如果需要實現跨儲存外掛程式、跨版本叢集間的應用遷移,請參見通過備份中心實現低版本Kubernetes叢集應用遷移。