1.2. VolSync の永続ボリューム複製サービス


VolSync は、レプリケーションの互換性がないストレージタイプが指定されたクラスター全体、または 1 つのクラスター内の永続ボリュームの非同期レプリケーションを有効にする Kubernetes Operator です。これは Container Storage Interface (CSI) を使用して互換性の制限を解消します。VolSync Operator を環境にデプロイした後、それを活用して永続データのコピーを作成および保守できます。

重要: VolSync は、FilesystemvolumeMode を使用した永続ボリューム要求の複製のみをサポートします。volumeMode を選択しない場合、デフォルトで Filesystem になります。

1.2.1. VolSync を使用した永続ボリュームの複製

サポート対象の 3 つの方法を使用して、VolSync で永続ボリュームを複製できます。これは、rsync、rsync-tls、restic、または Rclone などの所有する同期ロケーションの数により異なります。

1.2.1.1. 前提条件

クラスターに VolSync をインストールする前に、以下の要件が必要です。

  • サポートされている Red Hat Advanced Cluster Management ハブクラスター上に設定された Red Hat OpenShift Container Platform 環境
  • ソース永続ボリュームに使用するストレージドライバーは、CSI 互換であり、スナップショットをサポートできる必要があります。
  • rsync-tls ムーバーを使用してクラスター間でデータをレプリケートする場合は、次の要件を満たす必要があります。

    • 同じ Red Hat Advanced Cluster Management ハブクラスターに対して 2 つ以上のマネージドクラスター
    • VolSync で設定しているクラスター間のネットワーク接続。クラスターが同じネットワーク上にない場合は、Submariner マルチクラスターネットワーキングおよびサービスディスカバリー を設定し、ServiceTypeClusterIP 値を使用してクラスターをネットワークで接続するか、ServiceTypeLoadBalancer 値を持つロードバランサーを使用することができます。

1.2.1.2. マネージドクラスターへの VolSync のインストール

VolSync が 1 つのクラスターの永続ボリューム要求を別のクラスターの永続ボリューム要求に複製できるようにするには、ソースとターゲットの両方のマネージドクラスターに VolSync をインストールする必要があります。

Red Hat Advanced Cluster Management からマネージドクラスターに VolSync をインストールすると、マネージドクラスターの volsync-system namespace にインストールされます。これを行うと、OpenShift 以外のマネージドクラスターがサポートされます。

以前のバージョンの Red Hat Advanced Cluster Management で、OpenShift Container Platform マネージドクラスターに VolSync を Operator Lifecycle Manager Operator としてインストールした場合、VolSync Operator Lifecycle Manager Operator が削除され、volsync-system namespace 内の VolSync デプロイメントに置き換えられます。

2 つの方法のいずれかを使用して、環境内の 2 つのクラスターに VolSync をインストールできます。次のセクションで説明するように、ハブクラスター内の各マネージドクラスターにラベルを追加するか、ManagedClusterAddOn を手動で作成して適用することができます。

1.2.1.2.1. ラベルを使用した VolSync のインストール

ラベルを追加して、マネージドクラスターに VolSync をインストールします。

  • Red Hat Advanced Cluster Management コンソールから以下のステップを実行します。

    1. 詳細を表示するには、ハブクラスターコンソールの Clusters ページからマネージドクラスターの 1 つを選択します。
    2. Labels フィールドに、次のラベルを追加します。

      Copy to Clipboard Toggle word wrap
      addons.open-cluster-management.io/volsync=true

      VolSync サービス Pod はマネージドクラスターにインストールされます。

    3. 他のマネージドクラスターに同じラベルを追加します。
    4. ハブで次のコマンドを実行して、VolSync Operator がインストールされていることを確認します。

      Copy to Clipboard Toggle word wrap
      oc -n <managed-cluster-name> get ManagedClusterAddOn volsync
    5. コマンドの出力で、managedclusteraddonReady ステータスになっていることを確認します。
    6. マネージドクラスターで次のコマンドを実行して、VolSync Operator がインストールされていることを確認します。

      Copy to Clipboard Toggle word wrap
      kubectl -n volsync-system get deployment volsync
  • コマンドラインインターフェイスから次の手順を実行します。

    1. ハブクラスターでコマンドラインセッションを開始します。
    2. 次のコマンドを入力して、最初のクラスターにラベルを追加します。

      Copy to Clipboard Toggle word wrap
      oc label managedcluster <managed-cluster-1> "addons.open-cluster-management.io/volsync"="true"

      managed-cluster-1 をマネージドクラスターの 1 つの名前に置き換えます。

    3. 次のコマンドを入力して、ラベルを 2 番目のクラスターに追加します。

      Copy to Clipboard Toggle word wrap
      oc label managedcluster <managed-cluster-2> "addons.open-cluster-management.io/volsync"="true"

      managed-cluster-2 を他のマネージドクラスターの名前に置き換えます。

      ManagedClusterAddOn リソースは、対応する各マネージドクラスターの namespace 内のハブクラスターに自動的に作成される必要があります。

1.2.1.2.2. ManagedClusterAddOn を使用した VolSync のインストール

