具有临时存储的 EKS Pod 不断被驱逐

具有临时存储的 EKS Pod 不断被驱逐

我正在使用 EKS v1.20.11-eks-f17b81,并且遇到了基于 Java 容器 Alpine 的问题。基本上,我的部署对请求的临时存储有限制,并且还有这样的限制。

- containerPort: 8080
  protocol: TCP
resources:
  limits:
    cpu: 2048m
    ephemeral-storage: 1300Mi
    memory: 4096M
  requests:
    cpu: 500m
    memory: 1024M
    ephemeral-storage: 1000Mi

几个小时后,所有的 Pod 都将处于 Evicted 状态,我不明白为什么,如果我查看节点上的 /var/lib 文件夹,会发现有足够的空间,如果我使用以下命令进入某个 Pod,kubectl exec -ti POD——sh我执行了类似 du -sch / 的操作,但我从未发现使用了超过 300MB 的空间,这是怎么回事?

答案1

TLDR:要么根本不使用ephemeral-storage限制,要么在 pod 中的所有容器上使用限制。


我猜你没有ephemeral-storage设定限制所有容器在特定 pod 中。驱逐管理器将所有容器的限制加起来,并将其设置为上限在 Pod 级别

这是实际的代码片段

func (m *managerImpl) localStorageEviction(pods []*v1.Pod, statsFunc statsFunc) []*v1.Pod {
    evicted := []*v1.Pod{}
    for _, pod := range pods {
        podStats, ok := statsFunc(pod)
        if !ok {
            continue
        }

        if m.emptyDirLimitEviction(podStats, pod) {
            evicted = append(evicted, pod)
            continue
        }

        if m.podEphemeralStorageLimitEviction(podStats, pod) {
            evicted = append(evicted, pod)
            continue
        }

        if m.containerEphemeralStorageLimitEviction(podStats, pod) {
            evicted = append(evicted, pod)
        }
    }

    return evicted
}

如您所见,podEphemeralStorageLimitEvictioncontainerEphemeralStorageLimitEviction都用于驱逐。截至撰写本文时,我不明白“为什么”两者都被使用(而不仅仅是容器一个)。

相关内容