Pod вытеснен из-за нехватки ephemeral-storage на узле — найдите причину и исправьте.
Pod показывает Evicted. Сообщение винит ephemeral-storage узла. Объясните, что такое ephemeral-storage, почему kubelet вытеснил именно этот Pod, и дайте устойчивый фикс.
$ kubectl get pod log-shipper-3
NAME READY STATUS RESTARTS AGE
log-shipper-3 0/1 Evicted 0 12m
$ kubectl describe pod log-shipper-3
Status: Failed
Reason: Evicted
Message: The node was low on resource: ephemeral-storage.
Container app was using 4Gi, request is 0.
$ kubectl describe node node-5 | grep Pressure
DiskPressure True
Диагностируйте и исправьте.
Это вытеснение по давлению узла: узел получил DiskPressure и вытеснил Pod, занявший 4Gi ephemeral-storage без request. Это диск узла под логи, emptyDir и writable-слой. Фикс: ephemeral-storage requests/limits или PersistentVolume под данные.
- ✗Читать
Evictedкак OOM, а не вытеснение по давлению узла - ✗Не знать, что логи,
emptyDirи writable-слой — это ephemeral-storage - ✗Оставлять ephemeral-storage requests/limits пустыми у прожорливого пода
- →Как класс QoS и приоритет пода меняют, кого kubelet вытеснит первым?
- →Почему под без ephemeral-storage
requestвытесняется раньше того, кто его задал?
Решение
1. Что случилось
Message: The node was low on resource: ephemeral-storage. Container app using 4Gi, request 0.
DiskPressure True
Это kubelet node-pressure eviction: узел упёрся в порог DiskPressure, kubelet начал вытеснять поды, чтобы освободить диск. Первыми страдают поды, превышающие свой запрос (здесь request 0, а расход 4Gi).
2. Что такое ephemeral-storage
Локальный диск узла, который делят: логи контейнеров (stdout), тома emptyDir и writable-слой контейнера. Не путать с PersistentVolume — это временное место узла.
3. Устойчивый фикс
предсказуемый порядок вытеснения;
- задать
resources.requests/limitsпоephemeral-storage— тогда под получит лимит и - ротация/ограничение логов;
- объёмные данные писать в PersistentVolume, а не на диск узла.