在 Kubernetes 中部署一个 ignite 集群时,我遇到了一个阻止集群成员加入组的问题。如果我使用 readinessProbe 和 livenessProbe,即使延迟低至 10 秒,它们的节点也不会相互连接。如果我删除这些探针,它们会发现彼此就好了。
所以,我的问题是:你能用这些探针来监控节点的健康状况吗?如果可以,什么是合适的设置。最重要的是,无论如何,Ignite 有什么好的、快速的健康检查?
在 Kubernetes 中部署一个 ignite 集群时,我遇到了一个阻止集群成员加入组的问题。如果我使用 readinessProbe 和 livenessProbe,即使延迟低至 10 秒,它们的节点也不会相互连接。如果我删除这些探针,它们会发现彼此就好了。
所以,我的问题是:你能用这些探针来监控节点的健康状况吗?如果可以,什么是合适的设置。最重要的是,无论如何,Ignite 有什么好的、快速的健康检查?
我面临同样的问题,使用嵌入在 Java spring 应用程序中的 Ignite。
正如你所说,readinessProbe:
在 KubernetesDeployment
spec.template.spec.container
上的副作用是阻止 Kubernetes Pod
s 在相关的 Kubernetes 上被Service
列为Endpoint
s
尝试不使用任何readinessProbe
,似乎确实效果更好(Ignite 节点都加入了同一个 Ignite 集群)
然而,这有一个不受欢迎的副作用,即Pod
在尚未准备好时暴露 Kubernetes,因为 Spring 尚未完全启动......
更新:
在 ignite 邮件列表上发布后,看起来 StatefulSets 是要走的路。(感谢德米特里!)
我想我将留在下面的逻辑中以自我修复任何分段问题,尽管希望它不会经常被触发。
原答案:
我们有同样的问题,我认为我们有一个可行的解决方案。Kubernetes 发现 spi 在服务就绪时列出它们。
这意味着如果在启动时没有准备好的 pod,ignite 实例都认为自己是第一个并创建自己的网格。
如果我们有一种确定的方式来使 Pod 不属于“权威”网格的一部分,那么集群应该能够自我修复。
为此,我们保留对 TcpDiscoveryKubernetesIpFinder 的引用,并使用它定期检查 ignite pod 列表。
如果实例是不包含列表中按字母顺序排列的第一个 ip 的集群的一部分,我们知道我们有一个分段拓扑。杀死进入该状态的 pod 应该会导致它们再次出现,查看服务列表并加入正确的拓扑。