【问题标题】:Stopping all pods in Kubernetes cluster before running database migration job在运行数据库迁移作业之前停止 Kubernetes 集群中的所有 Pod
【发布时间】:2022-01-31 19:07:11
【问题描述】:

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

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

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

【问题讨论】:

    标签: kubernetes kubernetes-helm helm3


    【解决方案1】:

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

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

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

    第二个选项(这可能更容易,具体取决于您希望如何维护它)是添加一个额外的升级前钩子,其优先级高于迁移钩子,以便它在升级作业之前运行;然后使用它来缩小kubectl

    【讨论】:

    • 感谢您的回答!我想到了相同的方向,但我还有一个额外的问题 - kubectl scale --replicas=0 命令是否等到所有 pod 真正停止,然后才将控制权传递给下一个优先级挂钩?或者我应该以其他方式检查 pod 状态?
    • 是的,它将向所有副本发送终止信号然后返回。就我个人而言,我会这样做,然后等待Terminating 状态的 pod 消失后再继续,但这只是我和我迂腐的自我。
    猜你喜欢
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 2021-04-18
    • 1970-01-01
    相关资源
    最近更新 更多