Hooks 與生命週期

🔥 Vibe Prompt

「新增 Helm hooks:安裝前資料庫遷移、安裝後通知、升級前備份。」

Hook 類型

apiVersion: batch/v1
kind: Job
metadata:
  name: db-migrate
  annotations:
    "helm.sh/hook": pre-install,pre-upgrade
    "helm.sh/hook-weight": "-5"
    "helm.sh/hook-delete-policy": hook-succeeded
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: migration
          image: myapp:latest
          command: ["npm", "run", "migrate"]
---
apiVersion: v1
kind: Pod
metadata:
  name: notify
  annotations:
    "helm.sh/hook": post-install,post-upgrade
    "helm.sh/hook-weight": "10"
spec:
  restartPolicy: Never
  containers:
    - image: curlimages/curl
      command: ["curl", "-X", "POST", "https://hooks.slack.com/..."]

Hook 執行順序(依權重)

-10  pre-install(備份)
 -5  pre-install(遷移)
  0  install(主要安裝)
  5  post-install(驗證)
 10  post-install(通知)

生命週期最佳實踐

| Hook | 用途 | |------|------| | pre-install | 資料庫建立、結構初始化 | | post-install | 通知、快取預熱 | | pre-upgrade | 備份、遷移 | | post-upgrade | 煙霧測試、回滾檢查 | | pre-delete | 快照、清理 | | post-delete | 通知 |

回滾安全

annotations:
  "helm.sh/hook": pre-upgrade
  "helm.sh/hook-delete-policy": before-hook-creation

完整生命週期

helm install → pre-install hooks → install → post-install hooks
helm upgrade → pre-upgrade hooks → upgrade → post-upgrade hooks
helm rollback →(重新執行 upgrade hooks)
helm delete → pre-delete hooks → delete → post-delete hooks

關鍵要點

  • ✅ 請根據本章主題補充具體的學習重點
  • ✅ 建議加入比較表格、程式碼範例或流程圖

Helm Hooks:在部署的關鍵時刻執行動作

Helm 的安裝、升級、解除安裝是一個生命週期。有時候你需要在特定時間點執行一些任務——這就是 Hooks 的用途。

最常見的 Hook 應用場景

| Hook 類型 | 觸發時機 | 用途 | |:---------|:--------|:----| | pre-install | 安裝前 | 建立資料庫、產生 Secret、驗證環境變數 | | post-install | 安裝後 | 初始化資料、傳送部署通知 | | pre-upgrade | 升級前 | 備份資料庫、檢查相容性 | | post-upgrade | 升級後 | 執行資料遷移(Migration) | | pre-delete | 解除安裝前 | 清理外部資源(例如 S3 Bucket) | | post-delete | 解除安裝後 | 發送刪除通知、清理監控 |

為什麼不用 Init Container?

Kubernetes 已經有 Init Container 了,為什麼還需要 Helm Hooks?

| 功能 | Init Container | Helm Hook | |:----|:-------------:|:---------:| | 在部署前執行 | ❌ | ✅ pre-install | | 在解除安裝時執行 | ❌ | ✅ pre-delete | | 與 Helm Release 狀態整合 | ❌ | ✅ Hook 失敗則安裝失敗 | | 權限管理 | Pod 層級 | 可使用不同的 Service Account |

簡單說:Init Container 管理的是 Pod 的生命週期,Helm Hook 管理的是 Release 的生命週期

下一章預告:安全性與最佳實踐

這是 Helm 課程的最後一章實戰內容。你會學到如何保護你的 Helm Chart——簽署 Chart 確保完整性、設定 RBAC 讓不同團隊只能操作自己的 Release、以及用 CI/CD 自動化 Chart 的測試與發布。

解鎖完整教學內容

本章為付費內容。加入專案即可解鎖超過 5000 字的深度解析,包含 10 個以上神級 Prompt 與真實 Source Code 範例!