ManagedClusterAddOn を手動で追加して VolSync をマネージドクラスターにインストールするには、次の手順を実行します。

  1. ハブクラスターで、次の例のようなコンテンツを含む volsync-mcao.yaml という YAML ファイルを作成します。

    Copy to Clipboard Toggle word wrap
    apiVersion: addon.open-cluster-management.io/v1alpha1
    kind: ManagedClusterAddOn
    metadata:
      name: volsync
      namespace: <managed-cluster-1-namespace>
    spec: {}

    managed-cluster-1-namespace を、マネージドクラスターの 1 つの namespace に置き換えます。この namespace は、マネージドクラスターの名前と同じです。

    注: 名前は volsync である必要があります。

  2. 次の例のようなコマンドを入力して、ファイルを設定に適用します。

    Copy to Clipboard Toggle word wrap
    oc apply -f volsync-mcao.yaml
  3. 他のマネージドクラスターに対して手順を繰り返します。

    ManagedClusterAddOn リソースは、対応する各マネージドクラスターの namespace 内のハブクラスターに自動的に作成される必要があります。

1.2.1.3. Rsync-TLS レプリケーションの設定

Rsync-TLS レプリケーションを使用して、永続ボリュームの 1:1 非同期レプリケーションを作成できます。Rsync-TLS ベースのレプリケーションを災害復旧やリモートサイトへのデータ送信に使用できます。Rsync-TLS を使用する場合、VolSync は、stunnel によって提供される TLS で保護されたトンネル全体で Rsync を使用してデータを同期します。詳細は stunnel のドキュメント を参照してください。

次の例は、Rsync-TLS メソッドを使用して設定する方法を示しています。Rsync-TLS の追加情報は、VolSync ドキュメントの Usage を参照してください。

1.2.1.3.1. マネージドクラスター全体での Rsync-TLS レプリケーションの設定

Rsync-TLS ベースのレプリケーションの場合、ソースクラスターと宛先クラスターでカスタムリソースを設定します。カスタムリソースは、address 値を使用して送信元を宛先に接続し、stunnel によって提供される TLS で保護されたトンネルを使用して、転送されたデータの安全性を確保します。

