在标准 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 的扩展开放。
我正在使用标准的 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 的扩展开放。