OpenSearch
Verrazzanoは、プラットフォームで実行されている様々なマイクロサービスからのすべてのログ・メッセージにアクセスできるようにする、すぐに使用できるOpenSearchデプロイメントを提供します。OpenSearchデータをバックアップし、リストアするシナリオがあります。
Verrazzanoは、Veleroを使用してOpenSearchデータのバックアップとリストアを容易にします。
- Veleroオペレータの前提条件
- Veleroを使用したOpenSearchバックアップ
- Veleroを使用したOpenSearchリストア
- OpenSearch APIを使用した既存のクラスタでのOpenSearchリストア
ノート: アップグレード時には、アップグレード先のバージョンではなく、既存のVerrazzanoバージョンのバックアップ・ドキュメントに従ってください。
Veleroオペレータの前提条件
OpenSearchのバックアップまたはリストア操作に進む前に、次の詳細が役立ちます:
- オブジェクト・ストアのバケット名。
- Amazon S3互換のオブジェクト・ストレージ・バケット。これには、Oracle Cloudテナンシの任意のコンパートメント内のOracle Cloud Object Storageバケットを使用できます。
- 参照できるように、バケット名とテナンシ名を書き留めておきます。
- オブジェクト・ストレージを使用したバケットの作成の詳細は、「バケットの管理」を参照してください。
- プライベート・クラウド、エンタープライズ・ネットワークまたはエアギャップ環境では、MinIOまたは同等のオブジェクト・ストア・ソリューションを使用できます。
- Amazon S3互換のオブジェクト・ストレージ・バケット。これには、Oracle Cloudテナンシの任意のコンパートメント内のOracle Cloud Object Storageバケットを使用できます。
- オブジェクト・ストアの接頭辞名。これは、バックアップ・コンポーネントによって作成されるバケット内の子フォルダになります。
- オブジェクト・ストアのリージョン名。
- オブジェクト・ストアの署名キー。
- Amazon S3互換オブジェクト・ストアの認証に必要な署名キー。これはアクセス・キー/秘密キーのペアです。
- Oracle Cloud Infrastructureでは、ユーザーまたは管理者が顧客秘密キーを作成します。
- 関連するアクセス・キーが秘密キーに対して生成されます。
- 顧客秘密キーを作成するには、顧客秘密キーに関する項を参照してください。
OpenSearchをバックアップまたはリストアするには、まずVeleroを有効にする必要があります。
- 次の構成は、
prod
インストール・プロファイルを使用してvelero
を有効にする方法を示しています。$ kubectl apply -f -<<EOF apiVersion: install.verrazzano.io/v1beta1 kind: Verrazzano metadata: name: example-verrazzano spec: profile: prod components: velero: enabled: true EOF
ノート: OpenSearchのバックアップおよびリストア操作は、マルチノードOpenSearch構成を持つprod
インストール・プロファイルでのみサポートされます。
-
Veleroが有効になったら、Veleroポッドが
verrazzano-backup
ネームスペースで実行されていることを確認します。# Sample of pods running after enabling the velero component $ kubectl get pod -n verrazzano-backup NAME READY STATUS RESTARTS AGE restic-ndxfk 1/1 Running 0 21h velero-5ff8766fd4-xbn4z 1/1 Running 0 21h
-
Veleroでは、S3互換オブジェクト・ストアと通信するためにシークレットが必要であるため、オブジェクト・ストア資格証明を保持する
backup-secret.txt
ファイルを作成します。[default] aws_access_key_id=<object store access key> aws_secret_access_key=<object store secret key>
-
ネームスペース
verrazzano-backup
に、verrazzano-backup-creds
などのKubernetesシークレットを作成します。$ kubectl create secret generic -n <backup-namespace> <secret-name> --from-file=<key>=<full_path_to_creds_file>
次に、例を示します。
$ kubectl create secret generic -n verrazzano-backup verrazzano-backup-creds --from-file=cloud=backup-secret.txt
ノート: 機密データの誤用を避けるため、Kubernetesシークレットを作成した後で
backup-secret.txt
ファイルが削除されていることを確認してください。 -
バックアップ・コンポーネントが後続のバックアップで参照する
BackupStorageLocation
リソースを作成します。次のBackupStorageLocation
の例を参照してください。詳細は、Veleroのドキュメントの「Backup Storage Location」を参照してください。$ kubectl apply -f -<<EOF apiVersion: velero.io/v1 kind: BackupStorageLocation metadata: name: verrazzano-backup-location namespace: verrazzano-backup spec: provider: aws objectStorage: bucket: example-verrazzano prefix: backup-demo credential: name: verrazzano-backup-creds key: cloud config: region: us-phoenix-1 s3ForcePathStyle: "true" s3Url: https://mytenancy.compat.objectstorage.us-phoenix-1.oraclecloud.com EOF
Veleroを使用したOpenSearchバックアップ
OpenSearchの場合は、Verrazzanoによってカスタム・フックが用意されており、バックアップの起動中にそれをVeleroで使用できます。OpenSearchによって処理される一時データの性質のため、フックがOpenSearchスナップショットAPIを起動して、データ・ストリームを適切にバックアップします。これによって、データの損失がなくなり、データ破損も回避されます。
次の例は、OpenSearchバックアップを開始するために作成できるサンプルのVelero Backup
APIリソースを示しています。
$ kubectl apply -f - <<EOF
apiVersion: velero.io/v1
kind: Backup
metadata:
name: verrazzano-opensearch-backup
namespace: verrazzano-backup
spec:
includedNamespaces:
- verrazzano-logging
labelSelector:
matchLabels:
opster.io/opensearch-cluster: opensearch
defaultVolumesToRestic: false
storageLocation: verrazzano-backup-location
hooks:
resources:
- name: opensearch-backup-test
includedNamespaces:
- verrazzano-logging
labelSelector:
matchLabels:
statefulset.kubernetes.io/pod-name: opensearch-es-master-0
post:
- exec:
container: opensearch
command:
- /usr/share/opensearch/bin/verrazzano-backup-hook
- -operation
- backup
- -velero-backup-name
- verrazzano-opensearch-backup
onError: Fail
timeout: 10m
EOF
前述の例では、OpenSearchコンポーネントがバックアップされます:
- このケースでは、
PersistentVolumes
を直接バックアップしていません。かわりにOpenSearch APIを呼び出すフックを実行して、データのスナップショットを取得します。 - Veleroが関連するPVCを無視するように、
defaultVolumesToRestic
はfalse
に設定されます。 - このケースで、フックは
pre
またはpost
にする必要があります。 - フックで使用されるコマンドには、
operation
フラグと、入力としてVeleroバックアップ名が必要です。 - フックを実行する必要があるコンテナは、デフォルトでポッド内の最初のコンテナに設定されます。このケースでは、
statefulset.kubernetes.io/pod-name: opensearch-es-master-0
です。
バックアップが処理された後で、velero backup logs
コマンドを使用してフック・ログを確認できます。また、フック・ログはポッドの/tmp
フォルダに格納されます。
OpenSearchバックアップ・ログ
# To display the logs from the backup, run the following command
$ kubectl logs -n verrazzano-backup -l app.kubernetes.io/name=velero
# Fetch the log file name as shown
$ kubectl exec -it opensearch-es-master-0 -n verrazzano-logging -- ls -al /tmp | grep verrazzano-backup-hook | tail -n 1 | awk '{print $NF}'
# To examine the hook logs, exec into the pod as shown, and use the file name retrieved previously
$ kubectl exec -it opensearch-es-master-0 -n verrazzano-logging -- cat /tmp/<log-file-name>
OpenSearchスケジュール済バックアップ
VeleroではSchedule
APIがサポートされます。これは、指定のcron表記のバックアップを実行するためにVeleroサーバーに送信される繰り返し可能なリクエストです。Schedule
オブジェクトが作成されると、Veleroサーバーがバックアップ・プロセスを開始します。その後、指定のcron式の次の有効なポイントまで待機し、バックアップ・プロセスを繰返し実行します。
Veleroを使用したOpenSearchリストア
OpenSearchの場合は、Verrazzanoによってカスタム・フックが用意されており、それをVeleroで使用してリストア操作を実行できます。OpenSearchによって処理される一時データの性質のため、フックがOpenSearchスナップショットAPIを起動して、データ・ストリームを適切にリストアします。これによって、データの損失がなくなり、データ破損も回避されます。
OpenSearchを別のクラスタにリストアする場合は、元のクラスタで構成された同じバックアップ記憶域の場所を指すVelero BackupStorageLocation
リソースを新しいクラスタに作成します。これにより、元のクラスタのバックアップによって作成されたVeleroリソースが新しいクラスタに自動的に同期されます。同期が完了すると、新しいクラスタ上の元のクラスタからバックアップにアクセスできます。BackupStorageLocation
仕様でaccessMode
をReadOnly
に設定して、新しいクラスタのBackupStorageLocation
を読取り専用として構成することをお薦めします。これにより、オブジェクト・ストア内のバックアップが新しいクラスタから変更されなくなります。詳細は、Veleroのドキュメントの「Backup Storage Location」を参照してください。
OpenSearchリストア操作を開始するには、最初に、システムで実行されている既存のOpenSearchクラスタおよびすべての関連データを削除します。
-
Verrazzanoモニタリング・オペレータをスケール・ダウンします。これが必要な理由は、オペレータがOpenSearchクラスタのライフ・サイクルを管理するため、ゼロにスケール・ダウンするとリストア操作を妨げないからです。また、リストア操作によって、この演算子がスケール・アップされ、システムが以前の状態に戻ります。
$ kubectl scale deploy -n verrazzano-logging opensearch-operator-controller-manager --replicas=0
-
OpenSearchコンポーネントを削除します。
# These are sample commands to demonstrate the OpenSearch restore process $ kubectl delete sts -n verrazzano-logging -l opster.io/opensearch-cluster=opensearch $ kubectl delete deploy -n verrazzano-logging -l opster.io/opensearch-cluster=opensearch $ kubectl delete pvc -n verrazzano-logging -l opster.io/opensearch-cluster=opensearch
-
OpenSearchリストア操作を実行するために、次のVelero
Restore
APIオブジェクトの例を呼び出すことができます。$ kubectl apply -f - <<EOF apiVersion: velero.io/v1 kind: Restore metadata: name: verrazzano-opensearch-restore namespace: verrazzano-backup spec: backupName: verrazzano-opensearch-backup includedNamespaces: - verrazzano-logging labelSelector: matchLabels: opster.io/opensearch-cluster: opensearch restorePVs: false hooks: resources: - name: opensearch-test includedNamespaces: - verrazzano-logging labelSelector: matchLabels: statefulset.kubernetes.io/pod-name: opensearch-es-master-0 postHooks: - init: timeout: 30m initContainers: - args: - /usr/share/opensearch/bin/verrazzano-backup-hook --operation=pre-restore --velero-backup-name=verrazzano-opensearch-backup command: - sh - -c image: ghcr.io/verrazzano/opensearch:2.3.0-20230928071551-b6247ad8ac8 imagePullPolicy: Always name: pre-hook - exec: container: opensearch command: - /usr/share/opensearch/bin/verrazzano-backup-hook - -operation - restore - -velero-backup-name - verrazzano-opensearch-backup waitTimeout: 30m execTimeout: 30m onError: Fail EOF
前述の例では、既存のバックアップからOpenSearchクラスタをリストアします。
- このケースでは、
PersistentVolumes
を直接リストアしていません。かわりにOpenSearch APIを呼び出すフックを実行して、データの既存のスナップショットからリストアします。 - VeleroがPVCのリストアを無視するように、
restorePVs
はfalse
に設定されます。 - フックで使用されるコマンドには、
-operation
フラグと、入力としてVeleroバックアップ名が必要です。 pre-hook
は、OpenSearch APIを呼び出す前に、OpenSearchクラスタのブートストラップに必要なステップを実行します。postHook
は、スナップショット・データをリストアするOpenSearch APIを呼び出します。- フックを実行する必要があるコンテナは、デフォルトでポッド内の最初のコンテナに設定されます。このケースでは、
statefulset.kubernetes.io/pod-name: opensearch-es-master-0
です。
ノート: フックは、Kubernetesオブジェクトのリストア後に適用する必要があるため、
postHook
である必要があります。 - このケースでは、
-
すべてのOpenSearchポッドが
RUNNING
状態になるまで待ちます。$ kubectl wait -n verrazzano-logging --for=condition=ready pod -l opster.io/opensearch-cluster=opensearch --timeout=600s pod/opensearch-es-data-0 condition met pod/opensearch-es-data-1 condition met pod/opensearch-es-data-2 condition met pod/opensearch-es-ingest-0 condition met pod/opensearch-es-ingest-1 condition met pod/opensearch-es-master-0 condition met pod/opensearch-es-master-1 condition met pod/opensearch-es-master-2 condition met
リストア操作が処理された後で、velero restore logs
コマンドを使用してフック・ログを確認できます。また、フック・ログはポッドの/tmp
フォルダに格納されます。
OpenSearchリストア・ログ
# To display the logs from the restore, run the following command
$ kubectl logs -n verrazzano-backup -l app.kubernetes.io/name=velero
# Fetch the log file name as shown
$ kubectl exec -it opensearch-es-master-0 -n verrazzano-logging -- ls -al /tmp | grep verrazzano-restore-hook | tail -n 1 | awk '{print $NF}'
# To examine the hook logs, exec into the pod as shown, and use the file name retrieved previously
$ kubectl exec -it opensearch-es-master-0 -n verrazzano-logging -- cat /tmp/<log-file-name>
OpenSearch APIを使用した既存のクラスタでのOpenSearchリストア
通常、Veleroを使用したOpenSearchリストアは、クラスタ全体のリストアが必要な障害時リカバリのシナリオに使用されます。ただし、既存のクラスタ内にあるOpenSearchデータをリストアする場合は、OpenSearch APIを使用できます。
これまでにVeleroを使用して、リポジトリの登録が完了しているのと同じクラスタ内にバックアップを作成したことがあると仮定し、その特定のバックアップからOpenSearchデータのみをリストアする場合は、次のコマンドを実行します。
登録済リポジトリを取得するには:
# To see all snapshot repositories
$ GET _snapshot/_all
登録済リポジトリ内のすべてのスナップショットを取得するには:
# To see all snapshots in a repository
$ GET _snapshot/<backup_repository_name>/_all
特定のスナップショットをリストアするには:
# To restore the existing snapshot, run the following command
$ POST _snapshot/<backup_repository_name>/<snapshot-name>/_restore
-
<backup_repository_name>
: OpenSearchスナップショットが格納されているバックアップ・リポジトリの名前。<backup_repository_name>
をバックアップ・リポジトリの名前に置き換えます。 -
<snapshot-name>
: リストアするOpenSearchスナップショットの名前。<snapshot-name>
をスナップショットの名前に置き換えます。
詳細は、OpenSearchのドキュメントの「OpenSearch Restore」を参照してください。