【发布时间】:2019-03-14 10:16:02
【问题描述】:
有没有办法为 Kubernetes 部署创建继承树?我有许多相似但不相同的部署。它们共享许多 ENV 变量,但不是全部。他们都使用相同的图像。
例如,我有一个开发部署,其配置几乎与生产部署相同,但环境变量指向不同的数据库后端。我有一个 celery 部署,它的配置与生产部署相同,但是它有不同的运行命令。
【问题讨论】:
标签: kubernetes kubernetes-deployment
有没有办法为 Kubernetes 部署创建继承树?我有许多相似但不相同的部署。它们共享许多 ENV 变量,但不是全部。他们都使用相同的图像。
例如,我有一个开发部署,其配置几乎与生产部署相同,但环境变量指向不同的数据库后端。我有一个 celery 部署,它的配置与生产部署相同,但是它有不同的运行命令。
【问题讨论】:
标签: kubernetes kubernetes-deployment
Helm 是很多人为此使用的。它让您可以为 Kubernetes 描述符创建模板并传入参数以从模板生成描述符。
还有其他工具可用于通过将参数注入模板来生成 Kubernetes 部署描述符的变体。 Ansible 也很受欢迎。但是 Helm 与 Kubernetes CNCF 和社区密切相关,并且有很多可用的 official charts 可供选择。
编辑:如果目标是使用单个 docker 映像启用不同的部署(例如,用于开发和生产),那么最好使用单个图表来处理。您可以为每个部署创建不同的值文件,并使用 --values 参数将选择的值文件提供给 helm install。如果图表的某些部分仅在某些时候适用,则可以将它们包裹在 if 条件中以打开/关闭它们。
特别是关于继承的主题,有一个example in the helm documention of how to take another chart as a parent/dependency and override its values,我创建了a chart earlier that you can see in github,includes several other charts 和overrides parts of all of them via the values.yml。它还在包含的图表with globals 之间共享一些配置。如果您希望使用父级来减少重复而不是加入多个应用程序,那么可以创建base/wrapper chart 但it may turn out to be better to just duplicate config。
编辑(180119):Kustomize 的替代品可能很快就会become available in kubectl
【讨论】:
您可能还想查看Kustomize。它提供了一些支持以分层形式编写您的 yaml 清单,因此您不必重复自己。
【讨论】: