Ist die Fehlerbehebung bei K8s einfach oder kompliziert? Hier ist Exit Code 1 zur Veranschaulichung

Veröffentlicht: 2022-07-21

Kubernetes (K8s) gilt bereits als De-facto-Standard für Container-Orchestrierung. Nach sechs Jahren seit seiner Einführung hat es eine Popularität erreicht, die Entwickler nicht mehr ignorieren können. Viele sind jedoch weiterhin von dieser relativ neuen Technologie eingeschüchtert. Eine der Herausforderungen bei der Arbeit mit K8s ist die Fehlerbehebung, da die Infrastruktur so komplex ist. Es ist auch relativ neu, daher würde es einige Zeit dauern, bis sich die meisten Entwickler damit vertraut gemacht haben.

Dennoch gibt es keinen Grund, sich vor dem Einsatz von Kubernetes zu fürchten. Mit den Worten von Matt Asay, ehemaliger Amazon Web Services Principal und Adobe Head of Developer Ecosystem: „ Kubernetes ist so hart , aber den Schmerz wert.“ Es ist vollständig erlernbar und aus der Ferne das entmutigende Rätsel, für das viele es halten, wie die folgende Fehlerbehebung zeigt.

K8s Fehlerbehebung

Kennenlernen des Exit-Codes 1

Exitcode 1 ist einer der häufigsten Fehler bei der Verwendung von Kubernetes. Dies geschieht, wenn ein Container normalerweise aufgrund eines Fehlers in einer Anwendung beendet wird. Es kann auch aufgrund einer ungültigen Referenz auftreten, bei der eine Dateireferenz für ein Bild, das zum Betreiben des Containers verwendet wird, nicht existiert oder auf ein inkompatibles Objekt zeigt.

Klingt einfach und unkompliziert? Nicht genau. Um diesen Fehler zu kennen, müssen Sie sich auch mit SIGHUP oder Signal 7 vertraut machen. Wenn eine App beendet wird und den Exit-Code 1 anzeigt, gibt es ein entsprechendes Signal vom Betriebssystem namens Signal 7.

Dies ist nur ein einfaches Beispiel für die Art dynamischer Entwickler, mit denen sie sich bei der Fehlersuche in Kubernetes auseinandersetzen müssen. Die Plattform und die darin enthaltenen Probleme können nicht isoliert behandelt werden. Es ist notwendig, sich mit vernetzten Systemen vertraut zu machen. Es ist auch wichtig, sich die verschiedenen Exit-Codes zu merken oder mit ihnen vertraut zu sein, da sie wichtige Hinweise zur Diagnose von Problemen mit Pods geben.

Auf jeden Fall wird Exit Code 1 nicht wie in der Befehlszeilenschnittstelle (CLI) angezeigt. Wird ein Container beendet, zeigt die CLI die Zeile „Exited (1)“ – wobei die in Klammern eingeschlossene Zahl der Exit-Code ist.

Exitcode diagnostizieren 1

Um mit der Diagnose des Fehlers zu beginnen, besteht der erste Schritt darin, alle Container aufzulisten, die mit einem Fehlercode beendet wurden. In Docker lautet der zu verwendende Befehl „ps -la“. Bei Kubernetes lautet der Befehl „kubectl describe pod [POD_NAME]“.

Nachdem Sie die betroffenen Container gefunden haben, besteht der nächste Schritt darin, die Protokolle der Container-Engine zu untersuchen, um festzustellen, ob der Fehler auf eine ungültige Referenz zurückzuführen ist, was durch eine „nicht gefundene“ Datei für die Bildspezifikation belegt wird. Wenn das Problem nicht auf eine ungültige Referenz zurückzuführen ist, besteht der nächste Schritt darin, die Bibliothek innerhalb des Containers zu suchen, die den Fehler verursacht hat. Es folgt das Debuggen der problematischen Bibliothek.

Fehlerbehebung – Standard-DIY-Prozess

Es gibt eine Reihe von Ansätzen zur Fehlerbehebung bei einem Exit Code 1-Fehler, wie unten beschrieben.

# Löschen und Neuerstellen von Containern – Dieser Ansatz ist wie ein Zurücksetzen auf die Werkseinstellungen, sodass Entwickler mit einer frischen, sauberen Weste beginnen können. Alle temporären Dateien und vorübergehenden Bedingungen, einschließlich derjenigen, die die möglichen Ursachen des Fehlers sind, werden entfernt und dann sorgfältig neu erstellt, um sicherzustellen, dass sie keine Probleme mehr enthalten.

