4.4. バックアップおよび復元

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

Backup カスタムリソース (CR) を作成して、アプリケーションをバックアップします。バックアップ CR の作成 を参照してください。

Backup CR は、Kubernetes リソースや内部イメージのバックアップファイルを S3 オブジェクトストレージ上に作成し、クラウドプロバイダーが OpenShift Data Foundation 4 のようにスナップショットを作成するためにネイティブスナップショット API や Container Storage Interface (CSI) を使用している場合は、永続ボリューム (PV) のスナップショットを作成します。

CSI ボリュームスナップショットの詳細は、CSI ボリュームスナップショット を参照してください。

重要

S3 ストレージ用の CloudStorage API は、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

  • クラウドプロバイダーがネイティブスナップショット API を備えている場合、または CSI スナップショットをサポートしている場合、Backup CR はスナップショットを作成することによって永続ボリューム (PV) をバックアップします。CSI スナップショットの操作の詳細は、CSI スナップショットを使用した永続ボリュームのバックアップ を参照してください。
  • クラウドプロバイダーがスナップショットをサポートしていない場合、またはアプリケーションが NFS データボリューム上にある場合は、Restic を使用してバックアップを作成できます。Restic を使用したアプリケーションのバックアップ を参照してください。
重要

OpenShift API for Data Protection (OADP) は、他のソフトウェアで作成されたボリュームスナップショットのバックアップをサポートしていません。

バックアップ操作の前または後にコマンドを実行するためのバックアップフックを作成できます。バックアップフックの作成 を参照してください。

Backup CR の代わりに Schedule CR を作成することにより、バックアップをスケジュールできます。バックアップのスケジュール設定 を参照してください。

4.4.1.1. バックアップ CR の作成

Backup カスタムリソース (CR) を作成して、Kubernetes イメージ、内部イメージ、および永続ボリューム (PV) をバックアップします。

前提条件

  • OpenShift API for Data Protection (OADP) Operator をインストールする必要があります。
  • DataProtectionApplication CR は Ready 状態である必要があります。
  • バックアップ場所の前提条件:

    • Velero 用に S3 オブジェクトストレージを設定する必要があります。
    • DataProtectionApplication CR でバックアップの場所を設定する必要があります。
  • スナップショットの場所の前提条件:

    • クラウドプロバイダーには、ネイティブスナップショット API が必要であるか、Container Storage Interface (CSI) スナップショットをサポートしている必要があります。
    • CSI スナップショットの場合、CSI ドライバーを登録するために VolumeSnapshotClass CR を作成する必要があります。
    • DataProtectionApplication CR でボリュームの場所を設定する必要があります。

手順

  1. 次のコマンドを入力して、backupStorageLocations CR を取得します。

    $ oc get backupStorageLocations -n openshift-adp

    出力例

    NAMESPACE       NAME              PHASE       LAST VALIDATED   AGE   DEFAULT
    openshift-adp   velero-sample-1   Available   11s              31m

  2. 次の例のように、Backup CR を作成します。

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup>
      labels:
        velero.io/storage-location: default
      namespace: openshift-adp
    spec:
      hooks: {}
      includedNamespaces:
      - <namespace> 1
      includedResources: [] 2
      excludedResources: [] 3
      storageLocation: <velero-sample-1> 4
      ttl: 720h0m0s
      labelSelector: 5
        matchLabels:
          app=<label_1>
          app=<label_2>
          app=<label_3>
      orLabelSelectors: 6
      - matchLabels:
          app=<label_1>
          app=<label_2>
          app=<label_3>
    1
    バックアップする namespace の配列を指定します。
    2
    オプション: バックアップに含めるリソースの配列を指定します。リソースは、ショートカット (Pods は po など) または完全修飾の場合があります。指定しない場合、すべてのリソースが含まれます。
    3
    オプション: バックアップから除外するリソースの配列を指定します。リソースは、ショートカット (Pods は po など) または完全修飾の場合があります。
    4
    backupStorageLocations CR の名前を指定します。
    5
    指定したラベルを すべて 持つバックアップリソースの {key,value} ペアのマップ。
    6
    指定したラベルを 1 つ以上 持つバックアップリソースの {key,value} ペアのマップ。
  3. Backup CR のステータスが Completed したことを確認します。

    $ oc get backup -n openshift-adp <backup> -o jsonpath='{.status.phase}'

4.4.1.2. CSI スナップショットを使用した永続ボリュームのバックアップ

Backup CR を作成する前に、クラウドストレージの VolumeSnapshotClass カスタムリソース (CR) を編集して、Container Storage Interface (CSI) スナップショットを使用して永続ボリュームをバックアップします。

前提条件

  • クラウドプロバイダーは、CSI スナップショットをサポートする必要があります。
  • DataProtectionApplication CR で CSI を有効にする必要があります。

手順

  • metadata.labels.velero.io/csi-volumesnapshot-class: "true" のキー: 値ペアを VolumeSnapshotClass CR に追加します。

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: <volume_snapshot_class_name>
      labels:
        velero.io/csi-volumesnapshot-class: "true"
    driver: <csi_driver>
    deletionPolicy: Retain

これで、Backup CR を作成できます。

4.4.1.3. Restic を使用したアプリケーションのバックアップ

Backup カスタムリソース (CR) を編集して、Restic を使用して Kubernetes リソース、内部イメージ、および永続ボリュームをバックアップします。

DataProtectionApplication CR でスナップショットの場所を指定する必要はありません。

重要

Restic は、hostPath ボリュームのバックアップをサポートしません。詳細は、Restic のその他の制限事項 を参照してください。

前提条件

  • OpenShift API for Data Protection (OADP) Operator をインストールする必要があります。
  • DataProtectionApplication CR で spec.configuration.restic.enablefalse に設定して、デフォルトの Restic インストールを無効にしないでください。
  • DataProtectionApplication CR は Ready 状態である必要があります。

手順

  • 次の例のように、Backup CR を編集します。

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup>
      labels:
        velero.io/storage-location: default
      namespace: openshift-adp
    spec:
      defaultVolumesToRestic: true 1
    ...
    1
    defaultVolumesToRestic: truespec ブロックに追加します。

4.4.1.4. CSI スナップショットに Data Mover を使用する

OADP Data Mover を使用すると、Container Storage Interface (CSI) ボリュームスナップショットをリモートオブジェクトストアにバックアップできます。

Data Mover が有効になっている場合、クラスターの障害、誤った削除、破損が発生した場合に、オブジェクトストアから取得した CSI ボリュームスナップショットを使用してステートフルアプリケーションを復元できます。

