Helm Hooks & Tests
Helm Hooks
Hooks 允许在 Helm 生命周期的特定时间点执行操作。
Hook 类型
| Hook | 触发时机 |
|---|---|
pre-install | 安装前 |
post-install | 安装后 |
pre-upgrade | 升级前 |
post-upgrade | 升级后 |
pre-rollback | 回滚前 |
post-rollback | 回滚后 |
pre-delete | 删除前 |
post-delete | 删除后 |
test | helm test 时 |
数据库迁移 Hook
yaml
# templates/hooks/db-migrate.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: {{ include "my-app.fullname" . }}-db-migrate
annotations:
"helm.sh/hook": pre-upgrade,pre-install
"helm.sh/hook-weight": "-5" # 执行顺序(数字越小越先执行)
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
spec:
template:
spec:
restartPolicy: Never
containers:
- name: migrate
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
command: ["python", "manage.py", "migrate"]
env:
- name: DATABASE_URL
valueFrom:
secretKeyRef:
name: {{ include "my-app.fullname" . }}-db-secret
key: url清理 Hook
yaml
# templates/hooks/cleanup.yaml
apiVersion: batch/v1
kind: Job
metadata:
name: {{ include "my-app.fullname" . }}-cleanup
annotations:
"helm.sh/hook": pre-delete
"helm.sh/hook-delete-policy": hook-succeeded
spec:
template:
spec:
restartPolicy: Never
containers:
- name: cleanup
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
command: ["python", "cleanup.py"]Hook 删除策略
| 策略 | 说明 |
|---|---|
before-hook-creation | 创建新 Hook 前删除旧的 |
hook-succeeded | Hook 成功后删除 |
hook-failed | Hook 失败后删除 |
Helm Test
yaml
# templates/tests/test-api.yaml
apiVersion: v1
kind: Pod
metadata:
name: "{{ include "my-app.fullname" . }}-test-api"
annotations:
"helm.sh/hook": test
"helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded
spec:
containers:
- name: test
image: curlimages/curl:8.5.0
command:
- sh
- -c
- |
# 测试健康检查
curl -f http://{{ include "my-app.fullname" . }}:{{ .Values.service.port }}/healthz || exit 1
# 测试 API
curl -f http://{{ include "my-app.fullname" . }}:{{ .Values.service.port }}/api/v1/status || exit 1
echo "所有测试通过!"
restartPolicy: Neverbash
# 运行测试
helm test my-release -n production --logs