Постоянно вытесняются контейнеры EKS с временным хранилищем

Постоянно вытесняются контейнеры EKS с временным хранилищем

Я работаю над 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

Через несколько часов все модули будут находиться в состоянии «Выселено», и я не могу понять, почему. Если я посмотрю в папку /var/lib на узлах, там будет много места, а если я перейду к какому-нибудь модулю сkubectl exec -ti POD -- shи я делаю что-то вроде du -sch / Я никогда не находил более 300 МБ использованного, что может происходить?.

решение1

TLDR: Либо не используйте ephemeral-storageограничения вообще, либо используйте их для всех контейнеров в модуле.


Я думаю, у вас нет 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
}

Как вы можете видеть, оба podEphemeralStorageLimitEvictionи containerEphemeralStorageLimitEvictionиспользуются для выселения. На момент написания статьи я не понимаю, «почему» используются оба (а не только контейнер один).

Связанный контент