# App-Fehlerbehebung durch Container-Bashing – Diese Technik ist in Fällen anwendbar, in denen Container keine Einstiegspunkte verwenden und der begründete Verdacht besteht, dass das Problem mit dem Exit-Code 1 durch eine Anwendung verursacht wird. Bashing beinhaltet die Verwendung des Bashing-Befehls (bash) zur Ausführung in einer Shell innerhalb des Containers, um die App auszuführen, von der vermutet wird, dass sie das Problem verursacht, und zu prüfen, ob sie beendet wird und den Fehler „Exit Code 1“ zurückgibt.

# App-Fehlerbehebung ohne Bashing – Es ist auch möglich, das Problem zu identifizieren und zu beheben, das mit der App zusammenhängen könnte, indem die App außerhalb des Containers ausgeführt wird. Damit dies funktioniert, ist es jedoch entscheidend, dass die neue Umgebung, mit der die Anwendung ausgeführt werden soll, der des vorherigen Containers ähnelt, in dem die verdächtigte App (möglicherweise) einen Fehler verursacht.

# Experimentieren mit App-Parametern – Es ist auch möglich, App-bezogene Schwierigkeiten zu finden und zu beheben, die den Exit Code 1-Fehler verursachen, indem verschiedene Konfigurationen der App ausprobiert werden. Dies ist eine Trial-and-Error-Strategie, daher wäre eine Menge Geduld erforderlich. Einige der App-Konfigurationen, die geändert werden können, sind die Speicherzuweisung, das Umschalten spezieller Schalter oder Flags, das Ändern der Ports, die zum Verbinden mit dem relevanten Netzwerk verwendet werden, und das Ändern von Umgebungsvariablen.

# Beheben des PID 1-Problems – Es gibt Fälle, in denen der Exit Code 1-Fehler auf ein PID 1-Problem oder den Init-Prozess zurückzuführen ist, der andere Prozesse generiert und die Übertragung von Signalen verursacht. Dies geschieht, wenn die PID beim Ausführen des Befehls „ps -aux“ als „1“ angezeigt wird. Das PID 1-Problem lässt sich lösen, indem ein Container, der sich weigert, mit Tools wie dumb-init zu starten, erzwungen wird. In Kubernetes kann es adressiert werden, indem der Container über Share Process Namespace (PID 5) ausgeführt wird. In Docker besteht die mögliche Lösung darin, den Init-Parameter zu „docker-compose.yml“ hinzuzufügen.

Fehlerbehebung mit einer automatisierten Lösung

Exit Code 1 kann ein herausfordernder Fehler sein, da es schwierig ist, die spezifische Ursache zu identifizieren. Das Problem kann auf verschiedene Probleme zurückgeführt werden, von denen bekannt ist, dass sie dieselben Fehler verursachen. Unerfahrene Entwickler können damit rechnen, dass es schwierig sein wird, die Verwirrung und neue Probleme zu überwinden, auf die sie stoßen können.

Das Gute im Bereich der Container-Orchestrierung ist jetzt, dass es automatisierte Lösungen gibt, die bequem eingesetzt werden können. Es gibt Kubernetes-Fehlerbehebungsplattformen, die entwickelt wurden, um komplexe K8s-Fehler mit allen erforderlichen Tools und Informationen zu beheben, die Entwickler benötigen.

Das Lösen des Fehlers Exit Code 1 kann nur ein paar Klicks entfernt sein. Sie müssen keine langwierigen Experimente durchführen und dabei auf Vermutungen zurückgreifen. Mit einer Zeitleiste zur Überwachung aller Änderungen in Apps oder der gesamten Cloud-Infrastruktur lässt sich das Problem schnell identifizieren. Diese Fehlerbehebungsplattformen können Korrekturanweisungen oder Assistenten bereitstellen und es Entwicklungsteams ermöglichen, Fehler selbst zu beheben und die Notwendigkeit einer Eskalation des Fehlerlösungsprozesses zu vermeiden.

Zusammenfassend

Sicherlich stellt der Fehlerbehebungsprozess für Exit Code 1 alle Fehler dar, die in Kubernetes auftreten werden. Es bietet jedoch einen guten Einblick in die Komplexität der K8-Fehlerbehebung. Es zeigt, dass es keine zwingenden Gründe gibt, sich von Kubernetes-Fehlern oder der Idee, K8s für die Container-Orchestrierung zu verwenden, einschüchtern lassen. Die Fehlersuche kann eine leichte Aufgabe für diejenigen sein, die geduldig Wege finden, das Problem zu lösen; kompliziert für diejenigen, die leicht aufgeben und alle Vorteile von Kubernetes vergessen, nachdem sie auf einige Herausforderungen gestoßen sind.