【问题标题】:Rails Docker Image Deployed on Kubernetes Cluster. Safe to run rake:db:migrate on every Dockerfile build?部署在 Kubernetes 集群上的 Rails Docker 映像。在每个 Dockerfile 构建上运行 rake:db:migrate 安全吗?
【发布时间】:2018-06-15 16:26:08
【问题描述】:

我正在尝试确定在我们的部署中将rake db:migrate 放在哪里。我目前在 Dockerfile 中。

我们现在的基本设置是。

开发者在 Rails 应用上工作 -> 推送到仓库 -> 构建/扫描/推送镜像到 Docker 注册表 -> 部署到 K8s 集群。

目前在此工作流程中,每次构建时都会执行rake db:migrate

这样合理吗?

【问题讨论】:

  • 如何在构建时成功运行rake db:migrate?您是否在同一个容器中运行您的数据库?
  • 这是个好问题。当它在 docker compose 文件中时,它会将 db 列为依赖项,因此首先构建。 k8s 上的这种部署也需要 db 作为依赖项。目前部署不是这样设置的。但是我们已经有一个运行 postgres 的 pod。它还不是正式的依赖项。我的主要问题是,如果我继续从新构建的容器运行 rake db:migrate 会不会弄乱我的数据。
  • 有道理。我已经添加了答案。

标签: ruby-on-rails docker kubernetes


【解决方案1】:

如果您对 Kubernetes 部署使用 RollingUpdate 策略,我认为这是合理的。

如果您甚至运行 Rails 应用程序的多个副本,应该没问题。

例如,如果您正在运行 5 个副本并使用 RollingUpdate,当您部署 Rails 应用程序的新映像时,所有 5 个副本部署都将运行 rake db:migrate,但只有第一次运行会实际应用迁移。其他运行将不执行任何操作。

只要您使用 RollingUpdate,这将允许在副本部署之间传递一些时间,因此您不会遇到数据库锁定问题等,您可能会同时部署所有副本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多