Hooks的作用
Helm 提供了一個 hook 機制,允許 chart 開發人員在 release 的生命週期中的某些點進行干預。
- 在加載任何其他 chart 之前,在安裝過程中加載 ConfigMap 或 Secret。
- 在安裝新 chart 之前執行作業以備份數據庫,然後在升級後執行第二個作業以恢復數據。
- 在刪除 release 之前運行作業,以便在刪除 release 之前優雅地停止服務。
支持Hook類型
Helm提供瞭如下hook供chart開發者使用:
pre-install:在模板文件被渲染之後、而在Kubernetes創建任何資源創建之前執行。
post-install:在Kubernetes加載全部的資源之後執行。
pre-delete:在Kubernetes刪除任何resource之前執行。
post-delete:在一個release的全部資源被刪除之後執行。
pre-upgrade:在模板渲染之後,而在Kubernetes加載任何資源之前執行。
post-upgrade:在Kubernetes更新完全部resource之後執行。
pre-rollback:在模板被渲染之後、而在Kubernetes執行對全部resource的回滾之前。
post-rollback:在Kubernetes的全部resource已經被修改之後執行。
Hooks 和 release 的生命週期
Helm 爲 install 生命週期定義了兩個 hook:pre-install
和 post-install
。如果 foo
chart 的開發者實現了兩個 hook,那麼生命週期就像這樣改變:
- 用戶運行
helm install foo
- chart 被加載到 Tiller 中
- 經過一些驗證後,Tiller 渲染
foo
模板 - Tiller 準備執行
pre-install
hook(將 hook 資源加載到 Kubernetes 中) - Tiller 會根據權重對 hook 進行排序(默認分配權重 0),並按相同權重的 hook 按升序排序。
- Tiller 然後裝載最低權重的 hook(從負到正)
- Tiller 等待,直到 hook“準備就緒”
- Tiller 將產生的資源加載到 Kubernetes 中。請注意,如果設置
--wait
標誌,Tiller 將等待,直到所有資源都處於就緒狀態,並且在準備就緒之前不會運行post-install
hook。 - Tiller 執行
post-install
hook(加載 hook 資源) - Tiller 等待,直到 hook“準備就緒”
- Tiller 將 release 名稱(和其他數據)返回給客戶端
- 客戶端退出
Hooks的權重
設置方式
權重的執行順序
- 由負到正
- 從小到大
默認權重
- 默認爲0
hook的刪除策略
- “hook-succeeded” :指定 Tiller 應該在 hook 成功執行後刪除 hook。
- “hook-failed” :指定如果 hook 在執行期間失敗,Tiller 應該刪除 hook。
- “before-hook-creation” : 指定 Tiller 應在刪除新 hook 之前刪除以前的 hook。