実行フックの管理
実行フックは、管理対象アプリケーションのデータ保護操作と組み合わせて実行するように構成できるカスタムアクションです。たとえば、データベースアプリケーションがある場合、実行フックを使用して、スナップショットの前にすべてのデータベーストランザクションを一時停止し、スナップショットの完了後にトランザクションを再開できます。これにより、アプリケーションと整合性のある Snapshot を作成できます。
実行フックのタイプ
Trident PROTECTは、実行可能なタイミングに基づいて、次のタイプの実行フックをサポートします。
-
Snapshot前
-
Snapshot後
-
バックアップ前
-
バックアップ後
-
リストア後のPOSTコマンドです
-
フェイルオーバー後
実行順序
データ保護操作を実行すると、実行フックイベントが次の順序で実行されます。
-
適用可能なカスタムプリオペレーション実行フックは、適切なコンテナで実行されます。カスタムのプリオペレーションフックは必要なだけ作成して実行できますが、操作前のこれらのフックの実行順序は保証も構成もされていません。
-
データ保護処理が実行されます。
-
適用可能なカスタムポストオペレーション実行フックは、適切なコンテナで実行されます。必要な数のカスタムポストオペレーションフックを作成して実行できますが、操作後のこれらのフックの実行順序は保証されず、設定もできません。
同じ種類の実行フック(スナップショット前など)を複数作成する場合、これらのフックの実行順序は保証されません。ただし、異なるタイプのフックの実行順序は保証されています。たとえば'以下は'すべての異なるタイプのフックを持つ構成の実行順序です
-
スナップショット前フックが実行されます
-
スナップショット後フックが実行されます
-
予備フックが実行されます
-
バックアップ後のフックが実行されます
上記の順序の例は、既存のSnapshotを使用しないバックアップを実行する場合にのみ該当します。 |
本番環境で実行スクリプトを有効にする前に、必ず実行フックスクリプトをテストしてください。'kubectl exec' コマンドを使用すると、スクリプトを簡単にテストできます。本番環境で実行フックを有効にしたら、作成されたSnapshotとバックアップをテストして整合性があることを確認します。これを行うには、アプリケーションを一時的なネームスペースにクローニングし、スナップショットまたはバックアップをリストアしてから、アプリケーションをテストします。 |
カスタム実行フックに関する重要な注意事項
アプリケーションの実行フックを計画するときは、次の点を考慮してください。
-
実行フックは、スクリプトを使用してアクションを実行する必要があります。多くの実行フックは、同じスクリプトを参照できます。
-
Trident保護では、実行フックが使用するスクリプトを実行可能なシェルスクリプトの形式で記述する必要があります。
-
スクリプトのサイズは96KBに制限されています。
-
Trident保護では、実行フックの設定と一致基準を使用して、スナップショット、バックアップ、またはリストア処理に適用できるフックを決定します。
実行フックは、実行中のアプリケーションの機能を低下させたり、完全に無効にしたりすることが多いため、カスタム実行フックの実行時間を最小限に抑えるようにしてください。実行フックが関連付けられている状態でバックアップまたはスナップショット操作を開始した後'キャンセルした場合でも'バックアップまたはスナップショット操作がすでに開始されていればフックは実行できますつまり、バックアップ後の実行フックで使用されるロジックは、バックアップが完了したとは見なされません。 |
実行フックフィルタ
アプリケーションの実行フックを追加または編集するときに、実行フックにフィルタを追加して、フックが一致するコンテナを管理できます。フィルタは、すべてのコンテナで同じコンテナイメージを使用し、各イメージを別の目的(Elasticsearchなど)に使用するアプリケーションに便利です。フィルタを使用すると、一部の同一コンテナで実行フックが実行されるシナリオを作成できます。1つの実行フックに対して複数のフィルタを作成すると、それらは論理AND演算子と結合されます。実行フックごとに最大10個のアクティブフィルタを使用できます。
実行フックに追加する各フィルタは、正規表現を使用してクラスタ内のコンテナを照合します。フックがコンテナと一致すると、そのコンテナに関連付けられたスクリプトがフックによって実行されます。フィルタの正規表現では、正規表現2(RE2)構文を使用します。この構文では、一致リストからコンテナを除外するフィルタの作成はサポートされていません。実行フックフィルタの正規表現に対してTrident保護がサポートする構文については、を参照してください "正規表現2(RE2)構文のサポート"。
リストアまたはクローン処理のあとに実行される実行フックにネームスペースフィルタを追加し、リストアまたはクローンのソースとデスティネーションが異なるネームスペースにある場合、ネームスペースフィルタはデスティネーションネームスペースにのみ適用されます。 |
実行フックの例
にアクセスして "NetApp Verda GitHubプロジェクト" 、Apache CassandraやElasticsearchなどの一般的なアプリケーションの実際の実行フックをダウンロードします。また、独自のカスタム実行フックを構築するための例やアイデアを得ることもできます。
実行フックの作成
Trident protectを使用して、アプリのカスタム実行フックを作成できます。実行フックを作成するには、 Owner 、 Admin 、または Member のいずれかの権限が必要です。
-
カスタムリソース(CR)ファイルを作成し、という名前を付け `trident-protect-hook.yaml`ます。
-
Trident保護環境とクラスタ構成に合わせて、次の属性を設定します。
-
* metadata.name*:(required)このカスタムリソースの名前。環境に適した一意の適切な名前を選択します。
-
*spec.applicationRef *:(required)実行フックを実行するアプリケーションのKubernetes名。
-
*spec.stage *:(required)実行フックが実行されるアクションのステージを示す文字列。有効な値:
-
前
-
投稿
-
-
*spec.action *:(required)指定された実行フックフィルタが一致すると仮定して、実行フックが実行するアクションを示す文字列。有効な値:
-
スナップショット
-
バックアップ
-
リストア
-
フェイルオーバー
-
-
*spec.enabled *:(Optional)この実行フックが有効か無効かを示します。指定しない場合、デフォルト値はtrueです。
-
spec.hookSource:(required) base64でエンコードされたフックスクリプトを含む文字列。
-
*spec.timeout *:(_Optional _)実行フックの実行を許可する時間を分単位で定義する数値。最小値は1分で、指定しない場合のデフォルト値は25分です。
-
* spec.arguments *:(_Optional _)実行フックに指定できる引数のYAMLリスト。
-
*spec.matchingCriteria *:(Optional)実行フックフィルタを構成する各ペアの基準キー値ペアのオプションリスト。実行フックごとに最大10個のフィルタを追加できます。
-
*spec.matchingCriteria.type *:(Optional)実行フックフィルタタイプを識別する文字列。有効な値:
-
コンテナイメージ
-
コンテナ名
-
ポッド名
-
PodLabel
-
ネームスペース名
-
-
*spec.matchingCriteria.value *:(Optional)実行フックフィルタ値を識別する文字列または正規表現。
YAMLの例:
apiVersion: protect.trident.netapp.io/v1 kind: ExecHook metadata: name: example-hook-cr namespace: my-app-namespace annotations: astra.netapp.io/astra-control-hook-source-id: /account/test/hookSource/id spec: applicationRef: my-app-name stage: Pre action: Snapshot enabled: true hookSource: IyEvYmluL2Jhc2gKZWNobyAiZXhhbXBsZSBzY3JpcHQiCg== timeout: 10 arguments: - FirstExampleArg - SecondExampleArg matchingCriteria: - type: containerName value: mysql - type: containerImage value: bitnami/mysql - type: podName value: mysql - type: namespaceName value: mysql-a - type: podLabel value: app.kubernetes.io/component=primary - type: podLabel value: helm.sh/chart=mysql-10.1.0 - type: podLabel value: deployment-type=production
-
-
CRファイルに正しい値を入力したら、CRを適用します。
kubectl apply -f trident-protect-hook.yaml
-
実行フックを作成し、括弧内の値を環境からの情報に置き換えます。例:
tridentctl protect create exechook <my_exec_hook_name> --action <action_type> --app <app_to_use_hook> --stage <pre_or_post_stage> --source-file <script-file>