Rsync-TLS レプリケーションを、source-ns namespace の source クラスターの永続ボリュームクレームから destination-ns namespace の destination クラスターの永続ボリュームクレームに設定するには、次の情報と例を参照してください。必要に応じて値を置き換えます。

  1. 宛先クラスターを設定します。

    1. 宛先クラスターで次のコマンドを実行して、ネームスペースを作成します。

      Copy to Clipboard Toggle word wrap
      oc create ns <destination-ns>

      destination-ns をレプリケーション先が配置されている namespace に置き換えます。

    2. replication_destination という名前の新しい YAML ファイルを作成し、次の内容をコピーします。

      Copy to Clipboard Toggle word wrap
      apiVersion: volsync.backube/v1alpha1
      kind: ReplicationDestination
      metadata:
        name: <destination>
        namespace: <destination-ns>
      spec:
        rsyncTLS:
          serviceType: LoadBalancer 
      1
      
          copyMethod: Snapshot
          capacity: 2Gi 
      2
      
          accessModes: [ReadWriteOnce]
          storageClassName: gp2-csi
          volumeSnapshotClassName: csi-aws-vsc
      1
      この例では、LoadBalancerServiceType 値が使用されます。ロードバランサーサービスはソースクラスターによって作成され、ソースマネージドクラスターが別の宛先マネージドクラスターに情報を転送できるようにします。ソースと宛先が同じクラスター上にある場合、または Submariner ネットワークサービスが設定されている場合は、サービスタイプとして ClusterIP を使用できます。ソースクラスターを設定するときに参照するシークレットのアドレスと名前に注意してください。capacity の値が、レプリケートされている永続ボリューム要求の容量と一致していることを確認してください。
      2
      capacity 値が、レプリケートされている永続ボリューム要求の容量と一致していることを確認してください。

      任意: 環境のデフォルト値とは異なるストレージクラス名とボリュームスナップショットクラス名を使用している場合は、storageClassName パラメーターと volumeSnapshotClassName パラメーターの値を指定します。

    3. 宛先クラスターで以下のコマンドを実行し、replicationdestination リソースを作成します。

      Copy to Clipboard Toggle word wrap
      oc create -n <destination-ns> -f replication_destination.yaml

      destination-ns は、宛先の namespace の名前に置き換えます。

      replicationdestination リソースが作成されると、以下のパラメーターおよび値がリソースに追加されます。

      パラメーター

      .status.rsyncTLS.address

      送信元クラスターと宛先クラスターが通信できるようにするために使用される宛先クラスターの IP アドレス。

      .status.rsyncTLS.keySecret

      ソースクラスターとの接続を認証する TLS キーを含むシークレットの名前。

    4. 以下のコマンドを実行して、ソースクラスターで使用する .status.rsyncTLS.address の値をコピーします。destination は、レプリケーション先のカスタムリソースの名前に置き換えます。destination-ns は、宛先の namespace の名前に置き換えます。

      Copy to Clipboard Toggle word wrap
      ADDRESS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsyncTLS.address}}`
      echo $ADDRESS

      出力は次のようになります。これは Amazon Web Services 環境のものです。

      Copy to Clipboard Toggle word wrap
      a831264645yhrjrjyer6f9e4a02eb2-5592c0b3d94dd376.elb.us-east-1.amazonaws.com
    5. 次のコマンドを実行して、シークレットの名前をコピーします。

      Copy to Clipboard Toggle word wrap
      KEYSECRET=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsyncTLS.keySecret}}`
      echo $KEYSECRET

      destination は、レプリケーション先のカスタムリソースの名前に置き換えます。

      destination-ns は、宛先の namespace の名前に置き換えます。

      ソースの設定時に、ソースクラスターで入力する必要があります。出力は、SSH キーシークレットファイルの名前である必要があります。これは、次の名前のようになります。

      Copy to Clipboard Toggle word wrap
      volsync-rsync-tls-destination-name
    6. 宛先クラスター宛先クラスターに対して次のコマンドを入力して、宛先クラスターからキーシークレットをコピーします。

      Copy to Clipboard Toggle word wrap
      oc get secret -n <destination-ns> $KEYSECRET -o yaml > /tmp/secret.yaml

      destination-ns をレプリケーション先が配置されている namespace に置き換えます。

    7. 以下のコマンドを入力して、vi エディターでシークレットファイルを開きます。

      Copy to Clipboard Toggle word wrap
      vi /tmp/secret.yaml
    8. 宛先クラスターのオープンシークレットファイルで、次の変更を行います。

      • namespace をソースクラスターの namespace に変更します。この例では、source-ns です。
      • 所有者の参照を削除します (.metadata.ownerReferences)。
    9. ソースクラスターで、ソースクラスターで次のコマンドを入力してシークレットファイルを作成します。

      Copy to Clipboard Toggle word wrap
      oc create -f /tmp/secret.yaml
  2. 複製するソース永続ボリュームクレームを特定します。

    注記: ソース永続ボリューム要求は CSI ストレージクラスにある必要があります。

  3. ReplicationSource アイテムを作成します。

    1. ソースクラスター上に replication_source という名前の新しい YAML ファイルを作成し、次の内容をコピーします。

      Copy to Clipboard Toggle word wrap
      apiVersion: volsync.backube/v1alpha1
      kind: ReplicationSource
      metadata:
        name: <source> 
      1
      
        namespace: <source-ns> 
      2
      
      spec:
        sourcePVC: <persistent_volume_claim> 
      3
      
        trigger:
          schedule: "*/3 * * * *" #/*
        rsyncTLS:
          keySecret: <mykeysecret> 
      4
      
          address: <my.host.com> 
      5
      
          copyMethod: Snapshot
          storageClassName: gp2-csi
          volumeSnapshotClassName: csi-aws-vsc
      1
      source は、レプリケーションソースカスタムリソースの名前に置き換えます。これを自動的に置き換える方法は、この手順のステップ 3-vi を参照してください。
      2
      source-ns をソースが置かれている永続ボリューム要求の namespace に置き換えます。これを自動的に置き換える方法は、この手順のステップ 3-vi を参照してください。
      3
      persistent_volume_claim は、ソース永続ボリューム要求の名前に置き換えます。
      4
      mykeysecret を宛先クラスターからソースクラスターにコピーしたシークレットの名前 ($KEYSECRET の値) に置き換えます。
      5
      my.host.com は、設定時に ReplicationDestination.status.rsyncTLS.address フィールドからコピーしたホストアドレスに置き換えます。sed コマンドの例は次のステップで見つけることができます。

      ストレージドライバーがクローン作成をサポートする場合は、copyMethod の値に Clone を使用すると、レプリケーションのより効率的なプロセスになる可能性があります。

      任意: 環境のデフォルト値とは異なるストレージクラス名とボリュームスナップショットクラス名を使用している場合は、storageClassName パラメーターと volumeSnapshotClassName パラメーターの値を指定します。

      永続ボリュームの同期方法を設定できるようになりました。

    2. ソースクラスターで、以下のコマンドを入力して ReplicationSource オブジェクトの address および keySecret の値を、宛先クラスターから書き留めた値に置き換えて replication_source.yaml ファイルを変更します。

      Copy to Clipboard Toggle word wrap
      sed -i "s/<my.host.com>/$ADDRESS/g" replication_source.yaml
      sed -i "s/<mykeysecret>/$KEYSECRET/g" replication_source.yaml
      oc create -n <source> -f replication_source.yaml

      my.host.com は、設定時に ReplicationDestination.status.rsyncTLS.address フィールドからコピーしたホストアドレスに置き換えます。

      keySecret を設定時に ReplicationDestination.status.rsyncTLS.keySecret フィールドからコピーしたキーに置き換えます。

      source を、ソースが置かれている永続ボリューム要求の名前に置き換えます。

      注記: 複製する永続ボリューム要求と同じ namespace にファイルを作成する必要があります。

    3. ReplicationSource オブジェクトで以下のコマンドを実行して、レプリケーションが完了したことを確認します。

      Copy to Clipboard Toggle word wrap
      oc describe ReplicationSource -n <source-ns> <source>

      source-ns をソースが置かれている永続ボリューム要求の namespace に置き換えます。

      source は、レプリケーションソースのカスタムリソースの名前に置き換えます。

      レプリケーションが成功した場合、出力は次の例のようになります。

      Copy to Clipboard Toggle word wrap
      Status:
        Conditions:
          Last Transition Time:  2021-10-14T20:48:00Z
          Message:               Synchronization in-progress
          Reason:                SyncInProgress
          Status:                True
          Type:                  Synchronizing
          Last Transition Time:  2021-10-14T20:41:41Z
          Message:               Reconcile complete
          Reason:                ReconcileComplete
          Status:                True
          Type:                  Reconciled
        Last Sync Duration:      5m20.764642395s
        Last Sync Time:          2021-10-14T20:47:01Z
        Next Sync Time:          2021-10-14T20:48:00Z

      Last Sync Time に時間がリストされていない場合は、レプリケーションが完了していません。

