具有臨時存儲的 EKS Pod 不斷被驅逐

具有臨時存儲的 EKS Pod 不斷被驅逐

我正在開發 EKS v1.20.11-eks-f17b81,並且面臨基於 Alpine 的 Java 容器的問題。基本上,我的部署對請求的臨時儲存有限制,而且限制也是這樣的。

- 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 資料夾,會有足夠的空間,即使我去某個 podkubectl exec -ti POD -- sh我做了類似 du -sch / 我從來沒有發現使用超過 300MB 的東西,會發生什麼?

答案1

TLDR:要麼根本不使用ephemeral-storage限制,要麼在 Pod 中的所有容器上使用它們。


我猜你沒有ephemeral-storage設定限制所有貨櫃在那個特定的吊艙中。驅逐管理器將容器的所有限制相加並將其設為上限在 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都用於驅逐。截至撰寫本文時,我不明白“為什麼”使用兩者(而不僅僅是容器之一)。

相關內容