繁体   English   中英

Kubernetes 微服务版本控制

[英]Kubernetes Microservice Versioning

我对 Kubernetes 还很陌生,只是从一个示例项目开始学习一切。 我目前正在运行一个需要 MongoDB 作为数据库的 .NET 微服务。 微服务被打包到一个 Docker 镜像中,我创建了一个 Helm 图表来正确部署我的微服务和所需的 MongoDB。

现在我考虑了版本控制并发现了这种方法的一个大问题:我不能只安装该 helm chart 的多个版本来支持运行同一微服务的多个版本,因为这样每个微服务都有自己的数据库,这显然不是我想要的是。

这是否意味着我必须为我的微服务创建两个舵图? 那么一张包含我的 .NET 服务的api图表和一张包含 MongoDB 的db图表? 这样我就可以部署 MongoDB 一次,并使我的 .NET 服务的多个版本指向这个单个实例。 但是,这样我每个微服务没有一个单一的 Helm 图表,而是多个,我猜这会增加部署开销。

这是这样做的吗? 或者有什么我想念的吗? 非常欢迎所有为我指明正确方向的线索!

我会为每项服务推荐一张图表。 helm 依赖项运行良好的地方是您拥有嵌入/隐藏特定单个其他部分的服务。 正如@christopher 所说,如果您的 .NET 服务和 MongoDB 具有不同的生命周期,则不应将它们打包在同一个 helm chart 中。

使用 Helm 的最基本方法是拥有一个包含单个应用程序的图表。 单个图表将包含您的应用程序所需的所有资源,例如部署、服务等。

图表版本和应用程序版本

图表本身的版本(Chart.yaml 中的版本字段)。 图表中包含的应用程序版本(Chart.yaml 中的 appVersion 字段)。 这些是不相关的,可以以您认为合适的任何方式增加。 您可以将它们同步或让它们独立增加。 只要你坚持一种做法,这里就没有对错之分。

这里的重要一点是,您需要在您的团队中采用关于“图表更改”意味着什么的政策。

Helm 不会强制更改图表版本。 您可以部署与前一个版本相同的不同图表。 因此,如果这是您想要做的事情,您需要确保所有团队都在同一页面上进行版本控制。

从好的方面来说,此工作流程允许您单独对图表和应用程序进行版本控制,并且对于拥有将图表与应用程序源代码分开管理的团队的公司来说非常灵活。

伞形图

但是,您也可以创建一个依赖于其他图表的图表,称为伞形图表。

它们是完全外部的,使用requirements.yaml文件。 使用此策略是可选的,并且可以在多个组织中很好地工作。 同样,这里没有对与错的明确答案,这取决于您的团队流程。

看一看: umrella-charts-example

换句话说,一组软件元素,每个元素都有自己的独立图表,但无论出于何种原因(例如设计选择、易于部署、版本控制复杂性),都必须作为自原子单元进行安装或升级

伞形图引用 Helm 图表本身的版本,而不是容器映像的底层版本。 这意味着对图像版本的任何更改都将导致对单个组件图表的图表修改。

决定选项时要考虑什么

有两个维度需要考虑:

  • 团队结构:你必须问自己这样的问题:你有负责每项服务的小型自治团队吗? 你有了解 DevOps 的开发人员吗?
  • 依赖性和再现性:您必须问自己这样的问题:每个服务的依赖性有多大不同? 更改一项服务会破坏另一项服务的风险是什么? 您如何重现特定开发的条件?

在有用的文章中阅读更多内容: helm-managing-microservices

谈到微服务的版本控制以实现向后兼容性,请参阅产品版本控制微服务,通常建议使用语义版本控制

在更广泛的意义上 - 应该有一个商定的主要版本的淘汰路线图,该路线图会传达给 API 消费者(与 SLA 一起)。 这就是跟踪谁使用您的 API 很重要的原因。 看看这篇关于版本管理的有用文章

请参阅用于跟踪微服务版本的示例工具 - DeployHub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM