我在kubernetes GKE集群上运行了一个部署的2个pod。我已经将此无状态部署副本扩展到2。
两个副本几乎都在同一时间启动,都在恢复,错误代码为137 ERROR。为了更改重启时间,我手动删除了一个Pod,以便RS(复制盒)创建一个新Pod。
现在,两个Pod都同时重新启动。他们之间有联系吗?两者都必须独立工作。
我尚未设置资源限制。在高达3 GB的群集可用空间中,部署并不会占用太多内存,但仍然获得137,并在pod中重新启动。
为什么两个吊舱都同时重启?其他所有15个微服务均运行正常。
答案 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用完了堆内存。
另一个原因可能是应用程序/进程未处理SIGTERM
(kill -15
),然后是SIGKILL
(kill -9
)来处理保证关机。
由于几乎同时满足一个错误条件,因此很有可能两个Pod几乎都在同一时间重新启动。例如:
两个Pod都是在同一时间启动的,它们获得大约相同的流量和/或完成相同数量和种类的工作,因此它们几乎同时耗尽了内存。
两个Pod都使活动性探针同时失败,因为部署中探针的设置对于两个Pod都是相同的。
检查事件(例如kubectl get events --sort-by=.metadata.creationTimestamp
)-它们可以显示一些内容来帮助确定终止容器/吊舱的原因。