Wie (und warum) Sie Integritätsprüfungen zu Ihren Docker-Containern hinzufügen

0
208

Sie haben Ihr Docker-Image erstellt und in Ihre Registry übertragen und startete einen neuen Container in der Produktion. Alles funktioniert, während Sie für den Tag nach Hause fahren, aber Sie erhalten Ausfallmeldungen, wenn Sie am nächsten Morgen zurückkommen. Ihr Container wird noch ausgeführt, bedient jedoch keine Anfragen.

Dieses Szenario ist Betriebsteams, die mit Docker arbeiten, möglicherweise unangenehm vertraut. So verwenden Sie die Systemdiagnosefunktion von Docker, um genaue Daten zur Verfügbarkeit Ihrer Dienste zu erhalten.

Funktionsweise von Systemdiagnosen< /h2>

Zustandsprüfungen ermöglichen es einem Container, die Verfügbarkeit seiner Workload offenzulegen. Dies steht unabhängig davon, ob der Container läuft. Wenn Ihre Datenbank ausfällt, kann Ihr API-Server keine Anfragen verarbeiten, obwohl sein Docker-Container noch ausgeführt wird.

Dies führt zu nicht hilfreichen Erfahrungen bei der Fehlerbehebung. Ein einfacher Docker ps würde den Container als verfügbar melden. Durch das Hinzufügen einer Systemdiagnose wird die Docker-PS-Ausgabe um den wahren Zustand des Containers erweitert.

Sie konfigurieren Container-Zustandsprüfungen in Ihrem Dockerfile. Dieser akzeptiert einen Befehl, den der Docker-Daemon alle 30 Sekunden ausführt. Docker verwendet den Exit-Code des Befehls, um den Zustand Ihres Containers zu bestimmen:

  • 0 – Der Container ist fehlerfrei und funktioniert normal.
  • 1 – Der Behälter ist ungesund; die Arbeitslast funktioniert möglicherweise nicht.
  • 2 – Dieser Statuscode ist von Docker reserviert und sollte nicht verwendet werden.

Werbung

Wenn HEALTHCHECK in einem Dockerfile vorhanden ist, sehen Sie den Zustand des Containers in die Spalte STATUS, wenn Sie docker ps ausführen.

Die Gesundheit wird nicht sofort beim Erstellen von Containern überprüft. Der Status wird vor der ersten Prüfung als startend angezeigt. Dies gibt dem Container Zeit, alle Startaufgaben auszuführen. Ein Container mit einer bestandenen Zustandsprüfung wird als fehlerfrei angezeigt. ein fehlerhafter Container zeigt fehlerhaft an.

Schreiben von Integritätsprüfungsbefehlen

Container-Zustandsprüfungen werden mit der HEALTHCHECK-Anweisung in Ihrem Dockerfile konfiguriert. Sie sollten einen Systemdiagnosebefehl verwenden, der für Ihren Container geeignet ist. Für Webserver bietet curl eine einfache Möglichkeit, eine grundlegende Bereitschaftsprüfung durchzuführen. Pingen Sie einen bekannten Endpunkt an, der verfügbar sein sollte, wenn Ihr Dienst aktiv ist.

FROM nginx:latest HEALTHCHECK CMD curl –fail http://localhost/api/healthcheck || Ausgang 1

In diesem Beispiel wird der Container als fehlerhaft markiert, wenn der /api/healthcheck-Endpunkt Ihres Servers einen Fehlerstatus ausgegeben hat.

Sie können docker inspect verwenden, um die Ausgabe von Systemdiagnosebefehlen anzuzeigen. Dies ist hilfreich, wenn Sie Ihre HEALTHCHECK-Anweisung debuggen.

docker inspect –format='{{json .State.Health}}' my-container

Ersetzen Sie my-container durch die ID oder den Namen des Containers, den Sie inspizieren möchten. Diese Details werden in der Docker-PS-Ausgabe angezeigt.

Anpassen von Systemdiagnosen

Werbung

