Ein Pod, der wortlos verschwindet und mit dem Status OOMKilled zurückkommt, hat eine erzieherische Wirkung. Er zwingt einen, ehrlich zu sein über etwas, das man vorher gern übersehen hat: Wie viel Speicher braucht meine Anwendung eigentlich wirklich?
Am Anfang habe ich Limits nach Gefühl gesetzt. Ein Gigabyte klang nach einer schönen runden Zahl. Requests und Limits waren identisch oder standen in gar keinem Verhältnis zueinander, ich habe darüber nicht nachgedacht. Kubernetes hat mich für diese Nachlässigkeit geduldig und wiederholt bestraft, mal mit gedrosselten Prozessen, mal mit getöteten Pods, mal mit einem Node, der unter Druck einfach anfing, Dinge zu verschieben.
Heute gehe ich anders vor, und der Kern ist Messen statt Raten. Ich lasse die Anwendung unter realistischer Last laufen und schaue mir an, wie sich Speicher und CPU tatsächlich verhalten. Erst dann setze ich Requests auf das, was der normale Betrieb braucht, und Limits auf das, was ich im schlimmsten vertretbaren Fall zulassen will. Der Abstand zwischen beiden ist eine bewusste Entscheidung, kein Zufall.
Der wichtigste Unterschied liegt im Verständnis der beiden Zahlen. Requests sind ein Versprechen des Schedulers an meinen Pod, dieser Anteil ist reserviert. Limits sind die Obergrenze, an der der Kernel eingreift. Wer beide verwechselt, baut sich entweder einen Cluster, der halb leer ist und trotzdem voll wirkt, oder einen, der überbucht ist und unter Last zusammenbricht.
Was ich daraus mitgenommen habe, geht über Kubernetes hinaus. Grenzen sind kein Misstrauen gegenüber der eigenen Software, sondern ein Zeichen von Respekt vor den Nachbarn. Ein Container ohne Limit ist ein Gast, der sich nimmt, was er will, und die anderen Prozesse auf dem Node ausfrieren lässt. Ein Container mit sauber gemessenen Grenzen ist ein guter Mitbewohner.
Ich sehe OOMKilled heute nicht mehr als Ärgernis, sondern als Feedback. Der Cluster sagt mir gerade sehr deutlich, dass mein Bild von der Anwendung nicht der Wirklichkeit entspricht. Und statt das Limit reflexartig hochzudrehen, frage ich zuerst: Ist das ein Leck, oder ist das ehrlicher Bedarf? Diese Frage hat mir mehr Ausfälle erspart als jede Erhöhung.
– Sergey Shinder
Top comments (0)