重复 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
部分看到一些信息。
kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}
如果您想重新运行您的 pod 并直接查看日志,请重新运行您的 pod 并执行命令:
kubectl logs ${POD_NAME} -f
有关 kubectl logs
命令及其标志的更多信息 here
我的 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
部分看到一些信息。
kubectl logs --previous ${POD_NAME} ${CONTAINER_NAME}
如果您想重新运行您的 pod 并直接查看日志,请重新运行您的 pod 并执行命令:
kubectl logs ${POD_NAME} -f
有关 kubectl logs
命令及其标志的更多信息 here