元の永続ボリュームのレプリカがあります。

1.2.1.4. Rsync レプリケーションの設定

重要: セキュリティーを強化するには、Rsync の代わりに Rsync-TLS を使用してください。Rsync-TLS を使用すると、永続ボリュームのレプリケーションに必要のない昇格されたユーザー権限の使用を回避できます。

Rsync レプリケーションを使用して、永続ボリュームの 1:1 非同期レプリケーションを作成できます。Rsync ベースのレプリケーションを災害復旧やリモートサイトへのデータ送信に使用できます。

次の例は、Rsync メソッドを使用して設定する方法を示しています。

1.2.1.4.1. マネージドクラスター間での Rsync レプリケーションの設定

Rsync ベースのレプリケーションの場合は、ソースクラスターおよび宛先クラスターでカスタムリソースを設定します。カスタムリソースは、address 値を使用してソースを宛先に接続し、sshKeys を使用して転送されたデータがセキュアであることを確認します。

注記: address および sshKeys の値を宛先からソースにコピーし、ソースを設定する前に宛先を設定する必要があります。

この例では、source-ns namespace の source クラスターの永続ボリューム要求から destination-ns namespace の destination クラスターの永続ボリューム要求に Rsync レプリケーションを設定する手順を説明します。必要に応じて、これらの値を他の値に置き換えることができます。

  1. 宛先クラスターを設定します。

    1. 宛先クラスターで次のコマンドを実行して、ネームスペースを作成します。

      Copy to Clipboard Toggle word wrap
      oc create ns <destination-ns>

      destination-ns を、オンサイトのボリューム要求ごとに宛先が含まれる namespace の名前に置き換えます。

    2. 以下の YAML コンテンツをコピーし、replication_destination.yaml という名前の新規ファイルを作成します。

      Copy to Clipboard Toggle word wrap
      apiVersion: volsync.backube/v1alpha1
      kind: ReplicationDestination
      metadata:
        name: <destination>
        namespace: <destination-ns>
      spec:
        rsync:
          serviceType: LoadBalancer
          copyMethod: Snapshot
          capacity: 2Gi
          accessModes: [ReadWriteOnce]
          storageClassName: gp2-csi
          volumeSnapshotClassName: csi-aws-vsc

      注記: capacity の値は、レプリケートされる永続ボリューム要求の容量と一致する必要があります。

      destination は、宛先 CR の名前に置き換えます。

      destination-ns は、宛先の namespace の名前に置き換えます。

      この例では、LoadBalancerServiceType 値が使用されます。ロードバランサーサービスはソースクラスターによって作成され、ソースマネージドクラスターが別の宛先マネージドクラスターに情報を転送できるようにします。ソースと宛先が同じクラスター上にある場合、または Submariner ネットワークサービスが設定されている場合は、サービスタイプとして ClusterIP を使用できます。ソースクラスターを設定するときに参照するシークレットのアドレスと名前をメモします。

      storageClassName および volumeSnapshotClassName は任意のパラメーターです。特に、環境のデフォルト値とは異なるストレージクラスおよびボリュームスナップショットクラス名を使用している場合は、環境の値を指定してください。

    3. 宛先クラスターで以下のコマンドを実行し、replicationdestination リソースを作成します。

      Copy to Clipboard Toggle word wrap
      oc create -n <destination-ns> -f replication_destination.yaml

      destination-ns は、宛先の namespace の名前に置き換えます。

      replicationdestination リソースが作成されると、以下のパラメーターおよび値がリソースに追加されます。

      パラメーター

      .status.rsync.address

      送信元クラスターと宛先クラスターが通信できるようにするために使用される宛先クラスターの IP アドレス。

      .status.rsync.sshKeys

      ソースクラスターから宛先クラスターへの安全なデータ転送を可能にする SSH キーファイルの名前。

    4. 以下のコマンドを実行して、ソースクラスターで使用する .status.rsync.address の値をコピーします。

      Copy to Clipboard Toggle word wrap
      ADDRESS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.address}}`
      echo $ADDRESS

      destination は、レプリケーション先のカスタムリソースの名前に置き換えます。

      destination-ns は、宛先の namespace の名前に置き換えます。

      出力は、Amazon Web Services 環境の次の出力のように表示されます。

      Copy to Clipboard Toggle word wrap
      a831264645yhrjrjyer6f9e4a02eb2-5592c0b3d94dd376.elb.us-east-1.amazonaws.com
    5. 次のコマンドを実行して、シークレットの名前をコピーします。

      Copy to Clipboard Toggle word wrap
      SSHKEYS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.sshKeys}}`
      echo $SSHKEYS

      destination は、レプリケーション先のカスタムリソースの名前に置き換えます。

      destination-ns は、宛先の namespace の名前に置き換えます。

      ソースの設定時に、ソースクラスターで入力する必要があります。出力は、SSH キーシークレットファイルの名前である必要があります。これは、次の名前のようになります。

      Copy to Clipboard Toggle word wrap
      volsync-rsync-dst-src-destination-name
    6. 宛先クラスターに対して次のコマンドを入力して、宛先クラスターから SSH シークレットをコピーします。

      Copy to Clipboard Toggle word wrap
      oc get secret -n <destination-ns> $SSHKEYS -o yaml > /tmp/secret.yaml

      destination-ns を、宛先が置かれている永続ボリューム要求の namespace に置き換えます。

    7. 以下のコマンドを入力して、vi エディターでシークレットファイルを開きます。

      Copy to Clipboard Toggle word wrap
      vi /tmp/secret.yaml
    8. 宛先クラスターのオープンシークレットファイルで、次の変更を行います。

      • namespace をソースクラスターの namespace に変更します。この例では、source-ns です。
      • 所有者の参照を削除します (.metadata.ownerReferences)。
    9. ソースクラスターで、ソースクラスターで次のコマンドを入力してシークレットファイルを作成します。

      Copy to Clipboard Toggle word wrap
      oc create -f /tmp/secret.yaml
  2. 複製するソース永続ボリュームクレームを特定します。

    注記: ソース永続ボリューム要求は CSI ストレージクラスにある必要があります。

  3. ReplicationSource アイテムを作成します。

    1. 以下の YAML コンテンツをコピーして、ソースクラスターに replication_source.yaml という名前の新規ファイルを作成します。

      Copy to Clipboard Toggle word wrap
      apiVersion: volsync.backube/v1alpha1
      kind: ReplicationSource
      metadata:
        name: <source>
        namespace: <source-ns>
      spec:
        sourcePVC: <persistent_volume_claim>
        trigger:
          schedule: "*/3 * * * *" #/*
        rsync:
          sshKeys: <mysshkeys>
          address: <my.host.com>
          copyMethod: Snapshot
          storageClassName: gp2-csi
          volumeSnapshotClassName: csi-aws-vsc

      source は、レプリケーションソースカスタムリソースの名前に置き換えます。これを自動的に置き換える方法は、この手順のステップ 3-vi を参照してください。

      source-ns をソースが置かれている永続ボリューム要求の namespace に置き換えます。これを自動的に置き換える方法は、この手順のステップ 3-vi を参照してください。

      persistent_volume_claim は、ソース永続ボリューム要求の名前に置き換えます。

      mysshkeys は、設定時に ReplicationDestination.status.rsync.sshKeys フィールドからコピーしたキーに置き換えます。

      my.host.com は、設定時に ReplicationDestination.status.rsync.address フィールドからコピーしたホストアドレスに置き換えます。

      ストレージドライバーがクローン作成をサポートする場合は、copyMethod の値に Clone を使用すると、レプリケーションのより効率的なプロセスになる可能性があります。

      StorageClassName および volumeSnapshotClassName はオプションのパラメーターです。ご使用の環境のデフォルトとは異なるストレージクラスおよびボリュームスナップショットクラス名を使用している場合は、それらの値を指定してください。

      永続ボリュームの同期方法を設定できるようになりました。

    2. ソースクラスターで、以下のコマンドを入力して ReplicationSource オブジェクトの address および sshKeys の値を、宛先クラスターから書き留めた値に置き換えて replication_source.yaml ファイルを変更します。

      Copy to Clipboard Toggle word wrap
      sed -i "s/<my.host.com>/$ADDRESS/g" replication_source.yaml
      sed -i "s/<mysshkeys>/$SSHKEYS/g" replication_source.yaml
      oc create -n <source> -f replication_source.yaml

      my.host.com は、設定時に ReplicationDestination.status.rsync.address フィールドからコピーしたホストアドレスに置き換えます。

      mysshkeys は、設定時に ReplicationDestination.status.rsync.sshKeys フィールドからコピーしたキーに置き換えます。

      source を、ソースが置かれている永続ボリューム要求の名前に置き換えます。

      注記: 複製する永続ボリューム要求と同じ namespace にファイルを作成する必要があります。

    3. ReplicationSource オブジェクトで以下のコマンドを実行して、レプリケーションが完了したことを確認します。

      Copy to Clipboard Toggle word wrap
      oc describe ReplicationSource -n <source-ns> <source>

      source-ns をソースが置かれている永続ボリューム要求の namespace に置き換えます。

      source は、レプリケーションソースのカスタムリソースの名前に置き換えます。

      レプリケーションが成功した場合、出力は次の例のようになります。

      Copy to Clipboard Toggle word wrap
      Status:
        Conditions:
          Last Transition Time:  2021-10-14T20:48:00Z
          Message:               Synchronization in-progress
          Reason:                SyncInProgress
          Status:                True
          Type:                  Synchronizing
          Last Transition Time:  2021-10-14T20:41:41Z
          Message:               Reconcile complete
          Reason:                ReconcileComplete
          Status:                True
          Type:                  Reconciled
        Last Sync Duration:      5m20.764642395s
        Last Sync Time:          2021-10-14T20:47:01Z
        Next Sync Time:          2021-10-14T20:48:00Z

      Last Sync Time に時間がリストされていない場合は、レプリケーションが完了していません。

