在标准 Helm chart 中向 pod 添加 init-container

Adding an init-container to a pod in a standard Helm chart

我正在使用标准的 PostgreSQL Helm 图表将数据库部署到 Kubernetes 集群。我需要在部署过程中添加逻辑,以将最新的数据库备份加载到 PostgreSQL 中。我想为 statefulsets.yaml 中定义的主 pod 创建一个 init 容器。

我可以直接在 PostgreSQL 图表的 statefulsets.yaml 模板中添加初始化容器定义。出于明显的原因,我想避免这样做(应用 Open/Closed 原则)。

如何在不修改标准 Helm 图表(例如,来自 values.yaml)的情况下将 init 容器添加到 PostgreSQL master?

是否有更好的方式来加载数据库备份(除了初始化容器)?

通过 values.yaml 添加内容 "without modifying the standard Helm chart" 听起来有点矛盾,因为 values.yaml 本身就是图表的一部分。

如果您仍然需要更复杂的东西来准备数据库,并希望坚持使用 "Open/Closed Principle",您可以在 "Open" 和 "Closed" 之间画出边界以下方式为例:

  • "Closed part":将Statefulset中的initContainers部分保留为 一个 "placeholder" 作为容器的 exit 0 命令;
  • "Open part":为 initContainers 提供实际值 "image" 和 "command" 作为 values.html 的一部分。

这样你的 statefulset 将看起来对更改关闭,但对通过 values.html 的扩展开放。