Kubernetes-Ressourcengrenzen: Der Balanceakt zwischen Vorhersehbarkeit und Effizienz
Entdecken Sie, warum Ressourcenlimits in Kubernetes entscheidend für stabile Anwendungen sind – auch wenn sie manchmal als hinderlich erscheinen.
Es gibt eine Menge Diskussionen darüber, ob das Nichtverwenden von Kubernetes-Ressourcengrenzen tatsächlich von Vorteil sein könnte (zum Beispiel in Artikeln wie For the Love of God, Stop Using CPU Limits on Kubernetes oder Kubernetes: Make your services faster by removing CPU limits). Die Argumente sind durchaus gültig – es macht wenig Sinn, für Rechenleistung zu bezahlen, die aufgrund von Beschränkungen nicht genutzt wird, oder künstlich die Latenz zu erhöhen. Dieser Artikel möchte jedoch darlegen, dass Limits auch ihre legitimen Vorteile haben.
Als Site Reliability Engineer im Team von Grafana Labs, das die interne Infrastruktur und Werkzeuge für die Produktteams pflegt und verbessert, versuche ich in erster Linie, Kubernetes-Updates so reibungslos wie möglich zu gestalten. Aber ich verbringe auch viel Zeit damit, mich mit verschiedenen interessanten Kubernetes-Problemen auseinanderzusetzen. Dieser Artikel spiegelt meine persönliche Meinung wider, und andere in der Community könnten anderer Meinung sein.
Lassen Sie uns das Problem von der anderen Seite betrachten. Jeder Pod in einem Kubernetes-Cluster hat inhärente Ressourcenlimits – die tatsächlichen CPU-, Speicher- und anderen Ressourcen der Maschine, auf der er läuft. Wenn diese physischen Grenzen von einem Pod überschritten werden, erfährt er ein Drosseln, ähnlich wie bei Erreichen von Kubernetes-Limits.
Das Problem
Pods ohne (oder mit großzügigen) Limits können leicht die zusätzlichen Ressourcen auf dem Knoten verbrauchen. Das hat jedoch einen versteckten Preis – die Menge an verfügbaren Ressourcen hängt oft stark von den auf dem jeweiligen Knoten geplanten Pods und deren tatsächlicher Auslastung ab. Diese zusätzlichen Ressourcen machen jeden Pod zu einem besonderen Einzelfall, wenn es um die tatsächliche Ressourcenallokation geht. Noch schlimmer ist, dass es ziemlich schwierig ist, die Ressourcen zu ermitteln, die ein Pod zu einem bestimmten Zeitpunkt zur Verfügung hatte – sicherlich nicht ohne umständliches Daten-Mining von Pods, die auf einem bestimmten Knoten laufen, deren Ressourcennutzung und Ähnlichem. Und selbst wenn wir dieses Hindernis überwinden, können wir nur Daten bis zu einem bestimmten Grad erfassen und Profile nur für einen bestimmten Teil unserer Aufrufe erhalten. Dies kann zwar skaliert werden, aber die Menge an Beobachtungsdaten, die generiert wird, könnte leicht zu abnehmenden Renditen führen. Daher gibt es keinen einfachen Weg zu erkennen, ob ein Pod einen schnellen Anstieg hatte und für kurze Zeit doppelt so viel Speicher wie üblich verwendet hat, um einen Anfragen-Burst zu bewältigen.
Jetzt, da Black Friday und Cyber Monday vor der Tür stehen, erwarten Unternehmen einen Anstieg des Verkehrs. Gute Leistungsdaten und Benchmarks der vergangenen Leistung ermöglichen es Unternehmen, zusätzliche Kapazitäten einzuplanen. Aber sind Daten über Pods ohne Limits zuverlässig? Mit sofortigen Spitzen bei Speicher oder CPU, die durch die zusätzlichen Ressourcen abgefedert werden, könnte alles gut aussehen, basierend auf vergangenen Daten. Doch sobald sich das Pod-Bin-Packing ändert und die zusätzlichen Ressourcen knapper werden, könnte sich alles anders darstellen – von kaum merklichen Erhöhungen der Anfragenlatenz bis hin zu langsam ansteigenden Anfragen, die zu OOM-Kills der Pods führen. Während fast niemand sich für das erstgenannte Problem interessiert, ist letzteres ein ernsthaftes Problem, das eine sofortige Kapazitätssteigerung erfordert.
Die Diskussion über Ressourcenlimits in Kubernetes ist wichtig, um sowohl Vorhersehbarkeit als auch Effizienz in Ihrer Infrastruktur zu gewährleisten. Wenn Sie auf der Suche nach Unterstützung bei der Implementierung von Kubernetes-Ressourcenlimits sind, steht ayedo Ihnen als kompetenter Partner zur Seite.
Quelle: Kubernetes Blog