Mit Docker können Sie die Häufigkeit der Systemdiagnosen anpassen. Sie können auch die Kriterien ändern, die einen Container als fehlerhaft markieren.

Es stehen vier Optionen zur Verfügung:

  • –interval – Legen Sie die Zeit zwischen den Systemdiagnosen fest. Dadurch können Sie den Standardwert von 30 Sekunden überschreiben. Verwenden Sie ein höheres Intervall, um die Zeit zwischen den Überprüfungen zu verlängern. Dies ist hilfreich, wenn Sie über einen Dienst mit niedriger Priorität verfügen, bei dem regelmäßige Systemdiagnosen die Leistung beeinträchtigen können. Verwenden Sie eine regelmäßigere Frequenz für kritische Dienste.
  • –Startzeitraum – Legen Sie die Dauer nach dem Start eines Containers fest, in der Systemdiagnosen ignoriert werden sollen. Der Befehl wird weiterhin ausgeführt, aber ein fehlerhafter Status wird nicht gezählt. Dadurch haben Container Zeit, die Startvorgänge abzuschließen.
  • –retries– Auf diese Weise können Sie mehrere aufeinanderfolgende Fehler erfordern, bevor ein Container als fehlerhaft markiert wird. Der Standardwert ist 3. Wenn eine Integritätsprüfung fehlschlägt, die nachfolgende jedoch erfolgreich ist, wechselt der Container nicht in einen fehlerhaften Zustand. Es wird nach drei aufeinanderfolgenden fehlgeschlagenen Überprüfungen fehlerhaft.
  • –timeout – Legen Sie das Timeout für Integritätsprüfungsbefehle fest. Docker behandelt die Prüfung als fehlgeschlagen, wenn der Befehl nicht innerhalb dieses Zeitrahmens beendet wird.

Optionen werden als Flags an die HEALTHCHECK-Anweisung übergeben. Geben Sie sie vor dem Health-Check-Befehl ein:

HEALTHCHECK –interval=60s –retries=5 CMD curl –fail http://localhost || Ausgang 1

Diese Konfiguration weist Docker an, curl alle 60 Sekunden auszuführen. Der Container wird als fehlerhaft markiert, wenn fünf aufeinanderfolgende Tests einen Exit-Code ungleich null haben.

Befehlsformat

Die HEALTHCHECK-Befehlssyntax unterstützt entweder ein einfaches CMD oder ein Exec-Array im Entrypoint-Stil. Sie können auch NONE anstelle von CMD übergeben, um Systemdiagnosen zu deaktivieren:

HEALTHCHECK NONE

Damit können Sie die Systemdiagnosen Ihres Basis-Images unterbinden. Jede HEALTHCHECK-Anweisung überschreibt alle vorherigen Anweisungen in den Ebenen Ihres Bildes.

Was ist mit Docker Compose?

Docker Compose unterstützt auch Zustandsprüfungsdefinitionen. Fügen Sie Ihrem Dienst einen Abschnitt zur Systemdiagnose hinzu:

version: "3" services: app: image: nginx:latest ports: – 80:80 healthcheck: test: curl –fail http://localhost || Exit 1 Intervall: 10s Wiederholungen: 5 start_period: 5s Timeout: 10s Ankündigung

Der Testschlüssel definiert den auszuführenden Befehl. Die anderen Schlüssel sind den Parametern zugeordnet, die von der Dockerfile HEALTHCHECK-Anweisung akzeptiert werden.

Zusammenfassung

Das Festlegen einer HEALTHCHECK-Anweisung erleichtert die Diagnose eines Containers mit Fehlverhalten. Sie können die Bereitschaft Ihres Workloads unabhängig von der “Ausführung” des Containers verfolgen. state.

Health Checks sind mit jedem Befehl kompatibel, der einen 0- oder 1-Exit-Code ausgibt. Sie können allgemeine Befehle wie curl und ping verwenden, um Webdienste und Datenbanken zu überprüfen. Schreiben Sie für eine erweiterte Kontrolle ein spezielles Skript und fügen Sie es in Ihre Bilder ein.