如果pod在kubernetes中重新启动/失败,我如何防止在一个pod内运行的多个容器的IP交换



我们在Kubernetes中设置了一个Cassandra集群。我们正在使用statefulSet&无头服务。并计划实施多机架功能。

为此,我想在一个pod中部署多个容器,并计划为此添加Affinity规则。

但我能想到的一个可能的问题是

在Kubernetes中,IP可以在重启/失败期间更改

所以,如果我在一个吊舱内有两个容器,我的吊舱就会下降。当pod出现时,两个容器都有可能交换它们的IP,这将导致状态不一致。由于这2个容器的主要令牌范围发生了更改,而其他Cassandra节点不会对此更改进行更新。

如果两个容器都获得了新的IP,那么我看不出有任何问题,因为其他Cassandra节点会更新自己。在这一点上我是对的吗?

如何在重新启动/失败期间防止此IP交换?

有什么文件可以帮助我实现多机架功能吗?

因此,如果我在一个pod中有2个容器,那么我的pod就会宕机。当pod出现时,两个容器都有可能交换它们的IP,这将导致状态不一致。由于这2个容器的主要令牌范围发生了更改,而其他Cassandra节点不会对此更改进行更新。

不可能进行IP交换。由于C*集群会抱怨IP已经在使用。因此,如果C*pod找到了C*集群中不存在的其他IP,这是可以的,但如果它试图找到C*集群内存在的IP,那么pod将无法启动并保持挂起状态。

如果两个容器都获得了新的IP,那么我看不出有任何问题,因为其他Cassandra节点会更新自己。在这一点上我是对的吗?

是的,你说得对。

如何在重新启动/失败期间防止此IP交换?

我们可以称之为IP交叉,而不是IP交换。你无法阻止这种情况的发生。只有在出现这种情况时,你才能采取补救措施。你可以识别IP交叉已经发生,然后杀死吊舱,看看它是否获得了其他IP。

最新更新