元の永続ボリュームのレプリカがあります。

1.2.1.5. restic バックアップの設定

restic ベースのバックアップは、永続ボリュームの restic ベースのバックアップコピーを、restic-config.yaml シークレットファイルで指定された場所にコピーします。restic バックアップは、クラスター間でデータを同期しませんが、データをバックアップします。

次の手順を実行して、restic ベースのバックアップを設定します。

  1. 次の YAML コンテンツのようなシークレットを作成して、バックアップイメージが保存されるリポジトリーを指定します。

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: Secret
    metadata:
      name: restic-config
    type: Opaque
    stringData:
      RESTIC_REPOSITORY: <my-restic-repository>
      RESTIC_PASSWORD: <my-restic-password>
      AWS_ACCESS_KEY_ID: access
      AWS_SECRET_ACCESS_KEY: password

    my-restic-repository は、バックアップファイルを保存する S3 バケットリポジトリーの場所に置き換えます。

    my-restic-password は、リポジトリーへのアクセスに必要な暗号化キーに置き換えます。

    必要に応じて、アクセスパスワード は、プロバイダーのクレデンシャルに置き換えます。

    新しいリポジトリーを準備する必要がある場合の手順は、新しいリポジトリーの準備 を参照してください。この手順を使用する場合は、restic init コマンドを実行してリポジトリーを初期化する必要がある手順をスキップしてください。VolSync は、最初のバックアップ中にリポジトリーを自動的に初期化します。

    重要: 複数の永続ボリューム要求を同じ S3 バケットにバックアップする場合には、バケットへのパスは永続ボリュームクレームごとに一意である必要があります。各永続ボリュームクレームは個別の ReplicationSource でバックアップされるので、個別の restic-config シークレットが必要です。

    同じ S3 バケットを共有することで、各 ReplicationSource は S3 バケット全体への書き込みアクセスが割り当てられます。

  2. 次の YAML コンテンツに似た ReplicationSource オブジェクトを作成して、バックアップポリシーを設定します。

    Copy to Clipboard Toggle word wrap
    apiVersion: volsync.backube/v1alpha1
    kind: ReplicationSource
    metadata:
      name: mydata-backup
    spec:
      sourcePVC: <source>
      trigger:
        schedule: "*/30 * * * *" #\*
      restic:
        pruneIntervalDays: 14
        repository: <restic-config>
        retain:
          hourly: 6
          daily: 5
          weekly: 4
          monthly: 2
          yearly: 1
        copyMethod: Clone
      # The StorageClass to use when creating the PiT copy (same as source PVC if omitted)
      #storageClassName: my-sc-name
      # The VSC to use if the copy method is Snapshot (default if omitted)
      #volumeSnapshotClassName: my-vsc-name

    source は、バックアップしている永続ボリュームクレームに置き換えます。

    schedule の値は、バックアップを実行する頻度に置き換えます。この例では、30 分ごとにスケジュールが指定されています。スケジュールの設定の詳細は、同期のスケジュール を参照してください。

    PruneIntervalDays の値は、インスタンスで次にデータの圧縮するまでの経過時間 (日数) に置き換えて、スペースを節約します。プルーニング操作は、実行中に大量の I/O トラフィックを生成する可能性があります。

    restic-config は、ステップ 1 で作成したシークレットの名前に置き換えます。

    retain の値は、バックアップしたイメージの保持ポリシーに設定します。

    ベストプラクティス: CopyMethod の値に Clone を使用して、特定の時点のイメージが確実に保存されるようにします。

