在多个Pod之间共享状态(变量)

时间:2019-05-08 09:47:30

标签: java docker kubernetes

我有两个Pod,每个Pod运行一个ServiceA的实例。 ServiceA使用在一个单独的pod上运行的数据库。 通过此设置,我可以流畅地进行部署,并且还可以使用后备服务。

现在,我的ServiceA有一个常规任务GatheringTask,该任务从外部服务收集信息,对其进行处理并将其存储到数据库中。我要防止的是,两个运行ServiceA的pod都同时执行此操作。

我想到的第一个解决方案相对容易。我在数据库容器中创建了一个新表,用于存储GatheringTask的状态,因此ServiceA的每个实例在启动数据库的GatheringTask之前都会检查该数据库中保留的状态。如果on已在运行,请不要再执行此操作。这会产生很多开销,因为我必须一直更新和读取数据库。还有更多代码。

现在我想知道,是否有一种更直接的方法来在Pod之间共享状态?有没有一种方法,我可以共享一个env属性,甚至可以在Pod之间映射共享内存,因此我不需要绕过第三个Pod? 我的豆荚是用kuberenetes管理的。

1 个答案:

答案 0 :(得分:0)

解决此问题的正确方法是使用分布式锁管理器,例如ZooKeeper。它可以作为码头工人,Kubernetes友好映像和适当的配方使用,例如:https://curator.apache.org/curator-recipes/shared-reentrant-lock.html它可以提供可靠的锁定机制。