如何在 k8s 部署 pod 时,让迁移只执行一次
动机
将执行迁移写到了镜像执行的脚本里,使用 k8s 部署一个三个副本的含有 laravel
容器的 pod
。
目前的问题
第一次部署的时候,由于数据库没有创建,pod
很快报错被重启了,之后创建了数据库,等待 pod
重启后执行一系列的脚本并启动容器进程。之后发现仍然报错重启,使用 kubectl logs
查看容器日志的时候发现在执行迁移的时候报错(SQL错误),说某表已经存在,我分析能导致这个问题的应该就是执行迁移过程中多个 pod
并发导致的,并且某个迁移文件执行出错了,导致没有将执行过的迁移数据写入到 migrations
表。请问如何解决这个问题?
单独设置一个 job for database migrate,或者将 deployment 的 rollingUpdate 滚动升级的 maxSurge 的值改为 1.