如何使用 helm 3 让我的应用程序 pod 在数据库 pod 之后运行

问题描述 投票:0回答:1

我对 helm 还很陌生,我有一些基本问题。我正在使用 Helm 3 部署 RoR 应用程序,并使用 postgresql 作为数据库。我已将数据库添加为应用程序的依赖项,并为此目的使用 bitnami postgres helm 图表。当我部署应用程序图表时,应用程序和数据库 Pod 都会被部署。但是,应用程序 pod 在数据库 pod 之前开始运行。该应用程序要求数据库在迁移发生之前在后台运行。但由于应用程序在数据库之前启动,迁移会失败并且数据库 Pod 崩溃,因此应用程序 Pod 也会崩溃。

我希望我的应用程序 pod 等待数据库 pod 开始运行。我如何使用 helm 来做到这一点?

ruby-on-rails postgresql kubernetes kubernetes-helm
1个回答
4
投票

您可以在图表中定义initContainer,它将检查数据库可用性(并等待其启动)。仅当 initContainer 成功退出时,您的应用程序才会启动。

Postgresql 有一个方便的

pg_isready
实用程序,用于检查数据库是否准备好接受请求,可以像这样使用:

      initContainers:
      - name: check-db-ready
        image: postgres:9.6.5
        command: ['sh', '-c', 
          'until pg_isready -h postgres -p 5432; 
          do echo waiting for database; sleep 2; done;']

在此示例中,initContainer 将每 2 秒检查端口 5432 上的服务

postgres
是否准备就绪,并在
pg_isready
实用程序的退出代码为 0 时成功终止

请参阅此博文:https://medium.com/@xcoulon/initializing-containers-in-order-with-kubernetes-18173b9cc222

© www.soinside.com 2019 - 2024. All rights reserved.