0

基本信息

嗨,我遇到了 Kubernetes StatefulSets 的问题。我正在尝试用 3 个副本启动一个集合。这些副本/pod 都有一个容器,该容器根据它们的 network-id ping 其他 pod 中的容器。容器需要来自所有pod 的响应。如果它没有得到响应,容器将失败。在我的情况下,我需要 3 个 pod/副本才能使我的设置正常工作。

问题描述

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

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

问题

所以,我的问题。

有谁知道在启动所需数量的 Pod/副本之前延迟重新启动失败容器的方法?

4

2 回答 2

1

从那以后,我找到了造成这种情况的原因。StatefulSets 以特定顺序启动 pod。如果其中一个 pod 未能启动,它不会启动下一个。

您可以添加 apodManagementPolicy: "Parallel"来启动 pod,而无需等待以前的 pod 成为Running. 请参阅本文档

于 2018-01-21T12:42:44.627 回答
0

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

您的 pod 在启动后立即响应 liveness probe,让 Kubernetes 知道它们还活着,从而防止它们重新启动。同时,您的 pod 会不断 ping 其他人,直到它们都启动为止。只有当您的所有 pod 都启动时,才会为外部请求提供服务。这类似于创建 Zookeeper ensemble

于 2017-10-25T02:49:03.470 回答