是否将Kubernetes StatefulSet配置为启动pod?启动后首先重新启动失败的容器



基本信息

嗨,我遇到了一个关于Kubernetes StatefulSets的问题。我正试着用3个复制品制作一套。这些复制品/pod每个都有一个容器,该容器根据其网络id在其他pod中ping一个容器。容器需要所有pod的响应。如果没有得到响应,容器将失败。在我的情况下,我需要3个吊舱/副本来进行设置。

问题描述

发生的情况如下。Kubernetes启动2个pod的速度相当快。然而,由于我需要3个pod来构建一个功能齐全的集群,前2个pod一直在崩溃,因为第3个还没有启动。出于某种原因,Kubernetes选择继续重新启动两个pod,而不是添加第三个pod,这样我的集群就会正常工作。

我已经看到我的设置在大约15分钟后正常运行,因为Kubernetes在那时添加了第三个pod。

问题

所以,我的问题。

有人知道如何延迟重新启动失败的容器,直到启动所需数量的pod/副本?

我已经找到了原因。StatefulSet按特定顺序启动pod。如果其中一个吊舱未能发射,则不会发射下一个吊舱。

您可以添加一个podManagementPolicy: "Parallel"来启动pod,而无需等待先前的pod为Running。参见本文档

我认为处理问题的更好方法是利用liveness probe,如文档中所述,而不是延迟重启时间(在YAML中不可配置)。

你的pod在启动后立即响应活跃度探测,让Kubernetes知道它们是活跃的,从而阻止它们重新启动。与此同时,你的吊舱不断地向其他吊舱发出ping信号,直到它们全部升起。只有当所有pod都启动时,才会为外部请求提供服务。这类似于创建动物园管理员组合。

相关内容

  • 没有找到相关文章

最新更新