注記: デフォルトでは、restic ムーバーは root 権限なしで実行されます。restic ムーバーを root として実行する場合は、次のコマンドを実行して、昇格された権限のアノテーションを namespace に追加します。

Copy to Clipboard Toggle word wrap
oc annotate namespace <namespace> volsync.backube/privileged-movers=true

<namespace> を namespace の名前に置き換えます。

1.2.1.5.1. restic バックアップの復元

コピーされたデータを restic バックアップから新しい永続ボリューム要求に復元できます。ベストプラクティス: バックアップ 1 つだけを新しい永続ボリューム要求に復元します。restic バックアップを復元するには、次の手順を実行します。

  1. 次の例のように、新しいデータを含む新しい永続ボリュームクレームを作成します。

    Copy to Clipboard Toggle word wrap
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: <pvc-name>
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 3Gi

    pvc-name は、新しい永続ボリュームクレームの名前に置き換えます。

  2. 次の例のような ReplicationDestination カスタムリソースを作成して、データの復元先を指定します。

    Copy to Clipboard Toggle word wrap
    apiVersion: volsync.backube/v1alpha1
    kind: ReplicationDestination
    metadata:
      name: <destination>
    spec:
      trigger:
        manual: restore-once
      restic:
        repository: <restic-repo>
        destinationPVC: <pvc-name>
        copyMethod: Direct

    destination は、宛先 CR の名前に置き換えます。

    restic-repo は、ソースが保存されているリポジトリーへのパスに置き換えます。

    pvc-name は、データを復元する新しい永続ボリュームクレームの名前に置き換えます。これには、新しいボリューム要求をプロビジョニングするのではなく、既存の永続ボリューム要求を使用してください。

