NetBackup™ Web UI Kubernetes 管理者ガイド
- NetBackup for Kubernetes の概要
- NetBackup Kubernetes Operator の配備と構成
- NetBackup スナップショット操作の設定を行う
- NetBackup Kubernetes Operator での証明書の配備
- Kubernetes 資産の管理
- Kubernetes インテリジェントグループの管理
- Kubernetes 資産の保護
- イメージグループの管理
- NetBackup でのランチャ管理クラスタの保護
- Kubernetes 資産のリカバリ
- 増分バックアップとリストアについて
- アクセラレータベースのバックアップの有効化
- Kubernetes での FIPS モードの有効化
- Kubernetes の問題のトラブルシューティング
アプリケーションの一貫したバックアップの構成
データベースなどのアプリケーションを実行しているいくつかのポッドには、アプリケーションの一貫したバックアップを取得するために追加の手順が必要です。
アプリケーションの一貫したバックアップでは、アプリケーションメタデータ、メモリ内の状態、永続ストレージに存在する永続データを把握するためのメカニズムが必要です。リストア中に正常な状態を実現するために、これらのすべての Kubernetes リソースにわたって一貫したアプリケーションバックアップを取得することは、リカバリ処理の合理化に役立ちます。クラッシュ整合バックアップのみが必要な場合、これらの手順は必要ありません。
アプリケーションには、アプリケーションの整合性スナップショットを作成するために入出力 (I/O) 操作を一時停止する手順があり、これはベンダーによって文書化されています。この手順はアプリケーションによって異なるため、それぞれの実行方法の性質が重要になります。これらの手順の内容はお客様の責任です。
NetBackup を使用して Kubernetes 作業負荷を保護する場合、アプリケーションの整合性スナップショットを作成するには、バックアップフックを利用するアプリケーションポッドの注釈を適用します。Kubernetes の注釈は、任意の Kubernetes リソースに適用できる単なるメタデータです。Kubernetes 内のフックはユーザー定義の処理で、任意のコマンドまたは複数のコマンドを指定できます。Kubernetes インフラ内で、静止状態を必要とするアプリケーションポッドにこれらの注釈とフックを適用します。
バックアップフックは、前処理 (スナップショットの前) と後処理 (スナップショットの後) の両方に使用されます。データ保護のコンテキストでは、通常、netbackup-pre-backup フックが静止プロシージャまたはコマンドを呼び出し、netbackup-post-backup フックが静止解除のプロシージャまたはコマンドを呼び出すことを意味します。フックの各セットで、コマンドとその適用先のコンテナを指定します。コマンドはコンテナのシェル内では実行されないことに注意してください。したがって、指定の例では、ディレクトリを含む完全なコマンド文字列が使用されます。
アプリケーションの一貫したバックアップを必要とするアプリケーションを識別し、Kubernetes データ保護の構成の一部として一連のバックアップフックを含む注釈を適用します。
ポッドに注釈を追加するには、Kubernetes UI (ユーザーインターフェース) を使用します。または、特定のポッドまたはラベルに対して、Kubernetes クラスタコンソールで kubectl の注釈機能を使用します。注釈を適用する方法はディストリビューションによって異なる場合があるため、次の例では、ほとんどのディストリビューションでの広範な可用性に基づいて、kubectl コマンドに重点を置いて説明します。
さらに、配備リソースやレプリカセットリソースなどの基本 Kubernetes オブジェクトに注釈を追加して、新しく配備されたポッドに注釈を確実に含めることができます。Kubernetes 管理者は注釈を動的に更新できます。
ラベルは、ポッドやサービスなどの Kubernetes オブジェクトに関連付けられるキーと値のペアです。ラベルは、ユーザーにとって重要で関連性のあるオブジェクトの属性として使用されます。ラベルは作成時にオブジェクトにアタッチでき、その後いつでも追加および変更できます。Kubernetes では、これらのラベルを使用して、選択したサブセットに対してオブジェクトを問い合わせ、一括操作を実行するための統合サポートが提供されます。各オブジェクトには、キーと値のラベルのセットを定義できます。各キーは特定のオブジェクトに対して一意である必要があります。
ラベルメタデータのフォーマットと構文の例を次に示します。
"metadata": {"labels": {"key1":"value1","key2":"value2"}}
ポッド名を具体的に指定するか、ポッドの目的のグループに該当するラベルを指定します。複数の注釈引数を使用する場合は、次に示す JSON アレイのように正しい JSON 形式を指定します: '["item1","item2","itemn"]'# kubectl annotate pod [ {pod_name} | -l {label=value}] -n {the-pods-namespace_name} [annotation syntax - see following]
目的の結果を得るために一部のアプリケーションで複数のコマンドが必要な場合は、複数のコマンドを結合するために、このメソッドを && と組み合わせることができます。指定したコマンドはベリタスによって提供されないため、ユーザーは手動でアプリケーションポッドをカスタマイズする必要があります。{values} を環境で使用されている実際の名前に置き換えます。
メモ:
すべての kubectl コマンドは 1 行で定義する必要があります。次の例をコピーまたは貼り付けるときは注意してください。
NetBackup 10.2 にアップグレードした後、これらの新しい netbackup-pre と netbackup-post のバックアップフックに対する注釈を更新します。これには、「netbackup」の接頭辞が含まれています。
netbackup-pre.hook.back.velero.io/command netbackup-pre.hook.backup.velero.io/container netbackup-post.hook.back.velero.io/command netbackup-post.hook.backup.velero.io/container
MongoDB 4.2.23 データベースをロックおよびロック解除するコマンドを次に示します。
# mongo --eval "db. fsyncLock ()"
# mongo --eval "db.fsyncUnlock()"
これは、MongoDB のバックアップ前と後の両方のフックを設定する次の単一のコマンドに変換されます。特殊文字と、JSON 形式の一部として使用される角カッコ ([])、一重引用符、二重引用符、およびカンマ (,) をエスケープするための特殊な構文に注意してください。
# kubectl annotate pod {mongodb-pod-name} -n {mongodb namespace} netbackup-pre.hook.back.velero.io/command='["/bin/bash", "-c", "mongo --eval \"db.fsyncLock()\""]' netbackup-pre.hook.backup.velero.io/container={mongodb-pod-name} netbackup-post.hook.backup.velero.io/command='["/bin/bash","-c","mongo --eval \"db.fsyncUnlock()\""]' netbackup-post.hook.backup.velero.io/container={mongodb-pod-name}
次に、MySQL データベースを静止および静止解除するコマンドを示します。
# mysql -uroot -ppassword -e "flush tables with read lock"
# mysql -uroot -ppassword -e "unlock tables"
これは、MySQL のバックアップ前と後の両方のフックを設定する次の単一のコマンドに変換されます。この例では、ポッド名の代わりにラベルを使用しており、このラベルは一度に複数のポッドに注釈を付けることができます。特殊文字と、JSON 形式の一部として使用される角カッコ ([])、一重引用符、二重引用符、およびカンマ (,) をエスケープするための特殊な構文に注意してください。
# kubectl annotate pod -l label=value -n {mysql namespace} netbackup-pre.hook.backup.velero.io/command='["/bin/bash", "-c", "mysql -uroot -ppassword -e \"flush tables with read lock\""]' netbackup-pre.hook.backup.velero.io/container={mysql container name} netbackup-post.hook.backup.velero.io/command='["/bin/bash", "-c", "mysql -uroot -ppassword -e \"unlock tables\""]' netbackup-post.hook.backup.velero.io/container={mysql container name}
次に、PostgreSQL データベースを静止および静止解除するコマンドを示します。
# Psql -U postgres -c "SELECT pg_start_backup('tagvalue');"
# psql -U postgres -c \"SELECT pg_stop_backup();"
これは、Postgres のバックアップ前と後の両方のフックを設定する次の単一のコマンドに変換されます。この例では、ポッド名の代わりにラベルを使用しており、ラベルは一度に複数の一致するポッドに注釈を付けることができます。任意の Kubernetes オブジェクトにラベルを適用できます。この場合は、特定のコンテナを変更し、特定のポッドのみを選択するための別の方法としてラベルを使用しています。特殊文字と、JSON 形式の一部として使用される角カッコ ([])、一重引用符、二重引用符、およびカンマ (,) をエスケープするための特殊な構文に注意してください。
# kubectl annotate pod -l app=app-postgresql -n {postgres namespace} netbackup-pre.hook.backup.velero.io/command='["/bin/bash", "-c", "psql -U postgres -c \"SELECT pg_start_backup(quote_literal($EPOCHSECONDS));\""]' netbackup-pre.hook.backup.velero.io/container={postgres container name} netbackup-post.hook.backup.velero.io/command='["/bin/bash", "-c", "psql -U postgres -c \"SELECT pg_stop_backup();\""]' netbackup-post.hook.backup.velero.io/container={postgres container name}
次に、NGINX アプリケーションを静止および静止解除するコマンドを示します。
# /sbin/fsfreeze --freeze /var/log/nginx
# /sbin/fsfreeze --unfreeze /var/log/nginx
これは、NGINX のバックアップ前と後の両方のフックを設定する次の単一のコマンドに変換されます。この例では、コンテナフックを省略します。これにより、デフォルトでポッド名と一致する最初のコンテナが変更されます。特殊文字と、JSON 形式の一部として使用される角カッコ ([])、一重引用符、二重引用符、およびカンマ (,) をエスケープするための特殊な構文に注意してください。
# kubectl annotate pod {nginx-pod-name} -n {nginx namespace} netbackup-pre.hook.backup.velero.io/command='["/sbin/fsfreeze", "--freeze", "/var/log/nginx"]' netbackup-post.hook.backup.velero.io/command='["/sbin/fsfreeze", "--unfreeze", "/var/log/nginx"]'
次に、Cassandra データベースを静止および静止解除するコマンドを示します。
# nodetool flush
# nodetool verify
これは、Cassandra のバックアップ前と後の両方のフックを設定する次の単一のコマンドに変換されます。特殊文字と、JSON 形式の一部として使用される角カッコ ([])、一重引用符 ('')、二重引用符 ("")、およびカンマ (,) をエスケープするための特殊な構文に注意してください。
# kubectl annotate pod {cassandra-pod} -n {Cassandra namespace} netbackup-pre.hook.backup.velero.io/command='["/bin/bash", "-c", "nodetool flush"]' netbackup-pre.hook.backup.velero.io/container={cassandra-pod} netbackup-post.hook.backup.velero.io/command='["/bin/bash", "-c", "nodetool verify"]' netbackup-post.hook.backup.velero.io/container={cassandra-pod}
メモ:
ここに示す例では、初期ガイドのみが提供されています。各作業負荷の特定の要件には、バックアップ、作業負荷、Kubernetes 管理者間のコラボレーションが含まれている必要があります。
現時点では、Kubernetes はエラー時のフックをサポートしていません。ユーザー指定のコマンドが失敗した場合、バックアップスナップショットは続行されません。
終了状態を返すコマンドのデフォルトのタイムアウト値は 30 秒です。ただし、この値は、ポッドへの注釈として次のフックで変更できます。
netbackup-pre.hook.backup.velero.io/timeout=#in-seconds#
netbackup-post.hook.backup.velero.io/timeout=#in-seconds#