【问题标题】:Adding an init-container to a pod in a standard Helm chart在标准 Helm 图表中将初始化容器添加到 pod
【发布时间】:2019-12-28 22:05:17
【问题描述】:

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

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

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

有没有更好的方法来加载数据库备份(除了 init 容器)?

【问题讨论】:

  • 查看自定义。我不使用 helm 应用任何东西,只使用 helm 模板然后 kusztomize (添加自定义)。所有这些都可以一起进行版本控制。
  • 请参阅 postgresqlInitdbArgs github.com/helm/charts/tree/master/stable/postgresql 以获取初始化容器配置
  • 你找到方法了吗?

标签: postgresql kubernetes kubernetes-helm database-backups


【解决方案1】:

通过 values.yaml 添加一些东西“不修改标准 Helm 图表”听起来有点矛盾,因为 values.yaml 本身就是图表的一部分。

如果您仍然需要更复杂的东西来准备数据库,并且想要坚持“开放/封闭原则”,您可以通过以下方式在“开放”和“封闭”之间划定边界,例如:

  • “已关闭部分”:将 Statefulset 中的 initContainers 部分保留为 一个像 exit 0 这样的“占位符”作为容器 命令;
  • “开放部分”:为initContainers 提供实际值 “图像”和“命令”作为values.html 的一部分。

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

【讨论】:

  • 如果图表有扩展点,我可以使用我的 values.yaml 覆盖标准图表中的值。我需要一种将备份文件从类似 S3 的存储库复制到 PostgreSQL pod 的方法。我不确定如何使用 postgresqlInitdbArgs 值来做到这一点,这只是一个环境变量。
  • 好吧,你说得对postgresqlInitdbArgs;我认为它是 psql 命令行参数。已编辑我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 1970-01-01
  • 2017-07-03
  • 1970-01-01
  • 2020-09-22
  • 2021-09-21
相关资源
最近更新 更多