重复 pod 驱逐的原因

Reason for repeated pod eviction

我的 5 节点集群上的一个节点昨晚的内存使用峰值约为 90%。环顾四周 kubectl,单个 pod(在 1 副本部署中)是高内存使用率的罪魁祸首并被驱逐。

但是,日志显示 pod 被驱逐了大约 10 次(AGE 对应于内存使用量达到峰值的时间左右,所有驱逐都发生在同一节点上)

NAMESPACE           NAME                                  READY   STATUS                   RESTARTS   AGE
example-namespace   example-deployment-84f8d7b6d9-2qtwr   0/1     Evicted                  0          14h
example-namespace   example-deployment-84f8d7b6d9-6k2pn   0/1     Evicted                  0          14h
example-namespace   example-deployment-84f8d7b6d9-7sbw5   0/1     Evicted                  0          14h
example-namespace   example-deployment-84f8d7b6d9-8kcbg   0/1     Evicted                  0          14h
example-namespace   example-deployment-84f8d7b6d9-9fw2f   0/1     Evicted                  0          14h
example-namespace   example-deployment-84f8d7b6d9-bgrvv   0/1     Evicted                  0          14h
...

节点内存使用图:

Status:         Failed
Reason:         Evicted
Message:        Pod The node had condition: [MemoryPressure].

我的问题是如何或为什么会发生这种情况,and/or我可以采取哪些步骤来调试并找出 pod 被反复驱逐的原因? pod 使用内存数据库,所以一段时间后它会消耗大量内存是有道理的,但它在启动时的内存使用情况应该不会出现异常。

我的直觉是内存使用率高的 pod 被驱逐,部署替换了 pod,新的 pod 没有使用那么多内存,一切都很好。但是驱逐发生了很多次,这对我来说没有意义。

最简单的步骤是运行以下命令来调试和读取特定 Pod 的日志。

看看 Pod's states and last restarts:

kubectl describe pods ${POD_NAME}

查找它的节点名称和运行相同的节点名称:

kubectl describe node ${NODE_NAME}

您将在 Conditions 部分看到一些信息。

Examine pod logs:

kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}

如果您想重新运行您的 pod 并直接查看日志,请重新运行您的 pod 并执行命令:

kubectl logs ${POD_NAME} -f

有关 kubectl logs 命令及其标志的更多信息 here