Data Mover ソリューションは、VolSync の Restic オプションを使用します。

Data Mover は、CSI ボリュームスナップショットのバックアップとリストアのみをサポートします。

OADP 1.2 Data Mover では、VolumeSnapshotBackups (VSB) および VolumeSnapshotRestore (VSR) は、VolumeSnapshotMover (VSM) を使用してキューに入れられます。VSM のパフォーマンスは、同時に InProgress で VSB と VSR の同時数を指定することで向上します。すべての非同期プラグイン操作が完了すると、バックアップは完了としてマークされます。

注記

OADP 1.1 Data Mover はテクノロジープレビュー機能です。

OADP 1.2 Data Mover は機能とパフォーマンスが大幅に向上していますが、まだテクノロジープレビュー機能です。

重要

OADP Data Mover はテクノロジープレビューのみの機能です。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は実稼働環境でこれらを使用することを推奨していません。テクノロジープレビュー機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行いフィードバックを提供していただくことを目的としています。

Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

注記

Red Hat では、ODF CephFS ボリュームのバックアップおよびリストアに OADP 1.2 Data Mover を使用しているお客様には、パフォーマンスを向上させるために OpenShift Container Platform バージョン 4.12 以降をアップグレードまたはインストールすることを推奨します。OADP Data Mover は、OpenShift Container Platform バージョン 4.12 以降の CephFS シャローボリュームを利用できます。これは、私たちのテストに基づくと、バックアップ時間のパフォーマンスを向上させることができます。

前提条件

  • StorageClass および VolumeSnapshotClass カスタムリソース (CR) が CSI をサポートしていることを確認しました。
  • 注釈 snapshot.storage.kubernetes.io/is-default-class: true を持つ volumeSnapshotClass CR が 1 つだけであることを確認しました。

    注記

    OpenShift Container Platform バージョン 4.12 以降では、これが唯一のデフォルト volumeSnapshotClass であることを確認します。

  • VolumeSnapshotClass CR の deletionPolicyRetain に設定されていることを確認しました。
  • 注釈 storageclass.kubernetes.io/is-default-class: true を持つ storageClass CR が 1 つだけであることを確認しました。
  • VolumeSnapshotClass CR にラベル velero.io/csi-volumesnapshot-class: 'true' を含めました。
  • OADP namespace にアノテーション oc annotate --overwrite namespace/openshift-adp volsync.backube/privileged-movers='true' があることを確認しました。

    注記

    OADP 1.1 では、上記の設定は必須です。

    OADP 1.2 では、ほとんどのシナリオで privileged-movers 設定は必要ありません。復元コンテナーの権限は、Volsync コピーに対して適切である必要があります。一部のユーザーシナリオでは、privileged-mover = true 設定で解決する必要がある権限エラーが発生する場合があります。

  • Operator Lifecycle Manager (OLM) を使用して VolSync Operator をインストールしました。

    注記

    OADP Data Mover を使用するには、VolSync Operator が必要です。

  • OLM を使用して OADP Operator をインストールしました。

手順

  1. .yaml ファイルを作成して Restic シークレットを設定します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret_name>
    type: Opaque
    stringData:
    # The repository encryption key
      RESTIC_PASSWORD: my-secure-restic-password
  2. 次の例のような DPA CR を作成します。デフォルトのプラグインには CSI が含まれています。
  3. 上記の手順で得た Restic シークレット名を DPA CR に spec.features.dataMover.credentialName として追加します。この手順が完了していない場合は、デフォルトのシークレット名 dm-credential が使用されます。

    注記

    この DPA には、CSIVSMdefaultPlugins として含まれています。dataMover.enable フラグも含まれています。

    データ保護アプリケーション (DPA) CR の例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: velero-sample
      namespace: openshift-adp
    spec:
      features:
        dataMover:
          enable: true
          credentialName: <secret-name>
          maxConcurrentBackupVolumes: "3" 1
          maxConcurrentRestoreVolumes: "3" 2
          pruneInterval: "14" 3
          volumeOptionsForStorageClasses: 4
            gp2-csi-copy-1:
              destinationVolumeOptions:
                storageClassName: csi-copy-2
              sourceVolumeOptions:
                storageClassName: csi-copy-1
      backupLocations:
        - velero:
            config:
              profile: default
              region: us-east-1
            credential:
              key: cloud
              name: cloud-credentials
            default: true
            objectStorage:
              bucket: <bucket_name>
              prefix: <bucket-prefix>
            provider: aws
      configuration:
        restic:
          enable: false
        velero:
          defaultPlugins:
            - openshift
            - aws
            - csi
            - vsm 5

    1
    OADP 1.2 のみ。オプション: バックアップのためにキューに入れることができるスナップショットの数の上限を指定します。デフォルト値は 10 です。
    2
    OADP 1.2 のみ。オプション: 復元のためにキューに入れることができるスナップショットの数の上限を指定します。デフォルト値は 10 です。
    3
    OADP 1.2 のみ。オプション: リポジトリーで Restic プルーニングを実行する間隔の日数を指定します。プルーン操作ではデータを再パックして領域を解放しますが、プロセスの一部として大量の I/O トラフィックが生成される可能性もあります。このオプションを設定すると、参照されなくなったデータによるストレージ消費とアクセスコストとの間のトレードオフが可能になります。
    4
    OADP 1.2 のみ。オプション: バックアップと復元の VolumeSync ボリュームオプションを指定します。
    5
    OADP 1.2 のみ。

    OADP Operator は、2 つのカスタムリソース定義 (CRD)、VolumeSnapshotBackup および VolumeSnapshotRestore をインストールします。

    VolumeSnapshotBackup CRD の例

    apiVersion: datamover.oadp.openshift.io/v1alpha1
    kind: VolumeSnapshotBackup
    metadata:
      name: <vsb_name>
      namespace: <namespace_name> 1
    spec:
      volumeSnapshotContent:
        name: <snapcontent_name>
      protectedNamespace: <adp_namespace>
      resticSecretRef:
        name: <restic_secret_name>

    1
    ボリュームスナップショットが存在する namespace を指定します。

    VolumeSnapshotRestore CRD の例

    apiVersion: datamover.oadp.openshift.io/v1alpha1
    kind: VolumeSnapshotRestore
    metadata:
      name: <vsr_name>
      namespace: <namespace_name> 1
    spec:
      protectedNamespace: <protected_ns> 2
      resticSecretRef:
        name: <restic_secret_name>
      volumeSnapshotMoverBackupRef:
        sourcePVCData:
          name: <source_pvc_name>
          size: <source_pvc_size>
        resticrepository: <your_restic_repo>
        volumeSnapshotClassName: <vsclass_name>

    1
    ボリュームスナップショットが存在する namespace を指定します。
    2
    Operator がインストールされている namespace を指定します。デフォルトは openshift-adp です。
  4. 次の手順を実行して、ボリュームスナップショットをバックアップできます。

    1. バックアップ CR を作成します。

      apiVersion: velero.io/v1
      kind: Backup
      metadata:
        name: <backup_name>
        namespace: <protected_ns> 1
      spec:
        includedNamespaces:
        - <app_ns>
        storageLocation: velero-sample-1
      1
      Operator がインストールされている namespace を指定します。デフォルトの namespace は openshift-adp です。
    2. 次のコマンドを入力して、最大 10 分待機し、VolumeSnapshotBackup CR のステータスが Completed かどうかを確認します。

      $ oc get vsb -n <app_ns>
      $ oc get vsb <vsb_name> -n <app_ns> -o jsonpath="{.status.phase}"

      DPA で設定されたオブジェクトストアにスナップショットが作成されます。

      注記

      VolumeSnapshotBackup CR のステータスが Failed になった場合は、トラブルシューティングのために Velero ログを参照してください。

  5. 次の手順を実行して、ボリュームスナップショットを復元できます。

    1. アプリケーションの namespace と、Velero CSI プラグインによって作成された volumeSnapshotContent を削除します。
    2. Restore CR を作成し、restorePVstrue に設定します。

      Restore CR の例

      apiVersion: velero.io/v1
      kind: Restore
      metadata:
        name: <restore_name>
        namespace: <protected_ns>
      spec:
        backupName: <previous_backup_name>
        restorePVs: true

    3. 最大 10 分間待機し、次のコマンドを入力して、VolumeSnapshotRestore CR ステータスが Completed であるかどうかを確認します。

      $ oc get vsr -n <app_ns>
      $ oc get vsr <vsr_name> -n <app_ns> -o jsonpath="{.status.phase}"
    4. アプリケーションデータとリソースが復元されたかどうかを確認します。

      注記

      VolumeSnapshotRestore CR のステータスが失敗になった場合は、トラブルシューティングのために Velero ログを参照してください。

