Warum deaktivieren Sie Swap auf Kubernetes

35

Da Kubernetes 1.8, so scheint es , ich zu deaktivieren Swap müssen auf meine Knoten (oder Satz --fail-swap-onzu false).

Ich kann den technischen Grund nicht finden, warum Kubernetes darauf besteht, dass der Swap deaktiviert wird. Ist das aus Performancegründen? Sicherheits Gründe? Warum ist der Grund dafür nicht dokumentiert?

Jeroen Jacobs
quelle

Antworten:

28

Die Idee von Kubernetes ist es, Instanzen so dicht wie möglich an die 100% Auslastung zu binden. Alle Bereitstellungen sollten an CPU- / Speicherbeschränkungen gebunden sein. Wenn der Scheduler also einen Pod an einen Computer sendet, sollte er niemals Swap verwenden. Du willst nicht tauschen, weil es die Dinge verlangsamt.

Es ist hauptsächlich für die Leistung.

Mike
quelle
2
ya die Idee ist, wenn ein Knoten nur 3gig frei hat, um zu verwenden .. und Ihr neuer Pod 4 will .., geht es auf einen anderen Knoten.
Mike
Das macht für mich nicht allzu viel Sinn. Sicherlich könnten Sie Ihre Knoten ein Stück weiter packen, indem Sie das Betriebssystem einige selten verwendete Speicherseiten in den Swap setzen lassen, ohne die Leistung merklich zu beeinträchtigen.
Frederik Baetens
13

Der Grund dafür ist, wie ich es verstehe, dass das Kubelet nicht für Swap-Situationen ausgelegt ist und das Kubernetes-Team dies nicht plant, da das Ziel darin besteht, dass Pods in den Speicher des Hosts passen.

von dieser Ausgabe

Swap-Unterstützung ist nicht trivial. Garantierte Pods sollten niemals einen Tausch erfordern. Burstable Pods sollten ihre Anforderungen erfüllen, ohne dass ein Tausch erforderlich ist. BestEffort Pods haben keine Garantie. Dem Kubelet fehlen momentan die Schlauen, um das richtige Maß an vorhersehbarem Verhalten über die Hülsen hinweg zu gewährleisten.

Rory McCune
quelle
10

TL; DR, das Swap nicht richtig verwendet, ist nur ein fauler Hack, der ein schlechtes Verständnis der Speichersubsysteme und einen Mangel an grundlegenden Systemverwaltungsfähigkeiten demonstriert. Das Entwerfen von Infrastrukturdiensten und das Nichtverstehen dieser Systeme führt zwangsläufig zum Fehlschlagen.

Also, ich habe einige Kommentare dazu, dies scheint mir eher Faulheit zu sein als eine Funktion oder Anforderung. Es ist absolut möglich, Swap richtig zu handhaben, den Speicher zu analysieren und zu bestimmen, wie das Speichersubsystem richtig verwendet werden soll, ohne Swap zu treffen. Es gibt eine Vielzahl von Tools, die darauf aufbauen, und Sie können garantieren, dass ein Prozess Swap nicht so einfach verwendet, sodass der Leistungspunkt falsch ist. Es ist einfach faul zu programmieren, diese Instrumentierung nicht zu verwenden, und insgesamt wird das vollständige Entfernen von Swap zu Lasten der Systemleistung gehen. Der Schlüssel hier ist die ordnungsgemäße Verwendung. Ich bin damit einverstanden, dass das Auslagern von Pods auf Datenträger die Leistung beeinträchtigt. Es gibt jedoch eine Reihe von Dingen, die auf Datenträger ausgelagert werden sollten .

Darüber hinaus ist der Linux-Kernel so konzipiert, dass er Swap nutzt, und eine vollständige Deaktivierung wird negative Folgen haben. Eine bessere Möglichkeit, dies zu handhaben, besteht darin, die Pods im Hauptspeicher festzuhalten und nicht auf die Festplatte zu vertauschen. Reduzieren Sie den vfs-Cache-Druck, damit sie nicht vertauscht werden, es sei denn, dies ist unbedingt erforderlich Fehlschlagen von MALLOC, falls der Hauptspeicher erschöpft ist.

Abhängig von den Prozessen in den Containern kann ein schwerer Ausfall des Containers oder ein Tod durch den OOM-Killer zu ziemlich katastrophalen Ergebnissen führen. Ich verstehe jedoch, dass die Prozesse, die in diesen Containern ablaufen, im Idealfall zustandslos und kurzlebig sein sollten, aber in 20 Jahren, in denen Systeme ausgeführt werden, habe ich nicht ein einziges Mal gesehen, dass alle 100% der Zeit dem beabsichtigten Design folgen.

Darüber hinaus werden zukünftige Technologien wie nichtflüchtiger Speicher und neuere Speichersysteme wie Intel xpoint nicht berücksichtigt, mit denen der Hauptspeicher mithilfe von Hybridplatten- / Speichersystemen erheblich erweitert werden kann. Mit diesen Systemen können sie direkt als zusätzlicher Hauptspeicher verwendet oder Auslagerungsdateien verwenden, um den Hauptspeicher mit vernachlässigbarer Auswirkung auf die Leistung zu erweitern.

Michael Rutledge
quelle
2
Ich bezweifle sehr, dass die Betreuer des Kubernetes-Projekts faul sind. Keines der vorgebrachten Argumente scheint im Kontext eines containerisierten Ökosystems zu stehen, das in Kubernet läuft.
Spuder