復元プロセスは 1 回だけ完了する必要があります。この例では、最新のバックアップを復元します。復元オプションの詳細は、VolSync ドキュメントの Restore options を参照してください。

1.2.1.6. Rclone レプリケーションの設定

Rclone バックアップは、Rclone を使用して AWS S3 などの中間オブジェクトストレージの場所を介して単一の永続ボリュームを複数の場所にコピーします。複数の場所にデータを配布する場合に役立ちます。

次の手順を実行して、Rclone レプリケーションを設定します。

  1. 次の例のような ReplicationSource カスタムリソースを作成します。

    Copy to Clipboard Toggle word wrap
    apiVersion: volsync.backube/v1alpha1
    kind: ReplicationSource
    metadata:
      name: <source>
      namespace: <source-ns>
    spec:
      sourcePVC: <source-pvc>
      trigger:
        schedule: "*/6 * * * *" #\*
      rclone:
        rcloneConfigSection: <intermediate-s3-bucket>
        rcloneDestPath: <destination-bucket>
        rcloneConfig: <rclone-secret>
        copyMethod: Snapshot
        storageClassName: <my-sc-name>
        volumeSnapshotClassName: <my-vsc>

    source-pvc は、レプリケーションソースのカスタムリソースの名前に置き換えます。

    source-ns をソースが置かれている永続ボリューム要求の namespace に置き換えます。

    source は、レプリケートしている永続ボリュームクレームに置き換えます。

    スケジュール の値は、レプリケーションを実行する頻度に置き換えます。この例では、6 分ごとにスケジュールが指定されています。この値は引用符で囲む必要があります。詳細は、同期のスケジュール を参照してください。

    intermediate-s3-bucket は、Rclone 設定ファイルの設定セクションへのパスに置き換えます。

    destination-bucket は、レプリケートされたファイルをコピーするオブジェクトバケットへのパスに置き換えます。

    rclone-secret は、Rclone 設定情報を含むシークレットの名前に置き換えます。

    copyMethod の値は CloneDirect、または Snapshot として設定します。この値は、ある特定の時点でのコピーを生成するかどうか、生成する場合は、生成方法を指定します。

    my-sc-name は、ポイントインタイムコピーに使用するストレージクラスの名前に置き換えます。指定しない場合、ソースボリュームのストレージクラスが使用されます。

    スナップショットcopyMethod として指定した場合は my-vsc を使用する VolumeSnapshotClass の名前に置き換えます。これは、他のタイプの copyMethod には必要ありません。

  2. 次の例のような ReplicationDestination カスタムリソースを作成します。

    Copy to Clipboard Toggle word wrap
    apiVersion: volsync.backube/v1alpha1
    kind: ReplicationDestination
    metadata:
      name: database-destination
      namespace: dest
    spec:
      trigger:
        schedule: "3,9,15,21,27,33,39,45,51,57 * * * *" #/*
      rclone:
        rcloneConfigSection: <intermediate-s3-bucket>
        rcloneDestPath: <destination-bucket>
        rcloneConfig: <rclone-secret>
        copyMethod: Snapshot
        accessModes: [ReadWriteOnce]
        capacity: 10Gi
        storageClassName: <my-sc>
        volumeSnapshotClassName: <my-vsc>

    スケジュール の値は、レプリケーションを宛先に移動する頻度に置き換えます。移動元と宛先のスケジュールをオフセットして、データが宛先からプルされる前に複製を完了できるようにする必要があります。この例では、オフセットは 3 分で、6 分間隔でスケジュールされています。この値は引用符で囲む必要があります。スケジュールの詳細は、同期のスケジュール を参照してください。

    intermediate-s3-bucket は、Rclone 設定ファイルの設定セクションへのパスに置き換えます。

    destination-bucket は、レプリケートされたファイルをコピーするオブジェクトバケットへのパスに置き換えます。

    rclone-secret は、Rclone 設定情報を含むシークレットの名前に置き換えます。

    copyMethod の値は CloneDirect、または Snapshot として設定します。この値は、ある特定の時点でのコピーを生成するかどうか、生成する場合は、生成方法を指定します。

    accessModes の値は、永続ボリュームクレームのアクセスモードを指定します。有効な値は ReadWriteOnce または ReadWriteMany です。

    容量 は宛先ボリュームのサイズを指定します。このサイズは、着信データを格納するのに十分な大きさに指定します。

    my-sc は、特定の時点のコピーの宛先として使用するストレージクラスの名前に置き換えます。指定しない場合、システムストレージクラスが使用されます。

    スナップショットcopyMethod として指定した場合は my-vsc を使用する VolumeSnapshotClass の名前に置き換えます。これは、他のタイプの copyMethod には必要ありません。含まれていない場合は、システムのデフォルトの VolumeSnapshotClass が使用されます。

注記: デフォルトでは、rclone ムーバーは root 権限なしで実行されます。rclone ムーバーを root として実行する場合は、次のコマンドを実行して、昇格された権限のアノテーションを namespace に追加します。

Copy to Clipboard Toggle word wrap
oc annotate namespace <namespace> volsync.backube/privileged-movers=true

<namespace> を namespace の名前に置き換えます。

1.2.1.7. 関連情報

詳細は、以下のトピックを参照してください。