4.4.1.5. Ceph Storage での OADP 1.2 Data Mover の使用

OADP 1.2 Data Mover を使用して、CephFS、CephRBD、またはその両方を使用するクラスターのアプリケーションデータをバックアップおよび復元できます。

OADP 1.2 Data Mover は、大規模環境をサポートする Ceph 機能を活用します。その 1 つはシャローコピー方式で、OpenShift Container Platform 4.12 以降で利用できます。この機能は、ソース Persistent Volume Claim (PVC) にあるもの以外の StorageClass および AccessMode リソースのバックアップと復元をサポートします。

重要

CephFS シャローコピー機能はバックアップ機能です。これは復元操作の一部ではありません。

4.4.1.5.1. Ceph Storage で OADP 1.2 Data Mover を使用するための前提条件

以下の前提条件は、Ceph Storage を使用するクラスター内で OpenShift API for Data Protection (OADP) 1.2 Data Mover を使用するすべてのデータのバックアップおよびリストア操作に適用されます。

  • OpenShift Container Platform 4.12 以降がインストールされている。
  • OADP Operator がインストールされました。
  • namespace openshift-adp にシークレットの cloud-credentials が作成されました。
  • Red Hat OpenShift Data Foundation がインストールされています。
  • Operator Lifecycle Manager を使用して最新の VolSync Operator をインストールしました。
4.4.1.5.2. OADP 1.2 Data Mover で使用するカスタムリソースの定義

Red Hat OpenShift Data Foundation をインストールすると、デフォルトの CephFS、CephRBD StorageClass および VolumeSnapshotClass カスタムリソース (CR) が自動的に作成されます。これらの CR は、OpenShift API for Data Protection (OADP) 1.2 Data Mover で使用するために定義する必要があります。

CR を定義した後、バックアップおよび復元操作を実行する前に、環境にその他の変更をいくつか加える必要があります。

4.4.1.5.3. OADP 1.2 Data Mover で使用する CephFS カスタムリソースの定義

Red Hat OpenShift Data Foundation をインストールすると、デフォルトの CephFS StorageClass カスタムリソース (CR) とデフォルトの CephFS VolumeSnapshotClass CR が自動的に作成されます。これらの CR は、OpenShift API for Data Protection (OADP) 1.2 Data Mover で使用するために定義できます。

手順

  1. 以下の例のように VolumeSnapshotClass CR を定義します。

    VolumeSnapshotClass CR の例

    apiVersion: snapshot.storage.k8s.io/v1
    deletionPolicy: Retain 1
    driver: openshift-storage.cephfs.csi.ceph.com
    kind: VolumeSnapshotClass
    metadata:
      annotations:
        snapshot.storage.kubernetes.io/is-default-class: true 2
      labels:
        velero.io/csi-volumesnapshot-class: true 3
      name: ocs-storagecluster-cephfsplugin-snapclass
    parameters:
      clusterID: openshift-storage
      csi.storage.k8s.io/snapshotter-secret-name: rook-csi-cephfs-provisioner
      csi.storage.k8s.io/snapshotter-secret-namespace: openshift-storage

    1
    Retain に設定する必要があります。
    2
    true に設定する必要があります。
    3
    true に設定する必要があります。
  2. 以下の例のように StorageClass CR を定義します。

    StorageClass CR の例

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: ocs-storagecluster-cephfs
      annotations:
        description: Provides RWO and RWX Filesystem volumes
        storageclass.kubernetes.io/is-default-class: true 1
    provisioner: openshift-storage.cephfs.csi.ceph.com
    parameters:
      clusterID: openshift-storage
      csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner
      csi.storage.k8s.io/controller-expand-secret-namespace: openshift-storage
      csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node
      csi.storage.k8s.io/node-stage-secret-namespace: openshift-storage
      csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner
      csi.storage.k8s.io/provisioner-secret-namespace: openshift-storage
      fsName: ocs-storagecluster-cephfilesystem
    reclaimPolicy: Delete
    allowVolumeExpansion: true
    volumeBindingMode: Immediate

    1
    true に設定する必要があります。
4.4.1.5.4. OADP 1.2 Data Mover で使用する CephRBD カスタムリソースの定義

Red Hat OpenShift Data Foundation をインストールすると、デフォルトの CephRBD StorageClass カスタムリソース (CR) とデフォルトの CephRBD VolumeSnapshotClass CR が自動的に作成されます。これらの CR は、OpenShift API for Data Protection (OADP) 1.2 Data Mover で使用するために定義できます。

