1.21.3. 管理対象クラスター間での Rsync レプリケーションの設定
Rsync ベースのレプリケーションの場合は、ソースクラスターおよび宛先クラスターでカスタムリソースを設定します。カスタムリソースは、address 値を使用してソースを宛先に接続し、sshKeys を使用して転送されたデータがセキュアであることを確認します。
注記: address および sshKeys の値を宛先からソースにコピーし、ソースを設定する前に宛先を設定する必要があります。
この例では、source-ns namespace の source クラスターの永続ボリューム要求から destination-ns namespace の destination クラスターの永続ボリューム要求に Rsync レプリケーションを設定する手順を説明します。必要に応じて、これらの値を他の値に置き換えることができます。
宛先クラスターを設定します。
宛先クラスターで次のコマンドを実行して、ネームスペースを作成します。
$ kubectl 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の値は、レプリケートされる永続ボリューム要求 (PVC) の容量と一致する必要があります。destinationは、宛先 CR の名前に置き換えます。destination-nsは、宛先の namespace の名前に置き換えます。この例では、
LoadBalancerのServiceType値が使用されます。ロードバランサーサービスはソースクラスターによって作成され、ソースマネージドクラスターが別の宛先マネージドクラスターに情報を転送できるようにします。ソースと宛先が同じクラスター上にある場合、または Submariner ネットワークサービスが設定されている場合は、サービスタイプとしてClusterIPを使用できます。ソースクラスターを設定するときに参照するシークレットのアドレスと名前をメモします。storageClassNameおよびvolumeSnapshotClassNameは任意のパラメーターです。特に、環境のデフォルト値とは異なるストレージクラスおよびボリュームスナップショットクラス名を使用している場合は、環境の値を指定してください。宛先クラスターで以下のコマンドを実行し、
replicationdestinationリソースを作成します。$ kubectl create -n <destination-ns> -f replication_destination.yamldestination-nsは、宛先の namespace の名前に置き換えます。replicationdestinationリソースが作成されると、以下のパラメーターおよび値がリソースに追加されます。Expand パラメーター 値 .status.rsync.address送信元クラスターと宛先クラスターが通信できるようにするために使用される宛先クラスターの IP アドレス。
.status.rsync.sshKeysソースクラスターから宛先クラスターへの安全なデータ転送を可能にする SSH キーファイルの名前。
以下のコマンドを実行して、ソースクラスターで使用する
.status.rsync.addressの値をコピーします。$ ADDRESS=`kubectl get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.address}}` $ echo $ADDRESSdestinationは、宛先 CR の名前に置き換えます。destination-nsは、宛先の namespace の名前に置き換えます。出力は、Amazon Web Services 環境の次の出力のように表示されます。
a831264645yhrjrjyer6f9e4a02eb2-5592c0b3d94dd376.elb.us-east-1.amazonaws.com以下のコマンドを実行して、シークレットの名前および
.status.rsync.sshKeysの値として提供されるシークレットの内容をコピーします。$ SSHKEYS=`kubectl get replicationdestination <destination> -n <destination-ns> --template={{.status.rsync.sshKeys}}` $ echo $SSHKEYSdestinationは、宛先 CR の名前に置き換えます。destination-nsは、宛先の namespace の名前に置き換えます。ソースの設定時に、ソースクラスターで入力する必要があります。出力は、SSH キーシークレットファイルの名前である必要があります。これは、次の名前のようになります。
volsync-rsync-dst-src-destination-name
複製するソース永続ボリュームクレームを特定します。
注記: ソース永続ボリューム要求は 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は、レプリケーションソース CR の名前に置き換えます。これを自動的に置き換える方法については、この手順のステップ 3-vi を参照してください。source-nsを、ソースが置かれている Persistent Volume Claim(永続ボリューム要求、PVC) の namespace に置き換えます。これを自動的に置き換える方法については、この手順のステップ 3-vi を参照してください。persistent_volume_claimは、ソース永続ボリューム要求の名前に置き換えます。mysshkeysは、設定時にReplicationDestinationの.status.rsync.sshKeysフィールドからコピーしたキーに置き換えます。my.host.comは、設定時にReplicationDestinationの.status.rsync.addressフィールドからコピーしたホストアドレスに置き換えます。ストレージドライバーがクローン作成をサポートする場合は、
copyMethodの値にCloneを使用すると、レプリケーションのより効率的なプロセスになる可能性があります。storageClassNameおよびvolumeSnapshotClassNameはオプションのパラメーターです。ご使用の環境のデフォルトとは異なるストレージクラスおよびボリュームスナップショットクラス名を使用している場合は、それらの値を指定してください。永続ボリュームの同期方法を設定できるようになりました。
宛先クラスターに対して次のコマンドを入力して、宛先クラスターから SSH シークレットをコピーします。
$ kubectl get secret -n <destination-ns> $SSHKEYS -o yaml > /tmp/secret.yamldestination-nsを、宛先が置かれている永続ボリューム要求の namespace に置き換えます。以下のコマンドを入力して、
viエディターでシークレットファイルを開きます。$ vi /tmp/secret.yaml宛先クラスターのオープンシークレットファイルで、次の変更を行います。
-
名前空間をソースクラスターの名前空間に変更します。この例では、
source-nsです。 -
所有者の参照を削除します (
.metadata.ownerReferences)。
-
名前空間をソースクラスターの名前空間に変更します。この例では、
ソースクラスターで、ソースクラスターで次のコマンドを入力してシークレットファイルを作成します。
$ kubectl create -f /tmp/secret.yamlソースクラスターで、以下のコマンドを入力して
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 $ kubectl create -n <source> -f replication_source.yamlmy.host.comは、設定時にReplicationDestinationの.status.rsync.addressフィールドからコピーしたホストアドレスに置き換えます。mysshkeysは、設定時にReplicationDestinationの.status.rsync.sshKeysフィールドからコピーしたキーに置き換えます。sourceを、ソース が置かれている永続ボリューム要求の名前に置き換えます。注記: 複製する永続ボリューム要求と同じ namespace にファイルを作成する必要があります。
ReplicationSourceオブジェクトで以下のコマンドを実行して、レプリケーションが完了したことを確認します。$ kubectl describe ReplicationSource -n <source-ns> <source>source-nsを、ソースが置かれている Persistent Volume Claim の namespace に置き換えます。sourceは、レプリケーションソース CR の名前に置き換えます。レプリケーションが成功した場合、出力は次の例のようになります。
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に時間がリストされていない場合、レプリケーションは完了しません。