有没有办法为 Kubernetes 部署创建继承树?我有许多相似但不相同的部署。它们共享许多 ENV 变量,但不是全部。他们都使用相同的图像。
例如,我有一个开发部署,其配置几乎与生产部署相同,但环境变量指向不同的数据库后端。我有一个 celery 部署,其配置与生产部署相同,但是,它具有不同的运行命令。
有没有办法为 Kubernetes 部署创建继承树?我有许多相似但不相同的部署。它们共享许多 ENV 变量,但不是全部。他们都使用相同的图像。
例如,我有一个开发部署,其配置几乎与生产部署相同,但环境变量指向不同的数据库后端。我有一个 celery 部署,其配置与生产部署相同,但是,它具有不同的运行命令。
Helm是很多人为此使用的。它让您为 kubernetes 描述符创建模板并传入参数以从模板生成描述符。
还有其他工具可用于通过将参数注入模板来生成 Kubernetes 部署描述符的变体。Ansible 也很受欢迎。但是 Helm 与Kubernetes CNCF和社区密切相关,并且有大量可用的官方图表可供选择。
编辑:如果目标是使用单个 docker 映像启用不同的部署(例如,用于开发和生产),那么最好使用单个图表来处理。您可以为每个部署创建不同的值文件,并将选择的值文件提供给带有--values
参数的 helm install。如果图表的某些部分仅有时适用,则可以将它们包装在if
条件中以打开/关闭它们。
特别是关于继承的主题,helm 文档中有一个示例,说明如何将另一个图表作为父/依赖项并覆盖其值,我之前创建了一个图表,您可以在 github中看到它包括其他几个图表并覆盖部分所有这些都通过 values.yml。它还与 globals在包含的图表之间共享一些配置。如果您希望使用父级来减少重复而不是加入多个应用程序,那么可以创建一个基本/包装图表,但结果可能是只复制 config 更好。
编辑(180119): Kustomize 的替代品可能很快在 kubectl 中可用
您可能还想检查Kustomize。它提供了一些支持以分层形式编写您的 yaml 清单,因此您不必重复自己。