基本信息
嗨,我遇到了一个关于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都启动时,才会为外部请求提供服务。这类似于创建动物园管理员组合。