Ich arbeite an EKS v1.20.11-eks-f17b81 und habe ein Problem mit einem Java-Container auf Alpine-Basis. Grundsätzlich hat meine Bereitstellung die Grenzen des flüchtigen Speichers für die Anfragen und auch die Grenzen wie diese.
- containerPort: 8080
protocol: TCP
resources:
limits:
cpu: 2048m
ephemeral-storage: 1300Mi
memory: 4096M
requests:
cpu: 500m
memory: 1024M
ephemeral-storage: 1000Mi
Die Pods werden nach ein paar Stunden alle im Status „Evicted“ sein, und ich verstehe nicht, warum, wenn ich mir den Ordner /var/lib auf den Knoten anschaue, dort viel Platz ist, auch wenn ich zu einem Pod gehe mitkubectl exec -ti POD -- shund ich mache so etwas wie „du -sch/“. Ich habe nie festgestellt, dass mehr als 300 MB verwendet werden. Was kann da passieren?
Antwort1
TLDR: Verwenden Sie entweder ephemeral-storage
überhaupt keine Limits oder verwenden Sie sie für alle Container im Pod.
Ich schätze, Sie haben keine ephemeral-storage
Grenzen gesetzt füralle Containerin diesem bestimmten Pod. Der Eviction Manager summiert alle Grenzen der Container und setzt sie als Obergrenzeauf Pod-Ebene.
Das ist tatsächlichCode-Auszug:
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
}
Wie Sie sehen, werden sowohl podEphemeralStorageLimitEviction
als auch containerEphemeralStorageLimitEviction
zur Räumung verwendet. Zum Zeitpunkt des Schreibens verstehe ich nicht, „warum“ beide verwendet werden (und nicht nur Container 1).