Helm 3.0 - 9 / Chart Hooks

Page content

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