手順

  1. 以下の例のように VolumeSnapshotClass CR を定義します。

    VolumeSnapshotClass CR の例

    apiVersion: snapshot.storage.k8s.io/v1
    deletionPolicy: Retain 1
    driver: openshift-storage.rbd.csi.ceph.com
    kind: VolumeSnapshotClass
    metadata:
      labels:
        velero.io/csi-volumesnapshot-class: true 2
      name: ocs-storagecluster-rbdplugin-snapclass
    parameters:
      clusterID: openshift-storage
      csi.storage.k8s.io/snapshotter-secret-name: rook-csi-rbd-provisioner
      csi.storage.k8s.io/snapshotter-secret-namespace: openshift-storage

    1
    Retain に設定する必要があります。
    2
    true に設定する必要があります。
  2. 以下の例のように StorageClass CR を定義します。

    StorageClass CR の例

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: ocs-storagecluster-ceph-rbd
      annotations:
        description: 'Provides RWO Filesystem volumes, and RWO and RWX Block volumes'
    provisioner: openshift-storage.rbd.csi.ceph.com
    parameters:
      csi.storage.k8s.io/fstype: ext4
      csi.storage.k8s.io/provisioner-secret-namespace: openshift-storage
      csi.storage.k8s.io/provisioner-secret-name: rook-csi-rbd-provisioner
      csi.storage.k8s.io/node-stage-secret-name: rook-csi-rbd-node
      csi.storage.k8s.io/controller-expand-secret-name: rook-csi-rbd-provisioner
      imageFormat: '2'
      clusterID: openshift-storage
      imageFeatures: layering
      csi.storage.k8s.io/controller-expand-secret-namespace: openshift-storage
      pool: ocs-storagecluster-cephblockpool
      csi.storage.k8s.io/node-stage-secret-namespace: openshift-storage
    reclaimPolicy: Delete
    allowVolumeExpansion: true
    volumeBindingMode: Immediate

4.4.1.5.5. OADP 1.2 Data Mover で使用する追加のカスタムリソースの定義

デフォルトの StorageClass および CephRBD VolumeSnapshotClass カスタムリソース (CR) を再定義した後、次の CR を作成する必要があります。

  • シャローコピー機能を使用するように定義された CephFS StorageClass CR
  • Rustic Secret CR

手順

  1. 次の例のように CephFS StorageClass CR を作成し、backingSnapshot パラメーターを true に設定します。

    backingSnapshottrue に設定した CephFS StorageClass CR の例

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: ocs-storagecluster-cephfs-shallow
      annotations:
        description: Provides RWO and RWX Filesystem volumes
        storageclass.kubernetes.io/is-default-class: false
    provisioner: openshift-storage.cephfs.csi.ceph.com
    parameters:
      csi.storage.k8s.io/provisioner-secret-namespace: openshift-storage
      csi.storage.k8s.io/provisioner-secret-name: rook-csi-cephfs-provisioner
      csi.storage.k8s.io/node-stage-secret-name: rook-csi-cephfs-node
      csi.storage.k8s.io/controller-expand-secret-name: rook-csi-cephfs-provisioner
      clusterID: openshift-storage
      fsName: ocs-storagecluster-cephfilesystem
      csi.storage.k8s.io/controller-expand-secret-namespace: openshift-storage
      backingSnapshot: true 1
      csi.storage.k8s.io/node-stage-secret-namespace: openshift-storage
    reclaimPolicy: Delete
    allowVolumeExpansion: true
    volumeBindingMode: Immediate

    1
    true に設定する必要があります。
    重要

    CephFS VolumeSnapshotClass および StorageClass CR の Provisioner の値が同じであることを確認してください。

  2. 次の例のように Restic Secret CR を設定します。

    Restic Secret CR の例

    apiVersion: v1
    kind: Secret
    metadata:
      name: <secret_name>
      namespace: <namespace>
    type: Opaque
    stringData:
      RESTIC_PASSWORD: <restic_password>

4.4.1.5.6. OADP 1.2 Data Mover と CephFS ストレージを使用したデータのバックアップと復元

OpenShift API for Data Protection (OADP) 1.2 Data Mover を使用すると、CephFS のシャローコピー機能を有効にすることで、CephFS ストレージを使用してデータをバックアップおよびリストアできます。

前提条件

  • ステートフルアプリケーションは、CephFS をプロビジョナーとして使用し、Persistent Volume Claim (PVC) を備えた別の namespace で実行されています。
  • StorageClass および VolumeSnapshotClass カスタムリソース (CR) は、CephFS および OADP 1.2 Data Mover 用に定義されています。
  • openshift-adp namespace には秘密の cloud-credentials があります。
4.4.1.5.7. CephFS ストレージで使用する DPA の作成

OpenShift API for Data Protection (OADP) 1.2 Data Mover を使用して、CephFS ストレージでデータをバックアップおよびリストアするには、Data Protection Application (DPA) CR を作成する必要があります。

手順

  1. 次のコマンドを実行して、VolumeSnapshotClass CR の deletionPolicy フィールドが Retain に設定されていることを確認します。

    $ oc get volumesnapshotclass -A  -o jsonpath='{range .items[*]}{"Name: "}{.metadata.name}{"  "}{"Retention Policy: "}{.deletionPolicy}{"\n"}{end}'
  2. 次のコマンドを実行して、VolumeSnapshotClass CR のラベルが true に設定されていることを確認します。

    $ oc get volumesnapshotclass -A  -o jsonpath='{range .items[*]}{"Name: "}{.metadata.name}{"  "}{"labels: "}{.metadata.labels}{"\n"}{end}'
  3. 次のコマンドを実行して、StorageClass CR の storageclass.kubernetes.io/is-default-class アノテーションが true に設定されていることを確認します。

    $ oc get storageClass -A  -o jsonpath='{range .items[*]}{"Name: "}{.metadata.name}{"  "}{"annotations: "}{.metadata.annotations}{"\n"}{end}'
  4. 次の例のようなデータ保護アプリケーション (DPA) CR を作成します。

    DPA CR の例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: velero-sample
      namespace: openshift-adp
    spec:
      backupLocations:
        - velero:
            config:
              profile: default
              region: us-east-1
            credential:
              key: cloud
              name: cloud-credentials
            default: true
            objectStorage:
              bucket: <my_bucket>
              prefix: velero
           provider: aws
        configuration:
          restic:
            enable: false  1
          velero:
            defaultPlugins:
              - openshift
              - aws
              - csi
              - vsm
        features:
          dataMover:
            credentialName: <restic_secret_name> 2
            enable: true 3
            volumeOptionsForStorageClasses:
              ocs-storagecluster-cephfs:
                sourceVolumeOptions:
                  accessMode: ReadOnlyMany
                  cacheAccessMode: ReadWriteMany
                  cacheStorageClassName: ocs-storagecluster-cephfs
                  storageClassName: ocs-storagecluster-cephfs-shallow

    1
    enable フィールドにはデフォルト値はありません。有効な値は true または false です。
    2
    OADP 1.2 Data Mover および Ceph を操作するための環境を準備したときに作成した Restic Secret を使用します。Restic Secret を使用しない場合、CR はこのパラメーターのデフォルト値 dm-credential を使用します。
    3
    enable フィールドにはデフォルト値はありません。有効な値は true または false です。
