Kubernetes übertroffen

Kubernetes übertroffen
Wenn Kubernetes funktioniert, ist es erstaunlich, aber wenn dies nicht der Fall ist, wenn Ihre Anwendung aufgrund von Speicherbedenken abstürzt, sollten Sie wissen. Wenn Sie zuvor mit Kubernetes gearbeitet haben, haben Sie mit ziemlicher Sicherheit auf den überfluteten Fehler gestoßen. Wenn Sie nicht verstehen, wie es funktioniert, kann das Debuggen eine frustrierende Erfahrung sein. In diesem Beitrag werden wir uns mit dem überfluteten Problem ausführlicher ansehen.

Voraussetzung

Um die Kubernetes -Dienste zu nutzen, benötigen Sie einen Minikube -Cluster. Sie müssen einen Minikube -Cluster in Ihrem System einrichten, um diese Technik zum Laufen zu bringen. Verwenden Sie zum Einrichten eines Minikube -Clusters die Befehlszeilenklemme. Es kann auf zwei Arten verwendet werden. Suchen Sie im Bereich Programmsuche Ihres Systems nach „Terminal“. Strg+Alt+T ist eine Tastaturverknüpfung, die dafür verwendet werden kann:

Mindestens 300 MIB Speicher müssen auf jedem Knoten in Ihrem Cluster verfügbar sein. Sie müssen den Metrics-Server-Service in Ihrem Cluster für einige Aufgaben auf dieser Seite ausführen lassen. Sie können diese Schritte überspringen, wenn der Metriken-Server bereits funktioniert. Geben Sie nun den folgenden angehängten Befehl ein.

Verwenden Sie nun den angehängten Befehl.

Die Reaktionsführer Metriken.K8S.IO, wenn die API der Ressourcenmetriken zugänglich ist, wie im obigen Screenshot gezeigt.

Schritte zum Erstellen eines Namespace

Machen Sie einen Namespace für die Ressourcen, die Sie hier erstellen, um sie vom Rest Ihres Clusters zu trennen.

Eine neue Pod wird gebildet, wie Sie unten anzeigen können.

Geben Sie die Ressourcen an: Fordern Sie das Feld im Manifest der Ressource des Containers an, um eine Speicheranforderung zu definieren. Ressourcen einbeziehen: Grenzen, um ein RAM -Limit festzulegen. Sie entwerfen einen Pod mit einem Behälter. Der Container verfügt über eine 100 MIB -Speicheranforderung und eine 200 MIB -Speichergrenze. Die Konfigurationsdatei des POD lautet wie folgt:

Wenn der Container startet, liefert der Abschnitt "Args. Die Optionen „-VM-Bytes“ und „150 m“ weisen den Container an, 150 MIB RAM zuzuweisen.

Im Folgenden können Sie sehen, dass wir den Pod erstellt haben:

Dieser Befehl prüft, ob der POD -Container in Betrieb ist:

Nach dem Ergebnis hat der einzelnen Container des POD eine Speicheranforderung von 100 MIB und eine Speichergrenze von 200 MIB.

Um die Metriken der Schoten zu erhalten, führen Sie den Kubectl Top -Befehl aus.

Wie kann die Speichergrenze eines Containers überschritten werden??

Wenn der Knoten anscheinend genügend Speicher hat, kann ein Container seine Speicheranforderung übertreffen. Andererseits kann ein Container nicht mehr Speicher verwenden als er hat. Wenn ein Container mehr Speicher als zugewiesen ist, wird er beendet. Der Container wird entfernt, wenn er weiterhin den Speicher über seine Grenze verwendet. Das KuBelet startet einen terminierten Behälter neu, wenn er wieder aufgenommen werden kann, ähnlich wie jede andere Form des Laufzeitfehlers.

Hier erstellen wir einen Pod. Dieser Pod wird versuchen, mehr Speicher zuzuweisen, als er bereits hat.

Die Konfigurationsdatei für einen Pod mit einem Container und eine Speicheranforderung von 50 MIB und eine Speichergrenze von 100 MIB lautet wie folgt:

Gemäß dem Args -Abschnitt der Konfigurationsdatei wird der Container versucht, 250 MIB RAM zuzuweisen, wesentlich über der 100 MIB -Grenze überwiegend.

Auch hier haben wir den Pod hier erstellt.

Hier können Sie die umfassenden Informationen der POD anzeigen. Der Behälter läuft entweder an dieser Stelle oder nicht. Wiederholung des vorherigen Befehls, bis der Container getötet wird, ist erforderlich:

Sehen Sie sich den Status des Containers ausführlicher an. Nach der Ausgabe wurde der Container zerstört, weil ihm der Speicher ausging.

In diesem Beispiel startet das KuBelet den Behälter neu, da er neu gestartet werden kann. Wiederholen Sie diesen Befehl mehrfach, um sicherzustellen, dass der Container regelmäßig getötet und neu gestartet wird. Nach der Ausgabe wird der Behälter getötet, wiederhergestellt, erneut getötet, erneut initiiert usw.

Mit dem folgenden Befehl können Sie umfassende Informationen zur Geschichte des Pods anzeigen.

Das Ergebnis zeigt, dass der Behälter ständig beginnt und stoppt:

Hier können Sie die detaillierten Informationen zu den Knoten Ihres Clusters anzeigen:

Eine Aufzeichnung des Containers, der aufgrund eines außerfeiligen Problems getötet wird, ist in der Ausgabe enthalten:

Dieser Befehl löscht den Pod, wie Sie unten sehen können.

Was sollten Sie tun, wenn Sie eine Speicheranforderung haben, die für Ihre Knoten zu groß ist??

Speicheranforderungen und Einschränkungen sind normalerweise mit Containern verbunden, aber es ist auch hilfreich, über Pods als Speicheranforderungen und -beschränkungen nachzudenken. Die Speicheranforderung ist definiert als die Gesamtzahl aller Speicheranforderungen für alle Container in der POD.
Pods werden über Anfragen geplant und gepflegt.

Hier erstellen wir einen Pod mit einer größeren Speicheranforderung als jeder Knoten in der Kapazität Ihres Clusters.

Hier ist die Konfigurationsdatei für einen Pod, einschließlich eines Containers und eines 1000 GIB -Speicherbedarfs, der wahrscheinlich mehr als jeder andere Knoten in Ihrem Cluster verwalten kann.

Der folgende Befehl anwenden erstellt den Pod, wie Sie sehen können.

Verwenden Sie nun den Befehl "Get Pod". Der Status der POD steht aus (siehe Ausgabe). Der Pod ist nicht so eingestellt, dass er auf jedem Knoten ausgeführt wird und bleibt auf unbestimmte Zeit anhängig.

Dieser Befehl hilft Ihnen dabei, weitere Details in der POD anzuzeigen, einschließlich bevorstehender Veranstaltungen:

Die Ausgabe zeigt, dass der Container nicht geplant werden kann, da die Knoten nicht genügend Speicher haben:

Was passiert, wenn Sie keine Speichergrenze angeben?

Eines der folgenden Szenarien tritt auf, wenn Sie keine Speichergrenze für einen Container definieren:

  • Der Container hat keine Grenze dafür, wie viel RAM er nutzen kann. Der OOM -Killer könnte ausgelöst werden, wenn der Container alle verfügbaren Speicher auf dem Knoten, in dem er ausgeführt wurde. Darüber hinaus wird Acontainer ohne Ressourcenbeschränkungen ein höheres Risiko haben, im Falle einer OOM -Tötung getötet zu werden.
  • Der Container wird in einem Namespace mit einem Standardspeichergrenze ausgeführt, und das Standardlimit wird automatisch auf den Container angewendet. Cluster -Administratoren können einen LimitRange verwenden, um eine Standardnummer für das Speicherlimit festzulegen.

Abschluss:

Wir haben uns den Kubernetes -Fehler in diesem Artikel genauer angesehen. Es hilft Kubernetes bei der Verwaltung des Speichers, während es Pods plant und entscheidet, welche Pods zerstören sollen, wenn Ressourcen knapp werden.