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

问题描述

我们已经在Kubernetes中设置了一个Cassandra集群。我们正在使用statefulSet和无头服务。并计划实施 Multi-Rack 功能。

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

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

在Kubernetes中,IP可能会在重新启动/失败期间更改。

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

如果两个容器都获得新的IP,那么我看不到任何问题,因为其他Cassandra节点将自行更新。我现在正确吗?

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

是否有任何文档可以帮助我实现多机架功能?

解决方法

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

无法进行IP交换。由于C *群集将抱怨IP已被使用。因此,如果C * Pod提出了C *集群中不存在的其他IP,则很好,但是如果它尝试提出C *集群中存在的IP,则Pod将无法启动并保持挂起状态。

如果两个容器都获得新的IP,那么我看不到任何问题,因为其他Cassandra节点将自行更新。我现在正确吗?

是的,您是对的。

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

我们可以将其称为IP交叉,而不是IP交换。您无法避免这种情况。发生这种情况时,您只能采取补救措施。您可以识别出发生了IP交叉,然后杀死该Pod,看看它是否拾取了其他IP。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...