1.2. VolSync の永続ボリューム複製サービス
VolSync は、レプリケーションの互換性がないストレージタイプが指定されたクラスター全体、または 1 つのクラスター内の永続ボリュームの非同期レプリケーションを有効にする Kubernetes Operator です。これは Container Storage Interface (CSI) を使用して互換性の制限を解消します。VolSync Operator を環境にデプロイした後、それを活用して永続データのコピーを作成および保守できます。VolSync は、サポートされているバージョンの Red Hat OpenShift Container Platform クラスターでのみ永続ボリューム要求を複製できます。
重要: VolSync は、Filesystem の volumeMode を使用した永続ボリューム要求の複製のみをサポートします。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 環境
- 同じ Red Hat Advanced Cluster Management ハブクラスターに対して 2 つ以上のマネージドクラスター
-
VolSync で設定しているクラスター間のネットワーク接続。クラスターが同じネットワーク上にない場合は、Submariner マルチクラスターネットワーキングおよびサービスディスカバリー を設定し、
ServiceTypeのClusterIP値を使用してクラスターをネットワークで接続するか、ServiceTypeのLoadBalancer値を持つロードバランサーを使用することができます。 - ソース永続ボリュームに使用するストレージドライバーは、CSI 互換であり、スナップショットをサポートできる必要があります。
1.2.1.2. マネージドクラスターへの VolSync のインストール リンクのコピーリンクがクリップボードにコピーされました!
VolSync が 1 つのクラスターの永続ボリューム要求を別のクラスターの永続ボリューム要求に複製できるようにするには、ソースとターゲットの両方のマネージドクラスターに VolSync をインストールする必要があります。
VolSync は独自の namespace を作成しないため、他の OpenShift Container Platform のすべての namespace Operator と同じ namespace にあります。VolSync の Operator 設定に加えた変更は、チャネル更新の手動承認に変更した場合など、同じ namespace 内の他の Operator にも影響します。
2 つの方法のいずれかを使用して、環境内の 2 つのクラスターに VolSync をインストールできます。次のセクションで説明するように、ハブクラスター内の各マネージドクラスターにラベルを追加するか、ManagedClusterAddOn を手動で作成して適用することができます。
1.2.1.2.1. ラベルを使用した VolSync のインストール リンクのコピーリンクがクリップボードにコピーされました!
ラベルを追加して、マネージドクラスターに VolSync をインストールします。
Red Hat Advanced Cluster Management コンソールから以下のステップを実行します。
-
詳細を表示するには、ハブクラスターコンソールの
Clustersページからマネージドクラスターの 1 つを選択します。 Labels フィールドに、次のラベルを追加します。
addons.open-cluster-management.io/volsync=trueVolSync サービス Pod はマネージドクラスターにインストールされます。
- 他のマネージドクラスターに同じラベルを追加します。
各マネージドクラスターで次のコマンドを実行して、VolSync Operator がインストールされていることを確認します。
oc get csv -n openshift-operatorsインストール時に VolSync の Operator がリストされています。
-
詳細を表示するには、ハブクラスターコンソールの
コマンドラインインターフェイスから次の手順を実行します。
- ハブクラスターでコマンドラインセッションを開始します。
次のコマンドを入力して、最初のクラスターにラベルを追加します。
oc label managedcluster <managed-cluster-1> "addons.open-cluster-management.io/volsync"="true"managed-cluster-1をマネージドクラスターの 1 つの名前に置き換えます。次のコマンドを入力して、ラベルを 2 番目のクラスターに追加します。
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 をマネージドクラスターにインストールするには、次の手順を実行します。
ハブクラスターで、次の例のようなコンテンツを含む
volsync-mcao.yamlという YAML ファイルを作成します。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である必要があります。次の例のようなコマンドを入力して、ファイルを設定に適用します。
oc apply -f volsync-mcao.yaml他のマネージドクラスターに対して手順を繰り返します。
ManagedClusterAddOnリソースは、対応する各マネージドクラスターの namespace 内のハブクラスターに自動的に作成される必要があります。
1.2.1.2.3. VolSync の ManagedClusterAddOn の更新 リンクのコピーリンクがクリップボードにコピーされました!
使用している Red Hat Advanced Cluster Management のバージョンによっては、VolSync のバージョンを更新する必要がある場合があります。VolSync の ManagedClusterAddOn リソースを更新するには、次の手順を実行します。
次のアノテーションを
ManagedClusterAddOnリソースに追加します。annotations: operator-subscription-channel: stable-0.9-
VolySync のデプロイ元となる
operator-subscription-channelを定義します。 -
ManagedClusterAddOnリソースに移動し、選択したoperator-subscription-channelが含まれていることを確認して、Volsync バージョンが更新されたことを確認します。
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 クラスターの永続ボリュームクレームに設定するには、次の情報と例を参照してください。必要に応じて値を置き換えます。
宛先クラスターを設定します。
宛先クラスターで次のコマンドを実行して、ネームスペースを作成します。
oc create ns <destination-ns>destination-nsをレプリケーション先が配置されている namespace に置き換えます。replication_destinationという名前の新しい YAML ファイルを作成し、次の内容をコピーします。apiVersion: volsync.backube/v1alpha1 kind: ReplicationDestination metadata: name: <destination> namespace: <destination-ns> spec: rsyncTLS: serviceType: LoadBalancer1 copyMethod: Snapshot capacity: 2Gi2 accessModes: [ReadWriteOnce] storageClassName: gp2-csi volumeSnapshotClassName: csi-aws-vsc- 1
- この例では、
LoadBalancerのServiceType値が使用されます。ロードバランサーサービスはソースクラスターによって作成され、ソースマネージドクラスターが別の宛先マネージドクラスターに情報を転送できるようにします。ソースと宛先が同じクラスター上にある場合、または Submariner ネットワークサービスが設定されている場合は、サービスタイプとしてClusterIPを使用できます。ソースクラスターを設定するときに参照するシークレットのアドレスと名前に注意してください。capacityの値が、レプリケートされている永続ボリューム要求の容量と一致していることを確認してください。 - 2
capacity値が、レプリケートされている永続ボリューム要求の容量と一致していることを確認してください。
任意: 環境のデフォルト値とは異なるストレージクラス名とボリュームスナップショットクラス名を使用している場合は、
storageClassNameパラメーターとvolumeSnapshotClassNameパラメーターの値を指定します。宛先クラスターで以下のコマンドを実行し、
replicationdestinationリソースを作成します。oc create -n <destination-ns> -f replication_destination.yamldestination-nsは、宛先の namespace の名前に置き換えます。replicationdestinationリソースが作成されると、以下のパラメーターおよび値がリソースに追加されます。Expand パラメーター 値 .status.rsyncTLS.address送信元クラスターと宛先クラスターが通信できるようにするために使用される宛先クラスターの IP アドレス。
.status.rsyncTLS.keySecretソースクラスターとの接続を認証する TLS キーを含むシークレットの名前。
以下のコマンドを実行して、ソースクラスターで使用する
.status.rsyncTLS.addressの値をコピーします。destinationは、レプリケーション先のカスタムリソースの名前に置き換えます。destination-nsは、宛先の namespace の名前に置き換えます。ADDRESS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsyncTLS.address}}` echo $ADDRESS出力は次のようになります。これは Amazon Web Services 環境のものです。
a831264645yhrjrjyer6f9e4a02eb2-5592c0b3d94dd376.elb.us-east-1.amazonaws.com次のコマンドを実行して、シークレットの名前をコピーします。
KEYSECRET=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsyncTLS.keySecret}}` echo $KEYSECRETdestinationは、レプリケーション先のカスタムリソースの名前に置き換えます。destination-nsは、宛先の namespace の名前に置き換えます。ソースの設定時に、ソースクラスターで入力する必要があります。出力は、SSH キーシークレットファイルの名前である必要があります。これは、次の名前のようになります。
volsync-rsync-tls-destination-name宛先クラスター宛先クラスターに対して次のコマンドを入力して、宛先クラスターからキーシークレットをコピーします。
oc get secret -n <destination-ns> $KEYSECRET -o yaml > /tmp/secret.yamldestination-nsをレプリケーション先が配置されている namespace に置き換えます。以下のコマンドを入力して、
viエディターでシークレットファイルを開きます。vi /tmp/secret.yaml宛先クラスターのオープンシークレットファイルで、次の変更を行います。
-
namespace をソースクラスターの namespace に変更します。この例では、
source-nsです。 -
所有者の参照を削除します (
.metadata.ownerReferences)。
-
namespace をソースクラスターの namespace に変更します。この例では、
ソースクラスターで、ソースクラスターで次のコマンドを入力してシークレットファイルを作成します。
oc create -f /tmp/secret.yaml
複製するソース永続ボリュームクレームを特定します。
注記: ソース永続ボリューム要求は CSI ストレージクラスにある必要があります。
ReplicationSourceアイテムを作成します。ソースクラスター上に
replication_sourceという名前の新しい YAML ファイルを作成し、次の内容をコピーします。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パラメーターの値を指定します。永続ボリュームの同期方法を設定できるようになりました。
ソースクラスターで、以下のコマンドを入力して
ReplicationSourceオブジェクトのaddressおよびkeySecretの値を、宛先クラスターから書き留めた値に置き換えてreplication_source.yamlファイルを変更します。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.yamlmy.host.comは、設定時にReplicationDestinationの.status.rsyncTLS.addressフィールドからコピーしたホストアドレスに置き換えます。keySecretを設定時にReplicationDestinationの.status.rsyncTLS.keySecretフィールドからコピーしたキーに置き換えます。sourceを、ソースが置かれている永続ボリューム要求の名前に置き換えます。注記: 複製する永続ボリューム要求と同じ namespace にファイルを作成する必要があります。
ReplicationSourceオブジェクトで以下のコマンドを実行して、レプリケーションが完了したことを確認します。oc describe ReplicationSource -n <source-ns> <source>source-nsをソースが置かれている永続ボリューム要求の namespace に置き換えます。sourceは、レプリケーションソースのカスタムリソースの名前に置き換えます。レプリケーションが成功した場合、出力は次の例のようになります。
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:00ZLast 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 レプリケーションを設定する手順を説明します。必要に応じて、これらの値を他の値に置き換えることができます。
宛先クラスターを設定します。
宛先クラスターで次のコマンドを実行して、ネームスペースを作成します。
oc create ns <destination-ns>destination-nsを、オンサイトのボリューム要求ごとに宛先が含まれる namespace の名前に置き換えます。以下の YAML コンテンツをコピーし、
replication_destination.yamlという名前の新規ファイルを作成します。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 の名前に置き換えます。この例では、
LoadBalancerのServiceType値が使用されます。ロードバランサーサービスはソースクラスターによって作成され、ソースマネージドクラスターが別の宛先マネージドクラスターに情報を転送できるようにします。ソースと宛先が同じクラスター上にある場合、または Submariner ネットワークサービスが設定されている場合は、サービスタイプとしてClusterIPを使用できます。ソースクラスターを設定するときに参照するシークレットのアドレスと名前をメモします。storageClassNameおよびvolumeSnapshotClassNameは任意のパラメーターです。特に、環境のデフォルト値とは異なるストレージクラスおよびボリュームスナップショットクラス名を使用している場合は、環境の値を指定してください。宛先クラスターで以下のコマンドを実行し、
replicationdestinationリソースを作成します。oc create -n <destination-ns> -f replication_destination.yamldestination-nsは、宛先の namespace の名前に置き換えます。replicationdestinationリソースが作成されると、以下のパラメーターおよび値がリソースに追加されます。Expand パラメーター 値 .status.rsync.address送信元クラスターと宛先クラスターが通信できるようにするために使用される宛先クラスターの IP アドレス。
.status.rsync.sshKeysソースクラスターから宛先クラスターへのセキュアなデータ転送を可能にする SSH キーファイルの名前。
以下のコマンドを実行して、ソースクラスターで使用する
.status.rsync.addressの値をコピーします。ADDRESS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.address}}` echo $ADDRESSdestinationは、レプリケーション先のカスタムリソースの名前に置き換えます。destination-nsは、宛先の namespace の名前に置き換えます。出力は、Amazon Web Services 環境の次の出力のように表示されます。
a831264645yhrjrjyer6f9e4a02eb2-5592c0b3d94dd376.elb.us-east-1.amazonaws.com次のコマンドを実行して、シークレットの名前をコピーします。
SSHKEYS=`oc get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.sshKeys}}` echo $SSHKEYSdestinationは、レプリケーション先のカスタムリソースの名前に置き換えます。destination-nsは、宛先の namespace の名前に置き換えます。ソースの設定時に、ソースクラスターで入力する必要があります。出力は、SSH キーシークレットファイルの名前である必要があります。これは、次の名前のようになります。
volsync-rsync-dst-src-destination-name宛先クラスターに対して次のコマンドを入力して、宛先クラスターから SSH シークレットをコピーします。
oc get secret -n <destination-ns> $SSHKEYS -o yaml > /tmp/secret.yamldestination-nsを、宛先が置かれている永続ボリューム要求の namespace に置き換えます。以下のコマンドを入力して、
viエディターでシークレットファイルを開きます。vi /tmp/secret.yaml宛先クラスターのオープンシークレットファイルで、次の変更を行います。
-
namespace をソースクラスターの namespace に変更します。この例では、
source-nsです。 -
所有者の参照を削除します (
.metadata.ownerReferences)。
-
namespace をソースクラスターの namespace に変更します。この例では、
ソースクラスターで、ソースクラスターで次のコマンドを入力してシークレットファイルを作成します。
oc create -f /tmp/secret.yaml
複製するソース永続ボリュームクレームを特定します。
注記: ソース永続ボリューム要求は CSI ストレージクラスにある必要があります。
ReplicationSourceアイテムを作成します。以下の YAML コンテンツをコピーして、ソースクラスターに
replication_source.yamlという名前の新規ファイルを作成します。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-vscsourceは、レプリケーションソースカスタムリソースの名前に置き換えます。これを自動的に置き換える方法は、この手順のステップ 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はオプションのパラメーターです。ご使用の環境のデフォルトとは異なるストレージクラスおよびボリュームスナップショットクラス名を使用している場合は、それらの値を指定してください。永続ボリュームの同期方法を設定できるようになりました。
ソースクラスターで、以下のコマンドを入力して
ReplicationSourceオブジェクトのaddressおよびsshKeysの値を、宛先クラスターから書き留めた値に置き換えてreplication_source.yamlファイルを変更します。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.yamlmy.host.comは、設定時にReplicationDestinationの.status.rsync.addressフィールドからコピーしたホストアドレスに置き換えます。mysshkeysは、設定時にReplicationDestinationの.status.rsync.sshKeysフィールドからコピーしたキーに置き換えます。sourceを、ソースが置かれている永続ボリューム要求の名前に置き換えます。注記: 複製する永続ボリューム要求と同じ namespace にファイルを作成する必要があります。
ReplicationSourceオブジェクトで以下のコマンドを実行して、レプリケーションが完了したことを確認します。oc describe ReplicationSource -n <source-ns> <source>source-nsをソースが置かれている永続ボリューム要求の namespace に置き換えます。sourceは、レプリケーションソースのカスタムリソースの名前に置き換えます。レプリケーションが成功した場合、出力は次の例のようになります。
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:00ZLast Sync Timeに時間がリストされていない場合は、レプリケーションが完了していません。
元の永続ボリュームのレプリカがあります。
1.2.1.5. restic バックアップの設定 リンクのコピーリンクがクリップボードにコピーされました!
restic ベースのバックアップは、永続ボリュームの restic ベースのバックアップコピーを、restic-config.yaml シークレットファイルで指定された場所にコピーします。restic バックアップは、クラスター間でデータを同期しませんが、データをバックアップします。
次の手順を実行して、restic ベースのバックアップを設定します。
次の YAML コンテンツのようなシークレットを作成して、バックアップイメージが保存されるリポジトリーを指定します。
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: passwordmy-restic-repositoryは、バックアップファイルを保存する S3 バケットリポジトリーの場所に置き換えます。my-restic-passwordは、リポジトリーへのアクセスに必要な暗号化キーに置き換えます。必要に応じて、
accessとpasswordは、プロバイダーのクレデンシャルに置き換えます。新しいリポジトリーを準備する必要がある場合の手順は、新しいリポジトリーの準備 を参照してください。この手順を使用する場合は、
restic initコマンドを実行してリポジトリーを初期化する必要がある手順をスキップしてください。VolSync は、最初のバックアップ中にリポジトリーを自動的に初期化します。重要: 複数の永続ボリューム要求を同じ S3 バケットにバックアップする場合には、バケットへのパスは永続ボリュームクレームごとに一意である必要があります。各永続ボリュームクレームは個別の
ReplicationSourceでバックアップされるので、個別の restic-config シークレットが必要です。同じ S3 バケットを共有することで、各
ReplicationSourceは S3 バケット全体への書き込みアクセスが割り当てられます。次の YAML コンテンツに似た
ReplicationSourceオブジェクトを作成して、バックアップポリシーを設定します。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-namesourceは、バックアップしている永続ボリュームクレームに置き換えます。scheduleの値は、バックアップを実行する頻度に置き換えます。この例では、30 分ごとにスケジュールが指定されています。スケジュールの設定の詳細は、同期のスケジュール を参照してください。PruneIntervalDaysの値は、インスタンスで次にデータの圧縮するまでの経過時間 (日数) に置き換えて、スペースを節約します。プルーニング操作は、実行中に大量の I/O トラフィックを生成する可能性があります。restic-configは、ステップ 1 で作成したシークレットの名前に置き換えます。retainの値は、バックアップしたイメージの保持ポリシーに設定します。ベストプラクティス:
CopyMethodの値にCloneを使用して、特定の時点のイメージが確実に保存されるようにします。
注記: デフォルトでは、restic ムーバーは root 権限なしで実行されます。restic ムーバーを root として実行する場合は、次のコマンドを実行して、昇格された権限のアノテーションを namespace に追加します。
oc annotate namespace <namespace> volsync.backube/privileged-movers=true
<namespace> を namespace の名前に置き換えます。
1.2.1.5.1. restic バックアップの復元 リンクのコピーリンクがクリップボードにコピーされました!
コピーされたデータを restic バックアップから新しい永続ボリューム要求に復元できます。ベストプラクティス: バックアップ 1 つだけを新しい永続ボリューム要求に復元します。restic バックアップを復元するには、次の手順を実行します。
次の例のように、新しいデータを含む新しい永続ボリュームクレームを作成します。
kind: PersistentVolumeClaim apiVersion: v1 metadata: name: <pvc-name> spec: accessModes: - ReadWriteOnce resources: requests: storage: 3Gipvc-nameは、新しい永続ボリュームクレームの名前に置き換えます。次の例のような
ReplicationDestinationカスタムリソースを作成して、データの復元先を指定します。apiVersion: volsync.backube/v1alpha1 kind: ReplicationDestination metadata: name: <destination> spec: trigger: manual: restore-once restic: repository: <restic-repo> destinationPVC: <pvc-name> copyMethod: Directdestinationは、宛先 CR の名前に置き換えます。restic-repoは、ソースが保存されているリポジトリーへのパスに置き換えます。pvc-nameは、データを復元する新しい永続ボリュームクレームの名前に置き換えます。これには、新しいボリューム要求をプロビジョニングするのではなく、既存の永続ボリューム要求を使用してください。
復元プロセスは 1 回だけ完了する必要があります。この例では、最新のバックアップを復元します。復元オプションの詳細は、VolSync ドキュメントの Restore options を参照してください。
1.2.1.6. Rclone レプリケーションの設定 リンクのコピーリンクがクリップボードにコピーされました!
Rclone バックアップは、Rclone を使用して AWS S3 などの中間オブジェクトストレージの場所を介して単一の永続ボリュームを複数の場所にコピーします。複数の場所にデータを配布する場合に役立ちます。
次の手順を実行して、Rclone レプリケーションを設定します。
次の例のような
ReplicationSourceカスタムリソースを作成します。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は、レプリケートしている永続ボリュームクレームに置き換えます。scheduleの値は、レプリケーションを実行する頻度に置き換えます。この例では、6 分ごとにスケジュールが指定されています。この値は引用符で囲む必要があります。詳細は、同期のスケジュール を参照してください。intermediate-s3-bucketは、Rclone 設定ファイルの設定セクションへのパスに置き換えます。destination-bucketは、レプリケートされたファイルをコピーするオブジェクトバケットへのパスに置き換えます。rclone-secretは、Rclone 設定情報を含むシークレットの名前に置き換えます。copyMethodの値はClone、Direct、またはSnapshotとして設定します。この値は、ある特定の時点でのコピーを生成するかどうか、生成する場合は、生成方法を指定します。my-sc-nameは、ポイントインタイムコピーに使用するストレージクラスの名前に置き換えます。指定しない場合、ソースボリュームのストレージクラスが使用されます。SnapshotをcopyMethodとして指定した場合はmy-vscを使用するVolumeSnapshotClassの名前に置き換えます。これは、他のタイプのcopyMethodには必要ありません。次の例のような
ReplicationDestinationカスタムリソースを作成します。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>scheduleの値は、レプリケーションを宛先に移動する頻度に置き換えます。移動元と宛先のスケジュールをオフセットして、データが宛先からプルされる前に複製を完了できるようにする必要があります。この例では、オフセットは 3 分で、6 分間隔でスケジュールされています。この値は引用符で囲む必要があります。スケジュールの詳細は、同期のスケジュール を参照してください。intermediate-s3-bucketは、Rclone 設定ファイルの設定セクションへのパスに置き換えます。destination-bucketは、レプリケートされたファイルをコピーするオブジェクトバケットへのパスに置き換えます。rclone-secretは、Rclone 設定情報を含むシークレットの名前に置き換えます。copyMethodの値はClone、Direct、またはSnapshotとして設定します。この値は、ある特定の時点でのコピーを生成するかどうか、生成する場合は、生成方法を指定します。accessModesの値は、永続ボリュームクレームのアクセスモードを指定します。有効な値はReadWriteOnceまたはReadWriteManyです。capacityは、宛先ボリュームのサイズを指定します。このサイズは、着信データを格納するのに十分な大きさに指定します。my-scは、特定の時点のコピーの宛先として使用するストレージクラスの名前に置き換えます。指定しない場合、システムストレージクラスが使用されます。SnapshotをcopyMethodとして指定した場合はmy-vscを使用するVolumeSnapshotClassの名前に置き換えます。これは、他のタイプのcopyMethodには必要ありません。含まれていない場合は、システムのデフォルトのVolumeSnapshotClassが使用されます。
注記: デフォルトでは、rclone ムーバーは root 権限なしで実行されます。rclone ムーバーを root として実行する場合は、次のコマンドを実行して、昇格された権限のアノテーションを namespace に追加します。
oc annotate namespace <namespace> volsync.backube/privileged-movers=true
<namespace> を namespace の名前に置き換えます。
1.2.1.7. 関連情報 リンクのコピーリンクがクリップボードにコピーされました!
詳細は、以下のトピックを参照してください。
- Rsync-TLS レプリケーション用の独自のシークレットを作成する 方法は、Rsync-TLS レプリケーション用のシークレットの作成を参照してください。
- Rsync の追加情報は、VolSync ドキュメントの Usage を参照してください。
- リスティックオプションの詳細は、VolSync ドキュメントの バックアップオプション を参照してください。
- Installing VolSync on the managed clusters に戻る
1.2.2. 複製されたイメージを使用可能な永続ボリューム要求に変換 リンクのコピーリンクがクリップボードにコピーされました!
データを復元するには、レプリケートされたイメージを永続ボリューム要求に変換する必要がある場合があります。
VolumeSnapshot を使用して ReplicationDestination の場所から永続ボリューム要求を複製または復元すると、VolumeSnapshot が作成されます。VolumeSnapshot には、最後に成功した同期からの latestImage が含まれます。イメージのコピーは、使用する前に永続ボリューム要求に変換する必要があります。VolSync ReplicationDestination ボリュームポピュレーターを使用すると、イメージのコピーを使用可能な永続ボリュームクレームに変換できます。
永続ボリューム要求の復元先とする
ReplicationDestinationを参照するdataSourceRefを使用して永続ボリューム要求を作成します。この永続ボリューム要求には、ReplicationDestinationカスタムリソース定義のstatus.latestImage設定で指定されたVolumeSnapshotの内容が設定されます。次の YAML コンテンツは、使用される可能性のある永続ボリューム要求のサンプルを示しています。
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: 2Gipvc-nameは、新規の永続ボリューム要求の名前に置き換えます。destination-nsは、永続ボリューム要求およびReplicationDestinationが置かれている namespace に置き換えます。replicationdestination_to_replaceはReplicationDestination名に置き換えます。ベストプラクティス: 値が少なくとも最初のソース永続ボリュームクレームと同じサイズである場合は、
resources.requests.storageを異なる値で更新できます。次のコマンドを入力して、永続ボリュームクレームが環境で実行されていることを確認します。
$ kubectl get pvc -n <destination-ns>
注記:
latestImage が存在しない場合、永続ボリューム要求は ReplicationDestination が完了し、スナップショットが利用可能になるまで保留状態のままになります。ReplicationDestination と、ReplicationDestination を使用する永続ボリュームコントローラーを同時に作成できます。永続ボリューム要求は、ReplicationDestination がレプリケーションを完了し、スナップショットが使用可能になった後にのみ、ボリューム作成プロセスを開始します。スナップショットは、.status.latestImage にあります。
さらに、使用されているストレージクラスの volumeBindingMode 値が WaitForFirstConsumer である場合、ボリュームポピュレーターは、永続ボリューム要求のコンシューマーが存在するまで待機してから、永続ボリューム要求が読み込まれます。永続ボリューム要求をマウントする Pod など、コンシューマーにアクセス権が必要な場合、そのボリュームにはデータが入力されます。VolSync ボリュームポピュレーターコントローラーは、ReplicationDestination の latestImage を使用します。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)"
レプリケーションはスケジュールされた時間に開始されます。このレプリケーションオプションの設定は、以下の内容のようになります。
spec:
trigger:
schedule: "*/6 * * * *"
これらの方法のいずれかを有効にしたら、設定した方法に従って同期スケジュールが実行されます。
追加情報およびオプションは、VolSync のドキュメントを参照してください。
1.2.4. VolSync の詳細設定 リンクのコピーリンクがクリップボードにコピーされました!
永続ボリュームをレプリケートするときに、独自のシークレットを作成するなど、VolSync をさらに設定できます。
1.2.4.1. Rsync-TLS レプリケーション用のシークレットの作成 リンクのコピーリンクがクリップボードにコピーされました!
送信元と宛先は、TLS 接続の共有キーにアクセスできる必要があります。キーの場所は keySecret フィールドで確認できます。.spec.rsyncTLS.keySecret にシークレット名を指定しない場合、シークレット名は自動的に生成され、.status.rsyncTLS.keySecret に追加されます。
独自のシークレットを作成するには、次の手順を実行します。
シークレットには次の形式を使用します:
<id>:<at_least_32_hex_digits>次の例を参照してください:
1:23b7395fafc3e842bd8ac0fe142e6ad1前の例に対応する次の
secret.yamlの例を参照してください。apiVersion: v1 data: # echo -n 1:23b7395fafc3e842bd8ac0fe142e6ad1 | base64 psk.txt: MToyM2I3Mzk1ZmFmYzNlODQyYmQ4YWMwZmUxNDJlNmFkMQ== kind: Secret metadata: name: tls-key-secret type: Opaque