저는 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
몇 시간 후에 포드는 모두 Evicted 상태가 되며, 왜 노드의 /var/lib 폴더를 살펴보면 공간이 충분한지 이해할 수 없습니다. 어떤 포드에kubectl exec -ti POD -- sh그리고 du -sch와 같은 작업을 수행합니다. / 300MB 이상 사용한 적이 없습니다. 무슨 일이 일어날 수 있습니까?.
답변1
TLDR: 제한을 전혀 사용하지 않거나 ephemeral-storage
포드의 모든 컨테이너에 제한을 사용하세요.
ephemeral-storage
제한이 설정되어 있지 않은 것 같습니다 .모든 컨테이너특정 포드에서. 퇴거 관리자는 컨테이너의 모든 한도를 합산하여 상한으로 설정합니다.포드 수준에서.
이것은 실제입니다코드 조각:
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
에 사용됩니다. 글을 쓰는 시점에서 나는 "왜" 둘 다 사용되는지(컨테이너 1뿐만 아니라) 이해하지 못합니다.