権限制限により Container Service for Kubernetes (ACK) コンソールからバックアップセンターにアクセスできない場合、またはディザスタリカバリを自動化する必要がある場合は、代わりに kubectl を使用してください。バックアップクラスターとリストアクラスターに BackupLocation、ApplicationBackup、BackupSchedule、ApplicationRestore、DeleteRequest カスタムリソース (CR) をデプロイすることで、クラスター間でアプリケーションを移行できます。
前提条件
次の条件を満たしていることを確認してください。
-
migrate-controller アドオンがインストールされ、必要な権限が設定されていること。
注意事項
-
migrate-controller を最新の状態に保つこと。詳細については、「コンポーネント」をご参照ください。
-
バックアップおよびリストアジョブの削除には DeleteRequest を使用すること。
kubectl deleteでは関連するバックアップデータは削除されません。代わりにDeleteRequestCR を使用してください。詳細については、「ステップ 4: バックアップおよびリストアリソースの削除」をご参照ください。 -
サンプル YAML ファイルからパラメーターを削除しないこと。必須フィールドを削除すると、バックアップおよびリストアが失敗します。
-
BackupLocationリソースは、リポジトリがクラスター間で共有される可能性があるため、バックアップセンターから削除できません。
ステップ 1: バックアップリポジトリの作成
バックアップリポジトリ (BackupLocation) は、バックアップデータを保存する Object Storage Service (OSS) バケットを定義します。バックアップクラスターとリストアクラスターの両方に同じ BackupLocation を作成することで、同じデータを共有できます。
-
backuplocation.yamlファイルを作成します。apiVersion: csdr.alibabacloud.com/v1beta1 kind: BackupLocation metadata: name: <your-backup-repository-name> # 必須。Kubernetes の命名規則に従う必要があります namespace: csdr spec: backupSyncPeriod: 0s config: network: internal # 必須。internal:内部ネットワーク経由でアクセス。関連するすべての # クラスターと OSS バケットは同じリージョンに存在する必要があります # 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-repository-name> -n csdrPhaseがAvailableを示している場合、リポジトリは準備完了です。... Status: Last Validation Time: 2022-12-08T04:00:22Z Message: success by csdr-controller Phase: AvailableAvailableは、クラスターが OSS バケットにアクセスできることを示します。
ステップ 2: バックアップジョブの作成
バックアップセンターは 2 つのバックアップタイプをサポートしています。
-
アプリケーションバックアップ:Kubernetes リソース (StatefulSet や Deployment など) を PersistentVolume (PV) と共にバックアップします。
-
データ保護:アプリケーションリソースを含まず、ボリュームデータのみをバックアップします。バックアップされるリソースは PersistentVolumeClaim (PVC) と 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":"<cnfs-oss-your-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-application-backup-name> # 必須。オンデマンドバックアップの名前 namespace: csdr spec: includedNamespaces: - default # 必須。バックアップに含める名前空間 includedResources: - statefulset # オプション。バックアップするリソースタイプ excludedResources: # オプション。includedResources と一緒に設定すると - deployment # 予期しない結果が生じます。いずれか一方のみを設定してください。 # 両方が空の場合、すべてのリソースタイプがバックアップされます。 labelSelector: matchLabels: app: mysql-sts # オプション。このラベルを持つリソースのみがバックアップされます includeClusterResources: false # オプション。false:選択された名前空間のリソースから参照される # クラスターレベルのリソースのみがバックアップされます # (ClusterRole や CRD など) # true:すべてのクラスターレベルのリソースがバックアップされます pvBackup: defaultPvBackup: false # 必須。PV をバックアップするかどうか、つまり # データバックアップを有効にするかどうか: # 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":"<cnfs-oss-your-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: # オプション。includedResources と一緒に設定すると - deployment # 予期しない結果が生じます。いずれか一方のみを設定してください。 # 両方が空の場合、すべてのリソースタイプがバックアップされます。 labelSelector: matchLabels: app: mysql-sts # オプション。このラベルを持つリソースのみがバックアップされます includeClusterResources: false # オプション pvBackup: defaultPvBackup: true # 必須。PV をバックアップするかどうか、つまり # データバックアップを有効にするかどうか: # true:アプリケーションリソースと PV をバックアップ # false:アプリケーションリソースのみをバックアップ storageLocation: <your-backup-repository-name> # 必須。バックアップリポジトリの名前。 # 注意:クラスターがすでに Velero を使用している場合は、 # DingTalk ユーザーグループ (グループ番号:35532895) にご参加ください。 ttl: 720h0m0s # 必須。保持期間。範囲:24h0m0s から 1572864h0m0s。 # 保持期間が経過すると、バックアップデータは # リストアできなくなります。その他のパラメーターは設定不要です。デフォルト値のままにしてください。
詳細については、「バックアップスケジュールの指定方法」をご参照ください。
-
バックアップクラスターにマニフェストを適用します。
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これらの名前を記録してください。リストアタスクを作成する際に必要になります。
データ保護
データ保護は、ボリュームデータ (PVC と 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":"<cnfs-oss-your-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-application-backup-name> # 必須。オンデマンドバックアップの名前 namespace: csdr spec: backupType: PvBackup # 必須。データ保護の固定値 includedNamespaces: - default # 必須。バックアップに含める名前空間 pvBackup: # オプション。オプション 1:PVC 名で PV を指定します。storageClassList も指定した場合、 # storageClassList は無視されます。いずれか一方のみを設定してください。 pvcList: - name: essd-pvc-0 namespace: default - name: essd-pvc-1 namespace: default # オプション。オプション 2:StorageClass で PV を指定します。pvcList も指定した場合、 # このパラメーターは無視されます。いずれか一方のみを設定してください。 storageClassList: - disk-essd - disk-ssd # pvcList も storageClassList も設定されていない場合、名前空間内のすべての 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 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":"<cnfs-oss-your-bucket-name>","prefix":"<your-subdirectory-name>","provider":"alibabacloud"} name: <your-backup-schedule-name> # 必須。スケジュールバックアップ計画の名前 namespace: csdr spec: schedule: 1 4 * * * # 必須。Cron 形式のバックアップ間隔 template: backupType: PvBackup # 必須。データ保護の固定値 includedNamespaces: - default # 必須。バックアップに含める名前空間 pvBackup: # オプション。PVC 名で PV を指定します。storageClassList も指定した場合、 # storageClassList は無視されます。いずれか一方のみを設定してください。 pvcList: - name: essd-pvc-0 namespace: default - name: essd-pvc-1 namespace: default # オプション。StorageClass で PV を指定します。pvcList も指定した場合、 # このパラメーターは無視されます。いずれか一方のみを設定してください。 storageClassList: - disk-essd - disk-ssd storageLocation: <your-backup-repository-name> # 必須。バックアップリポジトリ名 ttl: 720h0m0s # 必須。保持期間。範囲:24h0m0s から 1572864h0m0s。 # 保持期間が経過すると、バックアップデータは # リストアできなくなります。 -
バックアップクラスターにマニフェストを適用します。
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 describe applicationbackup <your-application-backup-name> -n csdrを実行し、status.resourceList.dataResource.pvcBackupInfoを確認してください。dataTypeにはFileSystemまたはSnapshotが表示されます。nameSpaceとpvcNameで PVC を識別します。convertedargでは、convertToStorageClassType、namespace、persistentVolumeClaimが必須です。namespaceは PersistentVolumeClaim の名前空間、persistentVolumeClaimはその名前です。convertToAccessModesは、任意で指定するターゲットアクセスモードのリストです。重要予期しないリストア結果を避けるため、
includedResourcesとexcludedResourcesのいずれか一方のみを設定してください。両方が空の場合、バックアップされたすべてのリソースタイプがリストアされます。apiVersion: csdr.alibabacloud.com/v1beta1 kind: ApplicationRestore metadata: annotations: # 必須。このバックアップを保存するバックアップリポジトリに関する情報。 # 値はバックアップリポジトリの設定と一致する必要があります。 csdr.alibabacloud.com/backuplocations: >- {"name":"<your-backup-repository-name>","region":"cn-beijing","bucket":"<cnfs-oss-your-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 # オプション。アプリケーションバックアップのみ。データ保護では無視されます。 # PV データを含むバックアップの場合、PVC、PV、およびそれらのデータなしで # アプリケーションのみをリストアするかどうかを指定します: # false (デフォルト):アプリケーションリソースと PV データをリストア # true:アプリケーションリソースのみをリストア。リストアされた # アプリケーションのデータソースを変更するには、事前に PVC と PV を # 作成し、このパラメーターを true に設定します。 preserveNodePorts: true # オプション。アプリケーションの NodePort を保持するかどうか。 # バックアップクラスターとリストアクラスターが同じ場合、 # デフォルトは false です。 # false:ランダムな NodePort 値を割り当てて、同じタイプの # 既存のアプリケーションとの競合を回避します # true:元の NodePort 値を保持します (別のクラスターに # リストアする場合に使用) includedResources: - statefulset # オプション。アプリケーションバックアップのみ。リストアするリソースタイプ excludedResources: - secret # オプション。アプリケーションバックアップのみ。スキップするリソースタイプ namespaceMapping: <source-namespace>: <target-namespace> # オプション。リストア中に名前空間を再マッピングします。 # ターゲット名前空間が存在しない場合は作成されます imageRegistryMapping: <old-image-registry>: <new-image-registry> # オプション。ソースアドレスで始まるすべての # アプリケーションイメージのイメージレジストリを # 再マッピングします。キーはレジストリプレフィックスで、 # 完全なイメージパスではありません。例えば、 # registry.cn-beijing.aliyuncs.com/my-registry/ # を registry.cn-hangzhou.aliyuncs.com/my-registry/ # にマッピングして、nginx:v1 を北京から杭州に # リストアします。設定されていない場合、 # アプリケーション内のイメージ設定は変更されません。 convertedarg: # オプション。ファイルシステムタイプのボリュームの StorageClass 変換。 # ソースボリュームタイプには、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 # 必須。PVC の名前空間 persistentVolumeClaim: pvc-nas # 必須。PVC の名前 - 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 バージョン間でアプリケーションを移行するには、「バックアップセンターを使用した旧バージョン Kubernetes クラスターからのアプリケーション移行」をご参照ください。
-
「Terraform を使用したアプリケーションのバックアップとリストア」をご参照ください。