【问题标题】:Applying Django migrations once per deployment application in Kubernetes/Google CloudSQL在 Kubernetes/Google CloudSQL 中为每个部署应用程序应用一次 Django 迁移
【发布时间】:2019-07-26 19:05:26
【问题描述】:

我正在寻找一种强大且可靠的策略,以便在我的部署 yaml 文件的每个应用程序中应用我的数据库迁移一次,以便在我的 CI/CD 管道中使用。

最初的(没有双关语)计划是使用initContainers 来执行迁移。我遇到的困难与连接到 CloudSQL 数据库的方法有关——因为我使用gcr.io/cloudsql-docker/gce-proxy:1.11 sidecar 容器让我的应用程序容器连接,我不确定如何提供数据库访问initContainers 因为它们似乎只支持单个容器 pod。是否可以在initContainers 上将代理容器作为 sidecar 运行?

如果不可能,首选的方法是什么?应用程序容器的入口点是否应该在启动应用程序本身之前应用迁移?我担心的是,在部署的初始启动中,可能会产生多个 pod 尝试同时应用迁移的竞争条件?

【问题讨论】:

    标签: django kubernetes database-migration


    【解决方案1】:

    只是为了澄清(由于问题的措辞):虽然initContainers can support more than one,它们是同步资源,所以你不能同时运行两个。

    在您的特定场景中,您可能想尝试其他方式连接到 Cloud SQL,例如 using a private IP。这种方法可以代替initContainer之后的容器中使用sidecar代理的需要。

    但是,它有一些缺点,例如,它仅适用于 VPC 原生集群和第二代 MySQL 服务器。

    另一种方法是 using a postStart handler 在容器创建后立即开始迁移。这样做的好处是可以让您使用边车保留当前模型,但不能保证容器的entrypointis going to be executed before the handler,因此它可能会失败。为此,您可以考虑使用 restartPolicy 来跟踪失败的 pod。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 2019-04-04
      • 2016-10-07
      • 2016-04-14
      • 2015-04-15
      • 2020-07-03
      • 2015-01-06
      相关资源
      最近更新 更多