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

Container Service for Kubernetes:Back up and restore cluster applications with kubectl

最終更新日:Jun 16, 2026

BackupLocationApplicationBackupBackupScheduleApplicationRestore、および DeleteRequest カスタムリソース (CR) を kubectl でデプロイして、バックアップおよび復元操作を直接管理します。

前提条件

次のことを確認します。

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

注意事項

  • migrate-controller を最新の状態に保ってください。 古いバージョンは予期しない動作を引き起こす可能性があります。詳細については、「コンポーネントの管理」をご参照ください。

  • バックアップおよび復元ジョブを削除するには、DeleteRequest を使用します。 kubectl delete では、関連付けられたバックアップデータは削除されません。代わりに DeleteRequest CR を使用してください。「手順 4: バックアップおよび復元リソースの削除」をご参照ください。

  • YAML 設定例からパラメーターを削除しないでください。 必須フィールドを削除すると、バックアップとリストアが失敗します。

  • リポジトリがクラスター間で共有される可能性があるため、BackupLocation リソースを Backup Center から削除することはできません。

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

バックアップリポジトリ (BackupLocation) は、バックアップデータを格納する OSS バケットを定義します。同じデータを共有できるように、バックアップクラスターと復元クラスターの両方に同じ BackupLocation を作成してください。

  1. 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
  2. 両方のクラスターにマニフェストを適用します。

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

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

    リポジトリは、PhaseAvailable と表示されると準備完了です:

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

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

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

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

  • アプリケーションのバックアップ:Kubernetes リソース (StatefulSet や Deployment など) を永続ボリューム (PV) とともにバックアップします。

  • データ保護:アプリケーションリソースを含まず、PV のみをバックアップします。

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

各タイプは、オンデマンドバックアップと定期バックアップをサポートしています。

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

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

  1. バックアップクラスターに applicationbackup.yaml を作成します:

    重要

    includedResourcesexcludedResources は、どちらか一方のみを設定してください。両方が空の場合、すべてのリソースタイプがバックアップされます。

    コンソールで作成されたバックアップジョブでは、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
  2. バックアップクラスターにマニフェストを適用します。

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

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

    PhaseInprogress から 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":"<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

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

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

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

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

    PhaseEnabled の場合、スケジュールは実行中です。

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

    リストアタスクを作成するためにこれらの名前が必要になるため、メモしておいてください。

データ保護

Data Protection は PV のみをバックアップします。kind: ApplicationBackupbackupType: PvBackup (固定値) を使用します。

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

  1. バックアップクラスターに applicationbackup.yaml を作成します:

    重要

    pvcListstorageClassList の両方が指定されている場合、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
  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":"<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
  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 を作成します:

    appRestoreOnlypreserveNodePortsincludedResources、およびexcludedResourcesは、アプリケーションバックアップにのみ適用され、データ保護では無視されます。
    PVC 名とデータタイプを検索するには、kubectl -ncsdr describe <backup-name> を実行し、status.resourceList.dataResource.pvcBackupInfo を確認します。dataTypeFileSystem または Snapshot を示し、nameSpacepvcName で 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
  2. リストアクラスターにマニフェストを適用します。

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

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

    PhaseInprogress から 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

次のステップ