当前位置:  开发笔记 > 运维 > 正文

Kubernetes滚动部署和数据库迁移

如何解决《Kubernetes滚动部署和数据库迁移》经验,为你挑选了2个好方法。

使用数据库迁移处理滚动更新时,kubernetes如何处理此问题?

对于一个实例 - 我有一个应用程序,从app-v1更新到app-v2,其中包括一个用于更改现有表的迁移步骤.所以这意味着它需要我在db:migrate部署后运行类似于rails应用程序的东西.

在3副本集上进行滚动部署时.它将从一个pod部署到另一个pod.可能允许没有新版本应用程序的POD中断.

虽然这种情况不是经常发生的事情.它很可能会.我想了解这种情况的最佳/推荐方法.



1> mbuechmann..:

防止旧版本破坏的一种方法是将迁移分成多个步骤.

例如,您要重命名数据库中的列.直接重命名列会破坏应用程序的旧版本.这可以分为多个步骤:

添加插入新列的数据库迁移

更改应用程序,以便所有写入都转到旧列和新列

运行将所有值从旧列复制到新列的任务

更改它从新列中读取的应用程序

添加删除旧列的迁移

不幸的是,这很麻烦,但可以防止维护页面出现停机.



2> tselvan..:

Kubernetes本身不会通过数据库迁移来处理滚动更新。这是特定于应用程序的,因此应用程序开发人员将必须处理它。您可能必须执行与非k8s设置相同的操作。

无论如何,我会这样做:

将副本缩放到1。

更新图像。

将副本缩放到3。

这不是万无一失的,但不涉及代码更改。在db:migrate步骤与实际服务器侦听之间有一个小窗口,在该窗口中,请求将发送到较旧的副本(新副本就绪后将终止)。该请求可能失败也可能不会失败,具体取决于代码块是否与架构更改直接相关。

如果我不太关心停机时间,那么我将使用重新创建策略。

推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有