Estoy trabajando en EKS v1.20.11-eks-f17b81 y tengo un problema con un contenedor Java basado en Alpine. Básicamente, mi implementación tiene límites de almacenamiento efímero para las solicitudes y también límites como este.
- containerPort: 8080
protocol: TCP
resources:
limits:
cpu: 2048m
ephemeral-storage: 1300Mi
memory: 4096M
requests:
cpu: 500m
memory: 1024M
ephemeral-storage: 1000Mi
Después de unas horas, todos los pods estarán en estado Expulsado, y no puedo entender por qué, si miro la carpeta /var/lib en los nodos, hay mucho espacio, también si voy a alguna vaina conkubectl ejecutivo -ti POD --shy hago algo como du -sch/nunca encontré más de 300MB usados, ¿qué puede estar pasando?.
Respuesta1
TLDR: No utilice ephemeral-storage
ningún límite o utilícelos en todos los contenedores del pod.
Supongo que no tienes ephemeral-storage
límites establecidos paratodos los contenedoresen esa cápsula en particular. El administrador de desalojo suma todos los límites de contenedores y lo establece como límite superioren el nivel de la vaina.
esto es realfragmento de código:
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
}
Como puedes ver ambos podEphemeralStorageLimitEviction
ya containerEphemeralStorageLimitEviction
se utilizan para el desalojo. Al momento de escribir este artículo, no entiendo "por qué" se usan ambos (y no solo el contenedor uno).