【问题标题】:2 pod of same deployment restarting at same time同一部署的 2 个 pod 同时重启
【发布时间】:2020-03-09 15:04:59
【问题描述】:

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

两个副本几乎同时启动,两者都在重述错误代码 137 ERROR。为了更改重启时间,我手动删除了一个 pod,以便 RS(replicaset)创建新的。

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

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

为什么两个 pod 同时重启,这是个问题?其他所有 15 个微服务都运行良好。

【问题讨论】:

  • 检查 OOM 的节点日志,您的节点可能内存不足,这两个 pod 的优先级可能较低(尤其是在没有定义资源请求/限制的情况下)

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


【解决方案1】:

这是定义 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/

【讨论】:

  • 感谢您撰写答案。我仍然没有得到答案,比如为什么两个 pod 同时重启。
【解决方案2】:

错误代码 137 是 the resultkill -9 (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) - 它们可以显示一些内容来帮助确定终止容器/pod 的原因。

【讨论】:

  • 谢谢你写的答案很清楚,真的很有帮助,也许我还需要进一步挖掘和调查。再次感谢。
【解决方案3】:

尝试获取更多描述 pod 的日志

kubectl describe po

通常137代码表示内存不足

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

【讨论】:

  • 感谢您撰写答案。我仍然没有得到答案,比如为什么两个 pod 同时重启。
猜你喜欢
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2018-12-16
  • 1970-01-01
相关资源
最近更新 更多