数据库迁移 pre-upgrade Job
为 Job 添加注释,使其在发布前运行
数据库迁移 pre-upgrade Job 是 CoddyKit 上的免费 Helm Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Helm Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Helm Academy 课程共包含 4 节课。
一个实际用例
在新版本应用代码发布之前,通常需要迁移数据库结构。pre-upgrade 钩子非常适合安全地运行这项迁移。
为什么要在发布前运行
将其作为 pre-upgrade 运行,意味着数据库结构会在新 Pod 启动前准备就绪。新代码不会接触旧的、不匹配的数据库。
"helm.sh/hook": pre-upgrade从 Job 开始
迁移只运行一次,随后就会退出,因此应将其建模为 Kubernetes Job。Helm 会等待 Job 完成,然后再继续升级。
apiVersion: batch/v1
kind: Job
metadata:
name: db-migrate添加钩子注解
请在 Job 的元数据中将其标记为钩子。将 helm.sh/hook 注解设为 pre-upgrade,就能把这个普通 Job 转换为钩子。
metadata:
annotations:
"helm.sh/hook": pre-upgrade运行迁移命令
Job 的容器会运行您的迁移工具。请将它指向应用使用的同一个数据库,以便将结构变更应用到正确的位置。
spec:
containers:
- name: migrate
image: myapp:1.4
command: ["./migrate", "up"]失败时永不重启
请将 Job 的 restartPolicy 设置为 Never 或 OnFailure。不断循环的迁移会阻塞升级,使 Helm 永远无法继续。
spec:
template:
spec:
restartPolicy: Never为镜像标签使用模板
请通过模板设置迁移器的标签,使其与应用保持同步。重用部署读取的同一个 .Values.image.tag,即可确保版本匹配。
image: "myapp:{{ .Values.image.tag }}"Helm 会阻塞直到完成
由于它是 pre-upgrade 钩子,Helm 会暂停升级,直到 Job 报告成功。如果迁移失败,发布过程就不会发生。🛑
成功后进行清理
否则旧的迁移 Job 会不断堆积。请将钩子与 hook-delete-policy 配合使用,这样成功的 Job 就会被删除,而不会使命名空间变得杂乱。
"helm.sh/hook-delete-policy": hook-succeeded使用唯一名称会有所帮助
钩子 Job 创建后不可变,因此固定名称可能会在下一次升级时发生冲突。在名称中加入 .Release.Revision,可以确保每次运行都彼此区分。
name: db-migrate-{{ .Release.Revision }}使用试运行进行测试
在实际升级之前,请渲染 chart 以确认钩子看起来正确。试运行会显示 Helm 将要创建的 Job 清单,而不会接触集群。
helm upgrade myapp ./mychart --dry-run快速检查
您需要在升级期间新应用 Pod 启动之前运行数据库结构迁移。
回顾
您已将迁移建模为 pre-upgrade Job,将 restartPolicy 设置为 Never,并让 Helm 在迁移成功前阻塞,从而确保新代码才会发布。🗄️
常见问题解答
「数据库迁移 pre-upgrade Job」课时是免费的吗?
是的 — 「数据库迁移 pre-upgrade Job」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Helm Academy 课程的其余内容,请升级到 CoddyKit PRO。 Helm Academy 课程共包含 4 节课。
「数据库迁移 pre-upgrade Job」这节课中我会学到什么?
为 Job 添加注释,使其在发布前运行 你通过在浏览器中直接运行的动手代码来练习 Helm Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Helm Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Helm Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「数据库迁移 pre-upgrade Job」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Helm Academy 课中编写并运行代码吗?
能。每节 Helm Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Hook 是什么以及何时触发
- 数据库迁移 pre-upgrade Job
- Hook 权重与排序
- Hook 删除策略