4.4.1.5.8. OADP 1.2 Data Mover と CephFS ストレージを使用したデータのバックアップ

OpenShift API for Data Protection (OADP) 1.2 Data Mover を使用すると、CephFS ストレージのシャローコピー機能を有効にすることで、CephFS ストレージを使用してデータをバックアップできます。

手順

  1. 次の例のように、Backup CR を作成します。

    Backup CR の例

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup_name>
      namespace: <protected_ns>
    spec:
      includedNamespaces:
      - <app_ns>
      storageLocation: velero-sample-1

  2. 次の手順を実行して、VolumeSnapshotBackup CR の進行状況を監視します。

    1. すべての VolumeSnapshotBackup CR の進行状況を確認するには、次のコマンドを実行します。

      $ oc get vsb -n <app_ns>
    2. 特定の VolumeSnapshotBackup CR の進行状況を確認するには、次のコマンドを実行します。

      $ oc get vsb <vsb_name> -n <app_ns> -ojsonpath="{.status.phase}`
  3. VolumeSnapshotBackup CR のステータスが Completed になるまで、数分間待ちます。
  4. Restic Secret で指定されたスナップショットがオブジェクトストアに少なくとも 1 つあることを確認します。/<OADP-namespace> という接頭辞を持つ、対象の BackupStorageLocation ストレージプロバイダーでこのスナップショットを確認できます。
4.4.1.5.9. OADP 1.2 Data Mover と CephFS ストレージを使用したデータのリストア

CephFS ストレージのシャローコピー機能がバックアップ手順で有効になっている場合、OpenShift API for Data Protection (OADP) 1.2 Data Mover を使用して、CephFS ストレージを使用してデータをリストアできます。シャローコピー機能は復元手順では使用されません。

手順

  1. 次のコマンドを実行して、アプリケーションの namespace を削除します。

    $ oc delete vsb -n <app_namespace> --all
  2. 次のコマンドを実行して、バックアップ中に作成された VolumeSnapshotContent CR を削除します。

    $ oc delete volumesnapshotcontent --all
  3. 次の例のように、Restore CR を作成します。

    Restore CR の例

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: <restore_name>
      namespace: <protected_ns>
    spec:
      backupName: <previous_backup_name>

  4. 次の手順を実行して、VolumeSnapshotRestore CR の進行状況を監視します。

    1. すべての VolumeSnapshotRestore CR の進行状況を確認するには、次のコマンドを実行します。

      $ oc get vsr -n <app_ns>
    2. 特定の VolumeSnapshotRestore CR の進行状況を確認するには、次のコマンドを実行します。

      $ oc get vsr <vsr_name> -n <app_ns> -ojsonpath="{.status.phase}
  5. 次のコマンドを実行して、アプリケーションデータが復元されたことを確認します。

    $ oc get route <route_name> -n <app_ns> -ojsonpath="{.spec.host}"
4.4.1.5.10. OADP 1.2 Data Mover と分割ボリューム (CephFS および Ceph RBD) を使用したデータのバックアップとリストア

OpenShift API for Data Protection (OADP) 1.2 Data Mover を使用すると、ボリュームを分割した 環境、つまり CephFS と CephRBD の両方を使用する環境でデータをバックアップおよびリストアできます。

前提条件

  • ステートフルアプリケーションは、CephFS をプロビジョナーとして使用し、Persistent Volume Claim (PVC) を備えた別の namespace で実行されています。
  • StorageClass および VolumeSnapshotClass カスタムリソース (CR) は、CephFS および OADP 1.2 Data Mover 用に定義されています。
  • openshift-adp namespace には秘密の cloud-credentials があります。
4.4.1.5.11. 分割ボリュームで使用する DPA の作成

OpenShift API for Data Protection (OADP) 1.2 Data Mover を使用して、分割ボリュームでデータをバックアップおよびリストアするには、Data Protection Application (DPA) CR を作成する必要があります。

手順

  • 次の例のように、Data Protection Application (DPA) CR を作成します。

    分割ボリューム環境の DPA CR の例

    apiVersion: oadp.openshift.io/v1alpha1
    kind: DataProtectionApplication
    metadata:
      name: velero-sample
      namespace: openshift-adp
    spec:
      backupLocations:
        - velero:
            config:
              profile: default
              region: us-east-1
            credential:
              key: cloud
              name: cloud-credentials
            default: true
            objectStorage:
              bucket: <my-bucket>
              prefix: velero
            provider: aws
      configuration:
        restic:
          enable: false
        velero:
          defaultPlugins:
            - openshift
            - aws
            - csi
            - vsm
      features:
        dataMover:
          credentialName: <restic_secret_name> 1
          enable: true
          volumeOptionsForStorageClasses: 2
            ocs-storagecluster-cephfs:
              sourceVolumeOptions:
                accessMode: ReadOnlyMany
                cacheAccessMode: ReadWriteMany
                cacheStorageClassName: ocs-storagecluster-cephfs
                storageClassName: ocs-storagecluster-cephfs-shallow
            ocs-storagecluster-ceph-rbd:
              sourceVolumeOptions:
                storageClassName: ocs-storagecluster-ceph-rbd
                cacheStorageClassName: ocs-storagecluster-ceph-rbd
            destinationVolumeOptions:
                storageClassName: ocs-storagecluster-ceph-rbd
                cacheStorageClassName: ocs-storagecluster-ceph-rbd

    1
    OADP 1.2 Data Mover および Ceph を操作するための環境を準備したときに作成した Restic Secret を使用します。そうしない場合、CR はこのパラメーターのデフォルト値 dm-credential を使用します。
    2
    storageClass ボリュームごとに異なる VolumeOptionsForStorageClass ラベルのセットを定義できるため、異なるプロバイダーのボリュームへのバックアップが可能になります。
