我对 helm 还很陌生,我有一些基本问题。我正在使用 Helm 3 部署 RoR 应用程序,并使用 postgresql 作为数据库。我已将数据库添加为应用程序的依赖项,并为此目的使用 bitnami postgres helm 图表。当我部署应用程序图表时,应用程序和数据库 Pod 都会被部署。但是,应用程序 pod 在数据库 pod 之前开始运行。该应用程序要求数据库在迁移发生之前在后台运行。但由于应用程序在数据库之前启动,迁移会失败并且数据库 Pod 崩溃,因此应用程序 Pod 也会崩溃。
我希望我的应用程序 pod 等待数据库 pod 开始运行。我如何使用 helm 来做到这一点?
您可以在图表中定义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