Helm 3.0 - 9 / Chart Hooks
Helm3について その9
とりあえず Tutorialにあるネタは一通り触ったので Topicsを見て行く。
今日からここChart Hooks
Hookとは
リリースのライフサイクル中で発生するいくつかのポイントでイベントをひっかけて開発者が介入する機能
Hookの実体
annotationが付けられた Kubernetes リソース。
チャート内に以下の様なannotationを付けたリソースを定義しておくと、これはhookとして扱われる。
annotations:
"helm.sh/hook": post-install
"helm.sh/hook-weight": "-5"
"helm.sh/hook-delete-policy": hook-succeeded
例えば post-installで 通知を投げる jobを入れておけば、インストールが終わったら通知が実行されるようになる。
Hook 一覧
以下のHelmを実行した際にpre/postでKubernetesのリソースに変更を加える前後でイベントが発生する
- Install - pre-install/post-install
- Uninstall - pre-delete/post-delete
- Upgrade - pre-upgrade/post-upgrade
- Rollback - pre-rollback/post-rollback
Uninstallを除く3つのイベントについて、preイベントがテンプレートのレンダリングが完了してKubernetesにmanifestを投入する直前に発生し、postイベントがKubernetesにmanifestの投入が終わった後に発生する。
postイベントについての注意として、install等の操作が –wait指定と共にされた場合、post イベントの発生は Kubernetesリソースが Readyになった後になる(ここ少し曖昧。PodだったらRunningって事かなぁ?)
Uninstallの イベントについては delete イベントなので注意する
複数のHook
イベントに対して複数のhookが定義されていた場合、weightによって実行順序がきめられる。
weightが同じ場合はhookに付けられた名称でsortする。
weightはデフォルトが 0。マイナスも受け付けるのでデフォルトの前に実行したければ weightをマイナスで定義すれば良い。順番を気にしない場合は0にするのがおすすめ。
Hookの状態
複数ある Hookは、順番に実行される。次のHookに進むためには実行されたHookがReadyと認識される必要がある。
Hookが Podや Jobであれば 正常終了した時点でReadyと判断される。それ以外はリソースがKubernetesとして 追加されたり 更新されたタイミングで Readyとなる。
もしも、Hookリソースの Job やPodが Failした場合、Readyとは認識されず、チャートの操作そのものが失敗として扱われる。
Hookのライフサイクル
基本的に Hookで作られた Resourceは、Releaseと連動した管理をされない。Ready 状態になったリソースはuninstallした後も残り続ける
このようなHook リソースのガベージコレクションが将来実装予定だが、今は無いので残り続けるHook リソースについては helm.sh/resource-policy: keep
でアノテーションしておくべきである。
Hookの書き方
前述の通り Hookは annotationを付けた Kubernetesのリソースなので、普通にチャート中にテンプレートとして書いておけば良い。レンダリングは行われるので、普通に テンプレートの機能は使える。
helm.sh/hook
Hookするイベントの一覧を記載する。カンマセパレートで複数のイベントを記入する事が可能。
例えば、インストール状態が変化した事をとらえたければ以下のように書く事が出来る。
annotations:
"helm.sh/hook": post-install,post-delete,post-upgrade
helm.sh/hook-weight
優先順位。小さいほど実行が先になる。
annotations:
"helm.sh/hook-weight": "5"
helm.sh/hook-delete-policy
hook リソースをいつ削除するかというポリシー。
annotations:
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
- before-hook-creation 新しいHookを作ろうとしたときに前のHookが削除される(デフォルト)
- hook-succeeded 正常終了時
- hook-failed 異常終了時
helm.sh/resource-policy
今後実装されるリリース連動 Hookリソースの管理ポリシー(だと思う、コードまで見てないけど)
Uninstallされても残り続ける Hook リソースについては このアノテーションに keepを設定する
annotations:
"helm.sh/resource-policy": keep