4.4.1.5.12. OADP 1.2 Data Mover と分割ボリュームを使用したデータのバックアップ

OpenShift API for Data Protection (OADP) 1.2 Data Mover を使用して、分割ボリュームのある環境でデータをバックアップできます。

手順

  1. 次の例のように、Backup CR を作成します。

    Backup CR の例

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup_name>
      namespace: <protected_ns>
    spec:
      includedNamespaces:
      - <app_ns>
      storageLocation: velero-sample-1

  2. 次の手順を実行して、VolumeSnapshotBackup CR の進行状況を監視します。

    1. すべての VolumeSnapshotBackup CR の進行状況を確認するには、次のコマンドを実行します。

      $ oc get vsb -n <app_ns>
    2. 特定の VolumeSnapshotBackup CR の進行状況を確認するには、次のコマンドを実行します。

      $ oc get vsb <vsb_name> -n <app_ns> -ojsonpath="{.status.phase}`
  3. VolumeSnapshotBackup CR のステータスが Completed になるまで、数分間待ちます。
  4. Restic Secret で指定されたスナップショットがオブジェクトストアに少なくとも 1 つあることを確認します。/<OADP-namespace> という接頭辞を持つ、対象の BackupStorageLocation ストレージプロバイダーでこのスナップショットを確認できます。
4.4.1.5.13. OADP 1.2 Data Mover と分割ボリュームを使用したデータのリストア

CephFS ストレージのシャローコピー機能がバックアップ手順で有効になっている場合、OpenShift API for Data Protection (OADP) 1.2 Data Mover を使用して、分割ボリュームのある環境でデータをリストアできます。シャローコピー機能は復元手順では使用されません。

手順

  1. 次のコマンドを実行して、アプリケーションの namespace を削除します。

    $ oc delete vsb -n <app_namespace> --all
  2. 次のコマンドを実行して、バックアップ中に作成された VolumeSnapshotContent CR を削除します。

    $ oc delete volumesnapshotcontent --all
  3. 次の例のように、Restore CR を作成します。

    Restore CR の例

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: <restore_name>
      namespace: <protected_ns>
    spec:
      backupName: <previous_backup_name>

  4. 次の手順を実行して、VolumeSnapshotRestore CR の進行状況を監視します。

    1. すべての VolumeSnapshotRestore CR の進行状況を確認するには、次のコマンドを実行します。

      $ oc get vsr -n <app_ns>
    2. 特定の VolumeSnapshotRestore CR の進行状況を確認するには、次のコマンドを実行します。

      $ oc get vsr <vsr_name> -n <app_ns> -ojsonpath="{.status.phase}
  5. 次のコマンドを実行して、アプリケーションデータが復元されたことを確認します。

    $ oc get route <route_name> -n <app_ns> -ojsonpath="{.spec.host}"

4.4.1.6. OADP 1.1 Data Mover を使用したバックアップ後のクリーンアップ

OADP 1.1 Data Mover の場合、バックアップを実行した後にデータクリーンアップを実行する必要があります。

クリーンアップには、次のリソースの削除が含まれます。

  • バケット内のスナップショット
  • クラスターリソース
  • スケジュールに従って実行されるか、または繰り返し実行されるバックアップ手順の後のボリュームスナップショットバックアップ (VSB)
4.4.1.6.1. バケット内のスナップショットの削除

OADP 1.1 Data Mover は、バックアップ後に 1 つ以上のスナップショットをバケットに残す場合があります。すべてのスナップショットを削除することも、個々のスナップショットを削除することもできます。

手順

  • バケット内のすべてのスナップショットを削除するには、データ保護アプリケーション (DPA) の .spec.backupLocation.objectStorage.bucket リソースで指定されている /<protected_namespace> フォルダーを削除します。
  • 個々のスナップショットを削除するには、以下のようになりました。

    1. DPA .spec.backupLocation.objectStorage.bucket リソースで指定されている /<protected_namespace> フォルダーを参照します。
    2. /<volumeSnapshotContent name>-pvc という接頭辞が付いた適切なフォルダーを削除します。ここで、<VolumeSnapshotContent_name> は、Data Mover によって PVC ごとに作成された VolumeSnapshotContent です。
4.4.1.6.2. クラスターリソースの削除

OADP 1.1 Data Mover は、コンテナーストレージインターフェイス (CSI) ボリュームのスナップショットをリモートオブジェクトストアに正常にバックアップするかどうかに関係なく、クラスターリソースを残す場合があります。

4.4.1.6.2.1. Data Mover を使用したバックアップとリストアが成功した後のクラスターリソースの削除

Data Mover を使用したバックアップとリストアが成功した後、アプリケーションの namespace に残っている VolumeSnapshotBackup または VolumeSnapshotRestore CR を削除できます。

手順

  1. Data Mover を使用したバックアップ後に、アプリケーションのnamespace (バックアップおよびリストアするアプリケーション PVC を含む namespace) に残っているクラスターリソースを削除します。

    $ oc delete vsb -n <app_namespace> --all
  2. Data Mover を使用するリストア後に残るクラスターリソースを削除します。

    $ oc delete vsr -n <app_namespace> --all
  3. 必要に応じて、Data Mover を使用するバックアップおよびリストア後に残っている VolumeSnapshotContent リソースを削除します。

    $ oc delete volumesnapshotcontent --all
4.4.1.6.2.2. Data Mover を使用したバックアップとリストアが部分的に成功または失敗した後のクラスターリソースの削除

Data Mover を使用したバックアップおよびリストア操作が失敗するか、部分的にしか成功しない場合は、アプリケーションの namespace に存在する VolumeSnapshotBackup (VSB) または VolumeSnapshotRestore カスタムリソース定義 (CRD) をクリーンアップし、このコントローラーによって作成された余分なリソースをクリーンアップする必要があります。

手順

  1. 次のコマンドを入力して、Data Mover を使用したバックアップ操作後に残ったクラスターリソースをクリーンアップします。

    1. アプリケーション namespace 上の VSB CRD を削除します。この namespace には、バックアップおよび復元するアプリケーション PVC が含まれています。

      $ oc delete vsb -n <app_namespace> --all
    2. VolumeSnapshot CR を削除します。

      $ oc delete volumesnapshot -A --all
    3. VolumeSnapshotContent CR を削除します。

      $ oc delete volumesnapshotcontent --all
    4. 保護された namespace (Operator がインストールされている namespace) 上の PVC をすべて削除します。

      $ oc delete pvc -n <protected_namespace> --all
    5. namespace 上の ReplicationSource リソースをすべて削除します。

      $ oc delete replicationsource -n <protected_namespace> --all
  2. 次のコマンドを入力して、Data Mover を使用したリストア操作後に残ったクラスターリソースをクリーンアップします。

    1. VSR CRD を削除します。

      $ oc delete vsr -n <app-ns> --all
    2. VolumeSnapshot CR を削除します。

      $ oc delete volumesnapshot -A --all
    3. VolumeSnapshotContent CR を削除します。

      $ oc delete volumesnapshotcontent --all
    4. namespace 上の ReplicationDestination リソースをすべて削除します。

      $ oc delete replicationdestination -n <protected_namespace> --all

