すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:kubectl を使用したアプリケーションのバックアップとリストア

最終更新日:Oct 11, 2026

権限制限により Container Service for Kubernetes (ACK) コンソールからバックアップセンターにアクセスできない場合、またはディザスタリカバリを自動化する必要がある場合は、代わりに kubectl を使用してください。バックアップクラスターとリストアクラスターに BackupLocation、ApplicationBackup、BackupSchedule、ApplicationRestore、DeleteRequest カスタムリソース (CR) をデプロイすることで、クラスター間でアプリケーションを移行できます。

前提条件

次の条件を満たしていることを確認してください。

  • migrate-controller アドオンがインストールされ、必要な権限が設定されていること。

注意事項

  • migrate-controller を最新の状態に保つこと。詳細については、「コンポーネント」をご参照ください。

  • バックアップおよびリストアジョブの削除には DeleteRequest を使用すること。kubectl delete では関連するバックアップデータは削除されません。代わりに DeleteRequest CR を使用してください。詳細については、「ステップ 4: バックアップおよびリストアリソースの削除」をご参照ください。

  • サンプル YAML ファイルからパラメーターを削除しないこと。必須フィールドを削除すると、バックアップおよびリストアが失敗します。

  • BackupLocation リソースは、リポジトリがクラスター間で共有される可能性があるため、バックアップセンターから削除できません。

ステップ 1: バックアップリポジトリの作成

バックアップリポジトリ (BackupLocation) は、バックアップデータを保存する Object Storage Service (OSS) バケットを定義します。バックアップクラスターとリストアクラスターの両方に同じ BackupLocation を作成することで、同じデータを共有できます。

  1. 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

    その他のパラメーターは設定不要です。デフォルト値のままにしてください。

  2. 両方のクラスターにマニフェストを適用します。

    kubectl apply -f backuplocation.yaml
  3. 各クラスターでリポジトリが利用可能であることを確認します。

    kubectl describe backuplocation <your-backup-repository-name> -n csdr

    Phase が Available を示している場合、リポジトリは準備完了です。

    ...
    Status:
      Last Validation Time:  2022-12-08T04:00:22Z
      Message:               success by csdr-controller
      Phase:                 Available

    Available は、クラスターが OSS バケットにアクセスできることを示します。

ステップ 2: バックアップジョブの作成

バックアップセンターは 2 つのバックアップタイプをサポートしています。

  • アプリケーションバックアップ:Kubernetes リソース (StatefulSet や Deployment など) を PersistentVolume (PV) と共にバックアップします。

  • データ保護:アプリケーションリソースを含まず、ボリュームデータのみをバックアップします。バックアップされるリソースは PersistentVolumeClaim (PVC) と PV に限定されます。

詳細については、「アプリケーションバックアップとデータ保護のシナリオ」をご参照ください。

各タイプは、オンデマンドバックアップとスケジュールバックアップをサポートしています。

アプリケーションバックアップ

オンデマンドバックアップ

  1. バックアップクラスターに 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。
                                 # 保持期間が経過すると、バックアップデータは
                                 # リストアできなくなります。

    その他のパラメーターは設定不要です。デフォルト値のままにしてください。

  2. バックアップクラスターにマニフェストを適用します。

    kubectl apply -f applicationbackup.yaml
  3. バックアップステータスを確認します。

    kubectl describe applicationbackup <your-application-backup-name> -n csdr

    Phase が Inprogress から Completed に変わると、バックアップは完了です。

    ...
    Status:
      Completion Timestamp:  2022-12-05T15:02:35Z
      Expiration:            2023-01-04T15:02:25Z
      Message:               success
      Phase:                 Completed

スケジュールバックアップ

  1. バックアップクラスターに 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。
                                   # 保持期間が経過すると、バックアップデータは
                                   # リストアできなくなります。

    その他のパラメーターは設定不要です。デフォルト値のままにしてください。

    詳細については、「バックアップスケジュールの指定方法」をご参照ください。

  2. バックアップクラスターにマニフェストを適用します。

    kubectl apply -f backupschedule.yaml
  3. スケジュールがアクティブであることを確認します。

    kubectl describe backupschedule <your-backup-schedule-name> -n csdr

    Phase が Enabled を示している場合、スケジュールは実行中です。

    ...
    Status:
      Last Backup:          2022-12-07T20:01:11Z
      Last Processed Time:  2022-12-08T13:05:37Z
      Phase:                Enabled
  4. スケジュールによって作成されたポイントインタイムバックアップを一覧表示します。

    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 (固定値) を使用します。

オンデマンドバックアップ

  1. バックアップクラスターに 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。
                       # 保持期間が経過すると、バックアップデータは
                       # リストアできなくなります。
  2. バックアップクラスターにマニフェストを適用します。

    kubectl apply -f applicationbackup.yaml
  3. バックアップステータスを確認します。

    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

スケジュールバックアップ

  1. バックアップクラスターに 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。
                               # 保持期間が経過すると、バックアップデータは
                               # リストアできなくなります。
  2. バックアップクラスターにマニフェストを適用します。

    kubectl apply -f backupschedule.yaml
  3. スケジュールがアクティブであることを確認します。

    kubectl describe backupschedule <your-backup-schedule-name> -n csdr

    アクティブな場合の出力例:

    ...
    Status:
      Last Backup:  2025-03-25T09:24:38Z
      Phase:        Enabled

ステップ 3: リストアタスクの作成

  1. リストアクラスターに 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

    その他のパラメーターは設定不要です。デフォルト値のままにしてください。

  2. リストアクラスターにマニフェストを適用します。

    kubectl apply -f applicationrestore.yaml
  3. リストアステータスを確認します。

    kubectl describe applicationrestore <your-application-restore-name> -n csdr

    Phase が 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

バックアップジョブまたはリストアタスクの削除

  1. リソースが存在するクラスターに 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 タスクとその
                                               # 関連リソースを削除します

    その他のパラメーターは設定不要です。デフォルト値のままにしてください。

  2. 削除リクエストを適用します。

    kubectl apply -f deleterequest.yaml
  3. 削除を確認します。ターゲットリソースと DeleteRequest CR の両方が自動的に削除されます。バックアップジョブの場合:

    kubectl get applicationbackup <your-application-backup-name> -n csdr

    出力例:

    Error from server (NotFound): applicationbackups.csdr.alibabacloud.com "your-application-backup-name" not found
    kubectl 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 found
    kubectl get deleterequest <your-application-restore-name>-dbr -n csdr

    出力例:

    Error from server (NotFound): deleterequests.csdr.alibabacloud.com "your-application-restore-name-dbr" not found

次のステップ