在Kubernetes中,pod是最小的调度单元。当Pod无法在所分配的节点上正常运行时,它可能会被驱逐(evicted)。这种情况可能是由多种原因引起,比如节点资源不足、Pod超出了所分配的资源限制、镜像拉取失败等。
驱逐原因
- 节点资源不足:节点资源包括CPU、内存、存储空间等。当节点资源不足以满足Pod的资源需求时,调度器会选择其中一个或多个Pod驱逐出节点。
- 超出资源限制:Pod可以指定资源上线,例如CPU和内存的限制。如果Pod使用的资源超过指定的限制,该Pod可能会被驱逐。
- 镜像拉取失败:如果Pod所需的镜像无法拉取或拉取失败,K8S可能会重试一定次数后将其标记为“evicted”状态。
问题复现
(1)查看K8S中Pod的状态,发现部分pod的STATUS显示“evicted”状态:
(2)使用 kubectl describe 命令查看Pod的状态和事件。
kubectl describe pod <pod-name> -n <namespace-name>
kubectl describe pod knowledge-base-5799896986-zl55n -n asrank
[root@node-1 ~]# kubectl describe pod knowledge-base-5799896986-zl55n -n asrank
Name: knowledge-base-5799896986-zl55n
Namespace: asrank
Priority: 0
Node: node-1/
Start Time: Fri, 29 Mar 2024 11:12:16 +0800
Labels: app=knowledge-base
istio.io/rev=default
pod-template-hash=5799896986
security.istio.io/tlsMode=istio
service.istio.io/canonical-name=knowledge-base
service.istio.io/canonical-revision=latest
Annotations: kubectl.kubernetes.io/default-container: knowledge-base
kubectl.kubernetes.io/default-logs-container: knowledge-base
prometheus.io/path: /stats/prometheus
prometheus.io/port: 15020
prometheus.io/scrape: true
sidecar.istio.io/status:
{
"initContainers":["istio-init"],"containers":["istio-proxy"],"volumes":["istio-envoy","istio-data","istio-podinfo","istiod-ca-cert"],"ima...
Status: Failed
Reason: Evicted
Message: The node was low on resource: memory. Co