Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kubernetes 如何管理微服务中的状态?_Kubernetes_Microservices - Fatal编程技术网

Kubernetes 如何管理微服务中的状态?

Kubernetes 如何管理微服务中的状态?,kubernetes,microservices,Kubernetes,Microservices,首先,这是一个关于我的毕业论文的问题。我对此做了一些研究,这似乎是一个尚未解决的问题(可能不是那么普遍) 在开始讨论这个问题之前,我将给出一个简单的用例示例 根据状态X,我有多个包含微服务的名称空间。为了管理这个名称空间,微服务被放在以状态命名的名称空间中。(因此名称空间状态为A,状态为B,…) 需要知道的重要一点是,每个微服务在启动服务时都需要这种状态。它将下载必要的文件。。。据国家统计。当使用状态A版本1启动时,状态很可能每月更新一次。当这种情况发生时,重要的是让所有依赖于状态的微服务进行必

首先,这是一个关于我的毕业论文的问题。我对此做了一些研究,这似乎是一个尚未解决的问题(可能不是那么普遍)

在开始讨论这个问题之前,我将给出一个简单的用例示例

根据状态X,我有多个包含微服务的名称空间。为了管理这个名称空间,微服务被放在以状态命名的名称空间中。(因此名称空间状态为A,状态为B,…)

需要知道的重要一点是,每个微服务在启动服务时都需要这种状态。它将下载必要的文件。。。据国家统计。当使用状态A版本1启动时,状态很可能每月更新一次。当这种情况发生时,重要的是让所有依赖于状态的微服务进行必要的升级(数据库、内存状态等)

我目前解决这个问题的方法就是简单地使用事件,当状态发生变化时需要更新的微服务可以订阅事件并相应地迁移/升级。我面临的唯一问题是,虽然服务正在升级,但它仍然可以工作。因此,我应该首先复制服务,让复制升级,当升级成功时,关闭原始服务。因此,使用的业务流程服务必须能够创建重复项(包括复制状态)

我的问题是,我的问题已经有解决方案了吗(如果有,是哪些)?我调查过Netflix Conductor(它的工作流程和活动似乎很有前途)、Amazon SWF、Marathon和Kubernetes,但没有一个能解决我的问题


最棒的是,现有解决方案不应绑定到特定平台(Azure、GCE等)。

要实现不间断升级,您应该使用提供服务的节点群集并执行滚动更新,该更新一次只取出一个节点进行升级,剩下的节点继续服务。我建议查看虚拟服务(如in)和的概念

对于诱导状态,我建议研究容器初始化机制。例如,在你可以使用的docker中,或者在kubernetes中,有一个。不过,您应该注意,现在有一种趋势是将服务和状态解耦,这意味着状态保存在与服务部署分离的数据库中,允许将服务视为无状态组件,可以在不丢失状态的情况下进行替换(假定服务和所需状态之间的接口没有更改)。这在服务更改更频繁而数据库设计不太频繁的情况下是很好的


另一个注意事项——我不确定在名称空间中表示状态是一个好主意。通常,名称空间是用于组织(代码、服务等)的静态构造,旨在实现稳定性

澄清一下-您建议使用事件作为通知服务何时升级的手段?不,这是我目前拥有的,我不确定这是否是我所采取的理想解决方案/方法。服务需要知道何时升级,并且状态不是定期更新到新版本。您可能会发现服务注册中心模式很有趣-而且这个答案旨在管理服务,而不是状态。这并不能解决我的问题,因为服务使用的状态(它们可以是无状态的或有状态的,单独的数据库仍然需要更新/迁移)没有改变?是的,所以你的问题是如何升级数据库?这在很大程度上取决于您使用的数据库以及更改的性质。如果你能提供这些细节,我也许能提供更多帮助。