打包基于kubernetes的应用程序

时间:2018-12-26 06:31:00

标签: kubernetes packaging kubernetes-helm

我们有多个(20+)服务在Docker容器中运行,这些服务使用Kubernetes进行管理。这些服务包括数据库,流管道和自定义应用程序。我们希望将此产品作为本地解决方案提供,以便可以像一键式安装之类的东西轻松安装,隐藏基础结构的所有复杂性。

做到这一点的最佳方法是什么?当前,我们有脚本对此进行管理,但是随着我们进入生产环境,将会进行频繁的升级,并且管理所有依赖项将变得越来越复杂。

我目前正在寻找头盔,并且想知道我是否在朝着正确的方向探索。任何指导都会对我有很大帮助。谢谢。

1 个答案:

答案 0 :(得分:3)

Helm似乎是行之有效的方法,但是我认为您需要考虑的更多的是如何向软件交付更新。例如,您将提供整个堆栈的单个“版本”,转换成基础设施设置和微服务版本的特定组成,还是允许客户在发布单个微服务时对其进行升级。您可以为所有内容使用一张巨大的舵图,或者像我在大多数情况下一样,可以使用“伞形”图。它包含所有微服务等的子图。

我通常的设置包含每个服务的子图表,然后正确命名服务名称空间,因此可以在其中引用它们.Release.Name-subchart[-optional]。另外,当我需要升级时,我只是使用--reuse-values --set subchart.image.tag=v1.x.x之类的东西来完善整个图表,它可以对每个服务版本进行精细控制。我还用if .Values.enabled门控了每个子图资源,因此我可以单独启用/禁用每个子图资源。

丑陋的一面是,如果您确实要发布单个服务升级,则仍然需要运行整个伞状图,为某些错误留出更多的表面,但是另一方面,它提供了此功能在一个命令中部署整个解决方案(默认标签为:latest,因此全新安装将始终安装已发布的最新版本,然后使用已标记的版本进行更新)