配置 Kubernetes StatefulSet 以启动 pods 启动后首先重新启动失败的容器?
Configure Kubernetes StatefulSet to start pods first restart failed containers after start?
基本信息
嗨,我遇到了 Kubernetes StatefulSets 的问题。我正在尝试启动一个包含 3 个副本的集合。
这些 replicas/pods 每个都有一个容器,它根据它们的网络 ID ping 另一个 pods 中的容器。
容器需要来自 all pods 的响应。如果没有得到响应,容器将失败。在我的情况下,我需要 3 pods/replicas 才能使我的设置正常工作。
问题描述
发生的事情如下。 Kubernetes 启动 2 pods 相当快。但是,由于我需要 3 pods 来构建功能齐全的集群,因此前 2 pods 一直崩溃,因为第 3 个尚未启动。
出于某种原因,Kubernetes 选择继续重启两者 pods 而不是添加第三个 pod,这样我的集群才能正常运行。
我已经在大约 15 分钟后正确地看到了我的设置 运行,因为 Kubernetes 那时已经添加了第三个 pod。
问题
所以,我的问题。
有谁知道在启动所需数量的 pods/replicas 之前延迟重启失败容器的方法?
我认为解决您的问题的更好方法是利用 document 中所述的活性探测,而不是延迟重启时间(在 YAML 中不可配置)。
您的 pods 在它们启动后立即响应活性探测,让 Kubernetes 知道它们是活动的,从而防止它们被重新启动。同时,您的 pods 会一直 ping 其他人,直到他们都启动为止。只有当你所有的 pods 都启动时才会为外部请求提供服务。这类似于 creating a Zookeeper ensemble.
我已经找到了原因。
StatefulSets 按特定顺序启动 pods。如果 pods 之一无法启动,则不会启动下一个。
您可以添加 podManagementPolicy: "Parallel"
来启动 pods,而无需等待之前的 pods 成为 Running
。
参见 this documentation
基本信息
嗨,我遇到了 Kubernetes StatefulSets 的问题。我正在尝试启动一个包含 3 个副本的集合。 这些 replicas/pods 每个都有一个容器,它根据它们的网络 ID ping 另一个 pods 中的容器。 容器需要来自 all pods 的响应。如果没有得到响应,容器将失败。在我的情况下,我需要 3 pods/replicas 才能使我的设置正常工作。
问题描述
发生的事情如下。 Kubernetes 启动 2 pods 相当快。但是,由于我需要 3 pods 来构建功能齐全的集群,因此前 2 pods 一直崩溃,因为第 3 个尚未启动。 出于某种原因,Kubernetes 选择继续重启两者 pods 而不是添加第三个 pod,这样我的集群才能正常运行。
我已经在大约 15 分钟后正确地看到了我的设置 运行,因为 Kubernetes 那时已经添加了第三个 pod。
问题
所以,我的问题。
有谁知道在启动所需数量的 pods/replicas 之前延迟重启失败容器的方法?
我认为解决您的问题的更好方法是利用 document 中所述的活性探测,而不是延迟重启时间(在 YAML 中不可配置)。
您的 pods 在它们启动后立即响应活性探测,让 Kubernetes 知道它们是活动的,从而防止它们被重新启动。同时,您的 pods 会一直 ping 其他人,直到他们都启动为止。只有当你所有的 pods 都启动时才会为外部请求提供服务。这类似于 creating a Zookeeper ensemble.
我已经找到了原因。 StatefulSets 按特定顺序启动 pods。如果 pods 之一无法启动,则不会启动下一个。
您可以添加 podManagementPolicy: "Parallel"
来启动 pods,而无需等待之前的 pods 成为 Running
。
参见 this documentation