同一部署的2个Pod同时重启

时间:2019-11-13 18:35:45

标签: docker kubernetes google-kubernetes-engine nginx-ingress

我在kubernetes GKE集群上运行了一个部署的2个pod。我已经将此无状态部署副本扩展到2。

两个副本几乎都在同一时间启动,都在恢复,错误代码为137 ERROR。为了更改重启时间,我手动删除了一个Pod,以便RS(复制盒)创建一个新Pod。

现在,两个Pod都同时重新启动。他们之间有联系吗?两者都必须独立工作。

我尚未设置资源限制。在高达3 GB的群集可用空间中,部署并不会占用太多内存,但仍然获得137,并在pod中重新启动。

为什么两个吊舱都同时重启?其他所有15个微服务均运行正常。

3 个答案:

答案 0 :(得分:3)

这是定义Pod时的常见错误。如果未设置CPU和内存限制,则没有上限,并且pod可能会占用所有资源,导致崩溃并重新启动。这些在这里讨论[2] [3]。您还将看到用户“ ciokan” [1]通过设置限制来解决他的问题。

[1] https://github.com/kubernetes/kubernetes/issues/19825 [2]内存:https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/ [3] CPU:https://kubernetes.io/docs/tasks/configure-pod-container/assign-cpu-resource/

答案 1 :(得分:2)

尝试获取更多描述吊舱的日志

kubectl describe po

通常137码表示内存不足

您是否为Pod分配了适当的内存?  https://kubernetes.io/docs/tasks/configure-pod-container/assign-memory-resource/

答案 2 :(得分:2)

错误代码137是kill -9中的the result(137 = 128 + 9)。可能有几个原因:

  • 正如其他人在他们的答案中指出的那样,这可能是由于内存不足的情况而发生的。请注意,即使未设置resources.limits.memory,也可能是应用程序或进程内存不足。例如,Java应用程序的JVM用完了堆内存。

  • 另一个原因可能是应用程序/进程未处理SIGTERMkill -15),然后是SIGKILLkill -9)来处理保证关机。

由于几乎同时满足一个错误条件,因此很有可能两个Pod几乎都在同一时间重新启动。例如:

  • 两个Pod都是在同一时间启动的,它们获得大约相同的流量和/或完成相同数量和种类的工作,因此它们几乎同时耗尽了内存。

  • 两个Pod都使活动性探针同时失败,因为部署中探针的设置对于两个Pod都是相同的。

检查事件(例如kubectl get events --sort-by=.metadata.creationTimestamp)-它们可以显示一些内容来帮助确定终止容器/吊舱的原因。