Helm 钩子是什么
Helm 钩子在发布生命周期的关键节点执行一次性任务:升级前跑数据库迁移 Job、升级后发通知、测试钩子做验收;钩子用注解与权重控制执行顺序。钩子失败会导致发布中止——迁移没完成就不继续升级,这正是需要的语义。载体通常是 Job,也可以是其他资源。
基本信息
| 常用钩子 | 安装前后、升级前后、回滚后与测试钩子 |
|---|---|
| 顺序 | hook-weight 数值越小越先执行 |
| 清理 | hook-delete-policy 控制 Job 留存 |
| 载体 | 通常为 Job,也可为其他资源 |
| 失败语义 | 钩子未成功则发布中止 |
| 幂等要求 | 钩子任务应可重复执行,重试不产生副作用 |
| 调试 | 先渲染清单核对钩子配置再执行 |
常用钩子与时机
| 钩子 | 触发时机 | 典型用途 |
|---|---|---|
| pre-upgrade | 升级前 | 数据库迁移 |
| post-upgrade | 升级后 | 通知与缓存预热 |
| post-rollback | 回滚后 | 回退脚本 |
| test | 手动测试 | 发布验收 |
迁移钩子
迁移钩子
apiVersion: batch/v1
kind: Job
metadata:
name: db-migrate
annotations:
# 升级前执行,权重靠前
"helm.sh/hook": pre-upgrade
"helm.sh/hook-weight": "-5"
spec:
template:
spec:
restartPolicy: Never
containers:
- name: migrate
image: registry.example.com/migrate:1.9.0典型使用场景
- 数据库迁移:升级前执行迁移 Job,失败即阻断发布
- 发布通知:升级完成后触发通知任务
- 缓存预热:新版本上线后先预热再放开流量
- 验收测试:用测试钩子跑冒烟用例,结果写入发布记录
- 回滚处理:回滚后执行清理或数据回退脚本
- 升级编排:迁移钩子按权重排序,保证多步任务先后有序
- 失败重试:钩子修复后重新升级,Job 记录保留供排查
钩子失败会导致发布中止:迁移没完成就不继续升级,这正是需要的语义。钩子资源随发布一起渲染生成,回滚时一并回退。
钩子任务要设超时:数据库大表迁移可能长时间运行,超时策略与重试语义要预先定义。
钩子镜像要与应用版本对齐:迁移脚本与代码版本脱节会造成数据结构错位。