4.4.1.7. バックアップフックの作成

Backup カスタムリソース (CR) を編集して、Pod 内のコンテナーでコマンドを実行するためのバックアップフックを作成します。

プレ フックは、Pod のバックアップが作成される前に実行します。ポスト フックはバックアップ後に実行します。

手順

  • 次の例のように、Backup CR の spec.hooks ブロックにフックを追加します。

    apiVersion: velero.io/v1
    kind: Backup
    metadata:
      name: <backup>
      namespace: openshift-adp
    spec:
      hooks:
        resources:
          - name: <hook_name>
            includedNamespaces:
            - <namespace> 1
            excludedNamespaces: 2
            - <namespace>
            includedResources: []
            - pods 3
            excludedResources: [] 4
            labelSelector: 5
              matchLabels:
                app: velero
                component: server
            pre: 6
              - exec:
                  container: <container> 7
                  command:
                  - /bin/uname 8
                  - -a
                  onError: Fail 9
                  timeout: 30s 10
            post: 11
    ...
    1
    オプション: フックが適用される namespace を指定できます。この値が指定されていない場合、フックはすべてのネームスペースに適用されます。
    2
    オプション: フックが適用されない namespace を指定できます。
    3
    現在、Pod は、フックを適用できる唯一のサポート対象リソースです。
    4
    オプション: フックが適用されないリソースを指定できます。
    5
    オプション: このフックは、ラベルに一致するオブジェクトにのみ適用されます。この値が指定されていない場合、フックはすべてのネームスペースに適用されます。
    6
    バックアップの前に実行するフックの配列。
    7
    オプション: コンテナーが指定されていない場合、コマンドは Pod の最初のコンテナーで実行されます。
    8
    これは、追加される init コンテナーのエントリーポイントです。
    9
    エラー処理に許可される値は、FailContinue です。デフォルトは Fail です。
    10
    オプション: コマンドの実行を待機する時間。デフォルトは 30s です。
    11
    このブロックでは、バックアップ後に実行するフックの配列を、バックアップ前のフックと同じパラメーターで定義します。

4.4.1.8. バックアップのスケジュール

Backup CR の代わりに Schedule カスタムリソース (CR) を作成して、バックアップをスケジュールします。

警告

バックアップスケジュールでは、別のバックアップが作成される前にバックアップを数量するための時間を十分確保してください。

たとえば、namespace のバックアップに通常 10 分かかる場合は、15 分ごとよりも頻繁にバックアップをスケジュールしないでください。

前提条件

  • OpenShift API for Data Protection (OADP) Operator をインストールする必要があります。
  • DataProtectionApplication CR は Ready 状態である必要があります。

手順

  1. backupStorageLocations CR を取得します。

    $ oc get backupStorageLocations -n openshift-adp

    出力例

    NAMESPACE       NAME              PHASE       LAST VALIDATED   AGE   DEFAULT
    openshift-adp   velero-sample-1   Available   11s              31m

  2. 次の例のように、Schedule CR を作成します。

    $ cat << EOF | oc apply -f -
    apiVersion: velero.io/v1
    kind: Schedule
    metadata:
      name: <schedule>
      namespace: openshift-adp
    spec:
      schedule: 0 7 * * * 1
      template:
        hooks: {}
        includedNamespaces:
        - <namespace> 2
        storageLocation: <velero-sample-1> 3
        defaultVolumesToRestic: true 4
        ttl: 720h0m0s
    EOF
    1
    バックアップをスケジュールするための cron 式。たとえば、毎日 7:00 にバックアップを実行する場合は 0 7 * * * です。
    2
    バックアップを作成する namespace の配列。
    3
    backupStorageLocations CR の名前。
    4
    オプション: Restic を使用してボリュームをバックアップする場合は、キーと値のペア defaultVolumesToRestic: true を追加します。
  3. スケジュールされたバックアップの実行後に、Schedule CR のステータスが Completed となっていることを確認します。

    $ oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'

4.4.1.9. バックアップの削除

Backup カスタムリソース (CR) を削除することで、バックアップファイルを削除できます。

警告

Backup CR および関連するオブジェクトストレージデータを削除した後、削除したデータを復元することはできません。

前提条件

  • Backup CR を作成した。
  • Backup CR の名前とそれを含む namespace がわかっている。
  • Velero CLI ツールをダウンロードした。
  • クラスター内の Velero バイナリーにアクセスできる。

手順

  • 次のいずれかのアクションを選択して、Backup CR を削除します。

    • Backup CR を削除し、関連するオブジェクトストレージデータを保持する場合は、次のコマンドを実行します。

      $ oc delete backup <backup_CR_name> -n <velero_namespace>
    • Backup CR を削除し、関連するオブジェクトストレージデータを削除する場合は、次のコマンドを実行します。

      $ velero backup delete <backup_CR_name> -n <velero_namespace>

      ここでは、以下のようになります。

      <backup_CR_name>
      Backup カスタムリソースの名前を指定します。
      <velero_namespace>
      Backup カスタムリソースを含む namespace を指定します。

4.4.2. アプリケーションの復元

アプリケーションのバックアップを復元するには、Restore カスタムリソース (CR) を作成します。復元 CR の作成 を参照してください。

Restore (CR) を編集することでアプリケーションを復元する際に、Pod 内のコンテナーでコマンドを実行するための復元フックを作成できます。復元フックの作成を参照してください。

4.4.2.1. 復元 CR の作成

Restore CR を作成して、Backup カスタムリソース (CR) を復元します。

前提条件

  • OpenShift API for Data Protection (OADP) Operator をインストールする必要があります。
  • DataProtectionApplication CR は Ready 状態である必要があります。
  • Velero Backup CR が必要です。
  • バックアップ時に永続ボリューム (PV) の容量が要求されたサイズと一致するよう、要求されたサイズを調整します。

