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

2 pod of same deployment restarting at same time

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

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

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

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

为什么两个 pod 同时重启是个问题?其他所有 15 个微服务 运行 完美。

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

kubectl describe po

通常 137 代码表示内存不足

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

这是定义 pods 时的常见错误。如果不设置 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/

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

  • 正如其他人在他们的回答中也指出的那样,这可能是由于内存不足造成的。请注意,即使未设置 resources.limits.memory,也可能是 运行 内存不足的应用程序或进程。例如,Java 应用程序的 JVM 运行 堆内存不足。

  • 另一个原因可能是 application/process 没有处理 SIGTERM (kill -15),然后是 SIGKILL (kill -9) 保证关机。

两个 pods 很可能几乎同时重新启动,因为几乎同时满足错误条件。例如:

  • 两者 pods 同时启动并获得大致相同的流量 and/or 完成相同数量和类型的工作,因此,它们 运行几乎同时内存不足。

  • pods 两个 pods 同时未能通过活性探测,因为部署中的探测设置对于两个 pods.

    [=38 是相同的=]

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