0Pricing
DevOps Bootcamp · 课时

数据库迁移 pre-upgrade Job

为 Job 添加注释,使其在发布前运行

数据库迁移 pre-upgrade Job 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 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 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。

「数据库迁移 pre-upgrade Job」这节课中我会学到什么?

为 Job 添加注释,使其在发布前运行 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 DevOps Bootcamp 需要有经验吗?

无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。

「数据库迁移 pre-upgrade Job」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 DevOps Bootcamp 课中编写并运行代码吗?

能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. Hook 是什么以及何时触发
  2. 数据库迁移 pre-upgrade Job
  3. Hook 权重与排序
  4. Hook 删除策略
← 返回 DevOps Bootcamp