手順

  1. 次の例のように、Restore CR を作成します。

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: <restore>
      namespace: openshift-adp
    spec:
      backupName: <backup> 1
      includedResources: [] 2
      excludedResources:
      - nodes
      - events
      - events.events.k8s.io
      - backups.velero.io
      - restores.velero.io
      - resticrepositories.velero.io
      restorePVs: true 3
    1
    Backup CR の名前
    2
    オプション: 復元プロセスに含めるリソースの配列を指定します。リソースは、ショートカット (Podspo など) または完全修飾の場合があります。指定しない場合、すべてのリソースが含まれます。
    3
    オプション: RestorePVs パラメーターを false に設定すると、コンテナーストレージインターフェイス (CSI) スナップショットの VolumeSnapshot から、または VolumeSnaphshotLocation が設定されている場合はネイティブスナップショットからの PersistentVolumes の復元をオフにすることができます。
  2. 次のコマンドを入力して、Restore CR のステータスが Completed であることを確認します。

    $ oc get restore -n openshift-adp <restore> -o jsonpath='{.status.phase}'
  3. 次のコマンドを入力して、バックアップリソースが復元されたことを確認します。

    $ oc get all -n <namespace> 1
    1
    バックアップした namespace。
  4. Restic を使用して DeploymentConfig オブジェクトを復元する場合、または復元後のフックを使用する場合は、次のコマンドを入力して dc-restic-post-restore.sh クリーンアップスクリプトを実行します。

    $ bash dc-restic-post-restore.sh <restore-name>
    注記

    復元プロセスの過程で、OADP Velero プラグインは、DeploymentConfig オブジェクトをスケールダウンし、Pod をスタンドアロン Pod として復元して、クラスターが復元された DeploymentConfig Pod を復元時にすぐに削除しないようにし、Restic および復元後のフックを完了できるようにします。復元された Pod でのアクション。クリーンアップスクリプトは、これらの切断された Pod を削除し、DeploymentConfig オブジェクトを適切な数のレプリカに戻します。

    例4.1 dc-restic-post-restore.sh クリーンアップスクリプト

    #!/bin/bash
    set -e
    
    # if sha256sum exists, use it to check the integrity of the file
    if command -v sha256sum >/dev/null 2>&1; then
      CHECKSUM_CMD="sha256sum"
    else
      CHECKSUM_CMD="shasum -a 256"
    fi
    
    label_name () {
        if [ "${#1}" -le "63" ]; then
    	echo $1
    	return
        fi
        sha=$(echo -n $1|$CHECKSUM_CMD)
        echo "${1:0:57}${sha:0:6}"
    }
    
    OADP_NAMESPACE=${OADP_NAMESPACE:=openshift-adp}
    
    if [[ $# -ne 1 ]]; then
        echo "usage: ${BASH_SOURCE} restore-name"
        exit 1
    fi
    
    echo using OADP Namespace $OADP_NAMESPACE
    echo restore: $1
    
    label=$(label_name $1)
    echo label: $label
    
    echo Deleting disconnected restore pods
    oc delete pods -l oadp.openshift.io/disconnected-from-dc=$label
    
    for dc in $(oc get dc --all-namespaces -l oadp.openshift.io/replicas-modified=$label -o jsonpath='{range .items[*]}{.metadata.namespace}{","}{.metadata.name}{","}{.metadata.annotations.oadp\.openshift\.io/original-replicas}{","}{.metadata.annotations.oadp\.openshift\.io/original-paused}{"\n"}')
    do
        IFS=',' read -ra dc_arr <<< "$dc"
        if [ ${#dc_arr[0]} -gt 0 ]; then
    	echo Found deployment ${dc_arr[0]}/${dc_arr[1]}, setting replicas: ${dc_arr[2]}, paused: ${dc_arr[3]}
    	cat <<EOF | oc patch dc  -n ${dc_arr[0]} ${dc_arr[1]} --patch-file /dev/stdin
    spec:
      replicas: ${dc_arr[2]}
      paused: ${dc_arr[3]}
    EOF
        fi
    done

4.4.2.2. 復元フックの作成

Restore カスタムリソース (CR) を編集して、アプリケーションの復元中に Pod 内のコンテナーでコマンドを実行する復元フックを作成します。

2 種類の復元フックを作成できます。

  • init フックは、init コンテナーを Pod に追加して、アプリケーションコンテナーが起動する前にセットアップタスクを実行します。

    Restic バックアップを復元する場合は、復元フック init コンテナーの前に restic-wait init コンテナーが追加されます。

  • exec フックは、復元された Pod のコンテナーでコマンドまたはスクリプトを実行します。

手順

  • 次の例のように、Restore CRspec.hooks ブロックにフックを追加します。

    apiVersion: velero.io/v1
    kind: Restore
    metadata:
      name: <restore>
      namespace: openshift-adp
    spec:
      hooks:
        resources:
          - name: <hook_name>
            includedNamespaces:
            - <namespace> 1
            excludedNamespaces:
            - <namespace>
            includedResources:
            - pods 2
            excludedResources: []
            labelSelector: 3
              matchLabels:
                app: velero
                component: server
            postHooks:
            - init:
                initContainers:
                - name: restore-hook-init
                  image: alpine:latest
                  volumeMounts:
                  - mountPath: /restores/pvc1-vm
                    name: pvc1-vm
                  command:
                  - /bin/ash
                  - -c
                timeout: 4
            - exec:
                container: <container> 5
                command:
                - /bin/bash 6
                - -c
                - "psql < /backup/backup.sql"
                waitTimeout: 5m 7
                execTimeout: 1m 8
                onError: Continue 9
    1
    オプション: フックが適用される namespace の配列。この値が指定されていない場合、フックはすべてのネームスペースに適用されます。
    2
    現在、Pod は、フックを適用できる唯一のサポート対象リソースです。
    3
    オプション: このフックは、ラベルセレクターに一致するオブジェクトにのみ適用されます。
    4
    オプション: Timeout は、initContainers が完了するまで Velero が待機する最大時間を指定します。
    5
    オプション: コンテナーが指定されていない場合、コマンドは Pod の最初のコンテナーで実行されます。
    6
    これは、追加される init コンテナーのエントリーポイントです。
    7
    オプション: コンテナーの準備が整うまでの待機時間。これは、コンテナーが起動して同じコンテナー内の先行するフックが完了するのに十分な長さである必要があります。設定されていない場合、復元プロセスの待機時間は無期限になります。
    8
    オプション: コマンドの実行を待機する時間。デフォルトは 30s です。
    9
    エラー処理に許可される値は、Fail および Continue です。
    • Continue: コマンドの失敗のみがログに記録されます。
    • Fail: Pod 内のコンテナーで復元フックが実行されなくなりました。Restore CR のステータスは PartiallyFailed になります。