Speicher-Qualität im Kubernetes: So optimieren Sie Ihre Ressourcen
Entdecken Sie, wie Kubernetes v1.22 die Speicherverwaltung revolutioniert und welche Vorteile Memory QoS für Ihre Anwendungen bietet.
Kubernetes v1.22, veröffentlicht im August 2021, bringt eine neue Alpha-Funktion mit sich, die die Art und Weise verbessert, wie Linux-Knoten Speicherressourcen verwalten. Diese Neuerung bedeutet insbesondere für Entwickler und DevOps-Teams einen großen Schritt nach vorn in der Verwaltung von Ressourcen.
Was ändert sich konkret für Entwickler/DevOps-Teams?
In früheren Versionen unterstützte Kubernetes keine Qualitätsgarantien für Speicher. Das bedeutete, dass es bei der Vergabe von Speicherressourcen zu Problemen kommen konnte, insbesondere wenn Container ihre Grenzen überschritten. Mit der Einführung von Memory QoS (Quality of Service) können Sie nun sicherstellen, dass wichtige Prozesse immer ausreichend Speicher zugewiesen bekommen.
Ein Beispiel für eine Pod-Konfiguration könnte so aussehen:
yaml
apiVersion: v1
kind: Pod
metadata:
name: example
spec:
containers:
- name: nginx
resources:
requests:
memory: “64Mi”
cpu: “250m”
limits:
memory: “64Mi”
cpu: “500m”
Hierbei sind spec.containers[].resources.requests
und spec.containers[].resources.limits
entscheidend für die Planung und Ausführung Ihrer Container. Während CPU als “komprimierbare” Ressource gilt, war das bei Speicher in cgroup v1 nicht der Fall. Übersteigt ein Container sein Speicherlimit, wird er vom Kernel mit einem OOM (Out of Memory) kill beendet.
Dank der neuen cgroup v2 bietet Kubernetes nun eine verbesserte Implementierung, die vollständigen Schutz für Speicherressourcen gewährleistet. Memory QoS nutzt den Speichercontroller von cgroup v2, um sicherzustellen, dass Ihre Pods immer über die benötigten Speicherressourcen verfügen.
Praktische Beispiele oder Anwendungsfälle
Wenn Sie memory.min
auf die Speicheranfragen setzen, wird dieser Speicher reserviert und niemals vom Kernel zurückgefordert. Dies garantiert die Verfügbarkeit von Speicher für Ihre Kubernetes-Pods. Zudem wird mit memory.high
die Speichernutzung gedrosselt, wenn Container ihre Grenzen erreichen, um zu verhindern, dass das System überlastet wird.
Hier ist eine Tabelle, die die Funktionen der beiden Parameter und deren Entsprechungen zu den Ressourcen von Kubernetes-Containern detailliert:
Datei |
Beschreibung |
memory.min |
memory.min gibt die Mindestmenge an Speicher an, die der cgroup immer zur Verfügung stehen muss, d.h. Speicher, der niemals vom System zurückgefordert werden kann. Wenn die Speichernutzung der cgroup dieses Limit erreicht und nicht erhöht werden kann, wird der OOM-Killer des Systems aktiviert.
Wir ordnen es der Speichermenge des Containers zu
|
memory.high |
memory.high ist die Drosselgrenze für die Speichernutzung. Dies ist der Hauptmechanismus zur Steuerung der Speichernutzung einer cgroup. Wenn die Speichernutzung einer cgroup über die hier festgelegte Grenze hinausgeht, werden die Prozesse der cgroup gedrosselt und unter schweren Rückforderungsdruck gesetzt.
</td>
|
Mit diesen neuen Funktionen in Kubernetes können Sie nicht nur die Zuverlässigkeit Ihrer Anwendungen erhöhen, sondern auch die Effizienz Ihrer Ressourcenverwaltung verbessern. ayedo ist stolz darauf, Partner in diesem innovativen Bereich der Kubernetes-Entwicklung zu sein und unterstützt Sie gerne bei der Implementierung dieser neuen Möglichkeiten.
Quelle: Kubernetes Blog