BackupLocation、ApplicationBackup、BackupSchedule、ApplicationRestore、および DeleteRequest カスタムリソース (CR) を kubectl でデプロイして、バックアップおよび復元操作を直接管理します。
前提条件
次のことを確認します。
migrate-controller アドオンがインストールされ、必要な権限が設定されていること。
注意事項
migrate-controller を最新の状態に保ってください。 古いバージョンは予期しない動作を引き起こす可能性があります。詳細については、「コンポーネントの管理」をご参照ください。
バックアップおよび復元ジョブを削除するには、DeleteRequest を使用します。
kubectl deleteでは、関連付けられたバックアップデータは削除されません。代わりにDeleteRequestCR を使用してください。「手順 4: バックアップおよび復元リソースの削除」をご参照ください。YAML 設定例からパラメーターを削除しないでください。 必須フィールドを削除すると、バックアップとリストアが失敗します。
リポジトリがクラスター間で共有される可能性があるため、
BackupLocationリソースを Backup Center から削除することはできません。
ステップ 1: バックアップリポジトリの作成
バックアップリポジトリ (BackupLocation) は、バックアップデータを格納する OSS バケットを定義します。同じデータを共有できるように、バックアップクラスターと復元クラスターの両方に同じ BackupLocation を作成してください。
backuplocation.yamlを作成します:apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupLocation metadata: name: <your-backup-location-name> # Kubernetes の命名規則に従う必要があります namespace: csdr spec: backupSyncPeriod: 0s config: network: internal # internal: クラスターとバケットが同じリージョンにある必要があります # public: リージョンの制限はありません region: cn-beijing # OSS バケットが配置されているリージョン objectStorage: bucket: <cnfs-oss-your-bucket-name> # cnfs-oss- で始まる必要があります。事前に作成してください prefix: <your-subdirectory-name> # オプション: バックアップをこのサブディレクトリに格納します provider: alibabacloud両方のクラスターにマニフェストを適用します。
kubectl apply -f backuplocation.yaml各クラスターでリポジトリが利用可能であることを確認します。
kubectl describe backuplocation <your-backup-location-name> -n csdrリポジトリは、
PhaseがAvailableと表示されると準備完了です:... Status: Last Validation Time: 2022-12-08T04:00:22Z Message: success by csdr-controller Phase: AvailableAvailableは、クラスターが OSS バケットにアクセス可能であることを示します。
ステップ 2: バックアップジョブの作成
バックアップセンターは 2 種類のバックアップをサポートしています。
アプリケーションのバックアップ:Kubernetes リソース (StatefulSet や Deployment など) を永続ボリューム (PV) とともにバックアップします。
データ保護:アプリケーションリソースを含まず、PV のみをバックアップします。
詳細については、「アプリケーションのバックアップとデータ保護のシナリオ」をご参照ください。
各タイプは、オンデマンドバックアップと定期バックアップをサポートしています。
アプリケーションのバックアップ
オンデマンドバックアップ
バックアップクラスターに
applicationbackup.yamlを作成します:重要includedResourcesとexcludedResourcesは、どちらか一方のみを設定してください。両方が空の場合、すべてのリソースタイプがバックアップされます。コンソールで作成されたバックアップジョブでは、
includeClusterResourcesはデフォルトでfalseになります。apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationBackup metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-application-backup-name> namespace: csdr spec: includedNamespaces: - default # バックアップに含める名前空間 includedResources: - statefulset # 含めるリソースタイプ (includedResources または excludedResources: # excludedResources のいずれか一方のみを設定してください。両方が - deployment # 空の場合、すべてのリソースタイプがバックアップされます) labelSelector: matchLabels: app: mysql-sts # このラベルを持つリソースのみがバックアップされます includeClusterResources: false # false: 選択された名前空間リソースによって参照される # クラスターレベルのリソース (例: ClusterRole、CRD) のみがバックアップされます # true: すべてのクラスターレベルのリソースがバックアップされます pvBackup: defaultPvBackup: false # false: アプリケーションリソースのみをバックアップします # true: アプリケーションリソースと PV をバックアップします storageLocation: <your-backup-repository-name> # 注: クラスターで既に Velero を使用している場合は、 # DingTalk ユーザーグループ (グループ番号: 35532895) に参加してサポートを依頼してください。 ttl: 720h0m0s # 保持期間。範囲: 24h0m0s から 1572864h0m0sバックアップクラスターにマニフェストを適用します。
kubectl apply -f applicationbackup.yamlバックアップステータスを確認します。
kubectl describe applicationbackup <your-application-backup-name> -n csdrPhaseがInprogressからCompletedに変わると、バックアップは完了です:... Status: Completion Timestamp: 2022-12-05T15:02:35Z Expiration: 2023-01-04T15:02:25Z Message: success Phase: Completed
定期バックアップ
バックアップクラスターに
backupschedule.yamlを作成します:apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupSchedule metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-backup-schedule-name> namespace: csdr spec: schedule: 1 4 * * * # Cron 式: # ┌── 分 (0–59) # │ ┌── 時 (0–23) # │ │ ┌── 日 (1–31) # │ │ │ ┌── 月 (1–12) # │ │ │ │ ┌── 曜日 (0–6、日曜日=0) # │ │ │ │ │ # 1 4 * * * → 毎日 04:01 に実行 # Cron 式の他の例については、「バックアップスケジュールの指定方法」をご参照ください。 template: includedNamespaces: - default includedResources: - statefulset excludedResources: - deployment labelSelector: matchLabels: app: mysql-sts includeClusterResources: false pvBackup: defaultPvBackup: true # 定期バックアップに必須。true: アプリ + PV をバックアップします storageLocation: <your-backup-repository-name> # 注: クラスターで既に Velero を使用している場合は、 # DingTalk ユーザーグループ (グループ番号: 35532895) に参加してサポートを依頼してください。 ttl: 720h0m0s詳細については、「バックアップスケジュールの指定方法」をご参照ください。
バックアップクラスターにマニフェストを適用します。
kubectl apply -f backupschedule.yamlスケジュールがアクティブであることを確認します。
kubectl describe backupschedule <your-backup-schedule-name> -n csdrPhaseがEnabledの場合、スケジュールは実行中です。... Status: Last Backup: 2022-12-07T20:01:11Z Last Processed Time: 2022-12-08T13:05:37Z Phase: Enabledスケジュールによって作成されたポイントインタイムバックアップを一覧表示します。
kubectl get applicationbackup -n csdr | grep <your-backup-schedule-name>スケジュールされた各実行は、タイムスタンプ付きの
ApplicationBackupリソースを作成します:<your-backup-schedule-name>-20221205225845 2d22h <your-backup-schedule-name>-20221206040104 2d17h <your-backup-schedule-name>-20221207040137 41h <your-backup-schedule-name>-20221208040111 17hリストアタスクを作成するためにこれらの名前が必要になるため、メモしておいてください。
データ保護
Data Protection は PV のみをバックアップします。kind: ApplicationBackup と backupType: PvBackup (固定値) を使用します。
オンデマンドバックアップ
バックアップクラスターに
applicationbackup.yamlを作成します:重要pvcListとstorageClassListの両方が指定されている場合、storageClassListは無視されます。どちらも指定されていない場合、指定された名前空間内のすべての PV がバックアップされます。apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationBackup metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-application-backup-name> namespace: csdr spec: backupType: PvBackup # データ保護の固定値 includedNamespaces: - default pvBackup: # オプション 1: PVC を名前で指定 pvcList: - name: essd-pvc-0 namespace: default - name: essd-pvc-1 namespace: default # オプション 2: PVC をストレージクラスで指定 (pvcList も設定されている場合は無視されます) storageClassList: - disk-essd - disk-ssd # pvcList も storageClassList も設定されていない場合、名前空間内のすべての PV がバックアップされます。 storageLocation: <your-backup-repository-name> # 注: クラスターで既に Velero を使用している場合は、 # DingTalk ユーザーグループ (グループ番号: 35532895) に参加してサポートを依頼してください。 ttl: 720h0m0sバックアップクラスターにマニフェストを適用します。
kubectl apply -f applicationbackup.yamlバックアップステータスを確認します。
kubectl describe applicationbackup <your-application-backup-name> -n csdr完了時の期待される出力:
... Status: Completion Timestamp: 2025-03-25T08:20:24Z Expiration: 2025-04-24T08:18:03Z Message: success Phase: Completed
定期バックアップ
バックアップクラスターに
backupschedule.yamlを作成します:apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupSchedule metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-backup-schedule-name> namespace: csdr spec: schedule: 1 4 * * * template: backupType: PvBackup # データ保護の固定値 includedNamespaces: - default pvBackup: pvcList: - name: essd-pvc-0 namespace: default - name: essd-pvc-1 namespace: default storageClassList: - disk-essd - disk-ssd storageLocation: <your-backup-repository-name> ttl: 720h0m0sバックアップクラスターにマニフェストを適用します。
kubectl apply -f backupschedule.yamlスケジュールがアクティブであることを確認します。
kubectl describe backupschedule <your-backup-schedule-name> -n csdrアクティブ時の期待される出力:
... Status: Last Backup: 2025-03-25T09:24:38Z Phase: Enabled
ステップ 3: リストアタスクの作成
復元クラスターに
applicationrestore.yamlを作成します:appRestoreOnly、preserveNodePorts、includedResources、およびexcludedResourcesは、アプリケーションバックアップにのみ適用され、データ保護では無視されます。PVC 名とデータタイプを検索するには、
kubectl -ncsdr describe <backup-name>を実行し、status.resourceList.dataResource.pvcBackupInfoを確認します。dataTypeはFileSystemまたはSnapshotを示し、nameSpaceとpvcNameで PVC を特定します。apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationRestore metadata: annotations: csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<your-oss-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-application-restore-name> namespace: csdr spec: backupName: <your-application-backup-name> # 定期バックアップの場合、ポイントインタイム名を指定します。 # 例: # <your-backup-schedule-name>-20221205225845 includedNamespaces: - default # リストアする名前空間。すべての名前空間をリストアする場合は空白のままにします appRestoreOnly: false # アプリケーションのバックアップのみ。データ保護では無視されます # false (デフォルト): アプリケーションリソースと PV データをリストアします # true: アプリケーションリソースのみをリストアします (リストア前に手動で # PVC を事前作成する場合に使用します) preserveNodePorts: true # アプリケーションのバックアップのみ。データ保護では無視されます # false: ランダムな NodePort 値を割り当てます (ポートの競合を避けるために # 同じクラスターにリストアする場合に使用します) # true: 元の NodePort 値を保持します (別の # クラスターにリストアする場合に使用します) includedResources: - statefulset # アプリケーションのバックアップのみ。リストアするリソースタイプ excludedResources: - secret # アプリケーションのバックアップのみ。スキップするリソースタイプ namespaceMapping: <source-namespace>: <target-namespace> # リストア中に名前空間を再マッピングします。 # ターゲットの名前空間が存在しない場合は # 作成されます imageRegistryMapping: <old-image-registry>: <new-image-registry> # アドレスがソースプレフィックスで始まる # すべてのイメージのイメージレジストリを # 再マッピングします convertedarg: # ファイルシステムタイプのボリューム (OSS、File Storage NAS (NAS)、 # Cloud Parallel File Storage (CPFS)、またはローカルストレージ) から、 # クラウドディスクまたは File Storage NAS の StorageClass への変換 - convertToStorageClassType: alicloud-disk-topology-alltype # ターゲットの StorageClass # (クラスター内に存在する必要があります) convertToAccessModes: - ReadWriteOnce # ReadWriteMany または ReadOnlyMany アクセスモードを持つ PV を # クラウドディスクの StorageClass に変換する場合に必須です namespace: nas persistentVolumeClaim: pvc-nas - convertToStorageClassType: alicloud-disk-topology-alltype namespace: oss persistentVolumeClaim: pvc-ossリストアクラスターにマニフェストを適用します。
kubectl apply -f applicationrestore.yamlリストアステータスを確認します。
kubectl describe applicationrestore <your-application-restore-name> -n csdrPhaseがInprogressからCompletedに変わると、復元は完了です:... Status: Completion Timestamp: 2022-12-05T15:52:19Z Phase: Completed Start Timestamp: 2022-12-05T15:52:09Z
ステップ 4: バックアップおよびリストアリソースの削除
kubectl delete を使用して ApplicationBackup または ApplicationRestore リソースを削除しないでください。kubectl delete は関連データを削除しません。代わりに DeleteRequest CR を使用してください。
定期バックアップ計画の削除
スケジュールを停止して将来のバックアップが実行されないようにするには、BackupSchedule リソースを削除します:
kubectl delete backupschedule <your-backup-schedule-name> -n csdrバックアップジョブまたはリストアタスクの削除
リソースが存在するクラスターに
deleterequest.yamlを作成します:バックアップジョブを削除しても、同期されたレプリカには影響しません。リストアタスクを削除しても、リストアされたリソースには影響しません。
apiVersion: csdr.alibabacloud.com/v1beta1 kind: DeleteRequest metadata: name: <object-name>-dbr # 削除するリソースの名前に -dbr を追加します namespace: csdr spec: deleteObjectName: <object-name> # 削除する ApplicationBackup または # ApplicationRestore リソースの名前 deleteObjectType: "Backup" # "Backup": ApplicationBackup ジョブを削除します # "Restore": ApplicationRestore タスクを削除します削除リクエストを適用します。
kubectl apply -f deleterequest.yaml削除を確認します。ターゲットリソースと
DeleteRequestCR の両方が自動的に削除されます。バックアップジョブの場合:kubectl get applicationbackup <your-application-backup-name> -n csdr期待される出力:
Error from server (NotFound): applicationbackups.csdr.alibabacloud.com "your-application-backup-name" not foundkubectl get deleterequest <your-application-backup-name>-dbr -n csdr期待される出力:
Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-backup-name-dbr" not foundリストアタスクの場合:
kubectl get applicationrestore <your-application-restore-name> -n csdr期待される出力:
Error from server (NotFound): applicationrestores.csdr.alibabacloud.com "your-application-restore-name" not foundkubectl get deleterequest <your-application-restore-name>-dbr -n csdr期待される出力:
Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-restore-name-dbr" not found
次のステップ
kubectlの代わりに ACK コンソールからバックアップを管理するには:「バックアップセンターを使用した旧バージョン Kubernetes クラスターからのアプリケーション移行」をご参照ください。
「Terraform を使用したアプリケーションのバックアップとリストア」をご参照ください。