在 运行 数据库迁移作业之前停止 Kubernetes 集群中的所有 pods

Stopping all pods in Kubernetes cluster before running database migration job

我使用 Helm 将我的应用程序部署到 Kubernetes 集群中。应用程序与数据库一起工作,所以我必须在安装新版本的应用程序之前 运行 数据库迁移。我 运行 使用 Helm“预升级”挂钩使用 Kubernetes 作业对象进行迁移。

问题是当迁移作业开始时,旧版本 pods 仍在使用数据库。他们可以阻止数据库中的对象,因此迁移作业可能会失败。

所以,我想以某种方式在迁移作业开始之前自动停止集群中的所有 pods。有没有办法使用 Kubernetes + Helm 来做到这一点?将感谢所有答案。

我认为有两种方法可以做到这一点。

第一个选项是在部署前缩小 pods(例如,通过 Jenkins、CircleCI、GitLab CI 等)

kubectl scale --replicas=0 -n {namespace} {deployment-name}
helm install .....

第二个选项(这可能更容易,具体取决于您希望如何继续保持这种状态)是添加一个额外的 pre-upgrade 挂钩,其优先级高于迁移挂钩,以便它在升级作业之前运行;然后使用它进行 kubectl 缩小。