1.2.2. 複製されたイメージを使用可能な永続的なボリュームクレームに変換

データを復元するには、レプリケートされたイメージを永続ボリューム要求に変換する必要がある場合があります。

VolumeSnapshot を使用して ReplicationDestination の場所から永続ボリューム要求を複製または復元すると、VolumeSnapshot が作成されます。VolumeSnapshot には、最後に成功した同期からの latestImage が含まれます。イメージのコピーは、使用する前に永続的なボリュームクレームに変換する必要があります。VolSync ReplicationDestination ボリュームポピュレーターを使用すると、イメージのコピーを使用可能な永続ボリュームクレームに変換できます。

  1. 永続ボリューム要求の復元先とする ReplicationDestination を参照する dataSourceRef を使用して永続ボリューム要求を作成します。この永続ボリューム要求には、ReplicationDestination カスタムリソース定義の status.latestImage 設定で指定された VolumeSnapshot の内容が設定されます。

    次の YAML コンテンツは、使用される可能性のある永続ボリューム要求のサンプルを示しています。

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: <pvc-name>
      namespace: <destination-ns>
    spec:
      accessModes:
        - ReadWriteOnce
      dataSourceRef:
        kind: ReplicationDestination
        apiGroup: volsync.backube
        name: <replicationdestination_to_replace>
      resources:
        requests:
          storage: 2Gi

    pvc-name は、新規の永続ボリューム要求の名前に置き換えます。

    destination-ns は、永続ボリューム要求および ReplicationDestination が置かれている namespace に置き換えます。

    replicationdestination_to_replaceReplicationDestination 名に置き換えます。

    ベストプラクティス: 値が少なくとも最初のソース永続ボリュームクレームと同じサイズである場合は、resources.requests.storage を異なる値で更新できます。

  2. 次のコマンドを入力して、永続ボリュームクレームが環境で実行されていることを確認します。

    Copy to Clipboard Toggle word wrap
    $ kubectl get pvc -n <destination-ns>

注記:

latestImage が存在しない場合、永続ボリューム要求は ReplicationDestination が完了し、スナップショットが利用可能になるまで保留状態のままになります。ReplicationDestination と、ReplicationDestination を使用する永続ボリュームコントローラーを同時に作成できます。永続ボリューム要求は、ReplicationDestination がレプリケーションを完了し、スナップショットが使用可能になった後にのみ、ボリューム作成プロセスを開始します。スナップショットは、.status.latestImage にあります。

さらに、使用されているストレージクラスの volumeBindingMode 値が WaitForFirstConsumer である場合、ボリュームポピュレーターは、永続ボリューム要求のコンシューマーが存在するまで待機してから、永続ボリューム要求が読み込まれます。永続ボリューム要求をマウントする Pod など、コンシューマーにアクセス権が必要な場合、そのボリュームにはデータが入力されます。VolSync ボリュームポピュレーターコントローラーは、ReplicationDestinationlatestImage を使用します。latestImage は、永続ボリューム制御の作成後にレプリケーションが完了するたびに更新されます。

1.2.3. 同期のスケジューリング

レプリケーションの開始方法を決定するときは、常に実行する、スケジュールどおりに実行する、または手動で実行するという 3 つのオプションから選択します。レプリケーションのスケジュールは、よく選択されるオプションです。

スケジュール オプションは、スケジュール時にレプリケーションを実行します。スケジュールは cronspec で定義されるため、スケジュールを時間間隔または特定の時間として設定できます。スケジュールの値の順序は次のとおりです。

"minute (0-59) hour (0-23) day-of-month (1-31) month (1-12) day-of-week (0-6)"

レプリケーションはスケジュールされた時間に開始されます。このレプリケーションオプションの設定は、以下の内容のようになります。

Copy to Clipboard Toggle word wrap
spec:
  trigger:
    schedule: "*/6 * * * *"

これらの方法のいずれかを有効にしたら、設定した方法に従って同期スケジュールが実行されます。

追加情報およびオプションは、VolSync のドキュメントを参照してください。

1.2.4. VolSync の詳細設定

永続ボリュームをレプリケートするときに、独自のシークレットを作成するなど、VolSync をさらに設定できます。

1.2.4.1. Rsync-TLS レプリケーション用のシークレットの作成

送信元と宛先は、TLS 接続の共有キーにアクセスできる必要があります。キーの場所は keySecret フィールドで確認できます。.spec.rsyncTLS.keySecret にシークレット名を指定しない場合、シークレット名は自動的に生成され、.status.rsyncTLS.keySecret に追加されます。

独自のシークレットを作成するには、次の手順を実行します。

  1. シークレットには次の形式を使用します: <id>:<at_least_32_hex_digits>

    次の例を参照してください: 1:23b7395fafc3e842bd8ac0fe142e6ad1

  2. 前の例に対応する次の secret.yaml の例を参照してください。

    Copy to Clipboard Toggle word wrap
    apiVersion: v1
    data:
      # echo -n 1:23b7395fafc3e842bd8ac0fe142e6ad1 | base64
      psk.txt: MToyM2I3Mzk1ZmFmYzNlODQyYmQ4YWMwZmUxNDJlNmFkMQ==
    kind: Secret
    metadata:
      name: tls-key-secret
    type: Opaque
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat, Inc.