Wie Healthchecks in Kubernetes für Grpc Services umsetzen

Jeder Dienst benötigt einen Healthcheck! Healthchecks werden verwendet, um zu testen, ob ein Dienst aktiv ist und Anfragen verarbeiten kann. Wenn ein Dienst nicht reagiert oder einen ungesunden Status meldet, wird der Scheduler keine Anfragen an den Dienst weiterleiten. Abhängig von den Aktionen kann der Scheduler den ungesunden Dienst neu starten, um ihn wiederherzustellen.

gRPC definiert ein einfaches Health Checking Protocol, das Ihr Dienst bereitstellen sollte. Der Vorteil dabei ist, dass es bereits mehrere Werkzeuge gibt, um Healthchecks mit diesem Protokoll durchzuführen.

Das bekannteste Werkzeug ist grpc-health-probe, ein Kommandozeilenwerkzeug, um die Healthcheck eines gRPC-Dienstes auszuführen.

Vor Kubernetes Version 1.23 war dies die bevorzugte Methode, um Healthchecks durchzuführen. Sie liefern das grpc_heath_probe ausführbare Programm mit Ihrem Docker-Image und verwenden es als Exec-Probe.

Seit Kubernetes Version 1.23 verwenden Sie stattdessen die native gRPC Health Check. Es ist nicht mehr notwendig, grpc_health_probe mit Ihrem Docker-Image zu liefern.

Sehen wir uns ein Beispiel für einen gRPC-Dienst an, der in Scala geschrieben ist:

import io.grpc.ServerBuilder
import io.grpc.protobuf.services.HealthStatusManager

object Main extends App {
    // Teil des grpc-services Pakets
    val healthStatusManager = new HealthStatusManager()

    val server = ServerBuilder
        .forPort(8000)
        .addService(healthStatusManager.getHealthService)
        .build

    // ...
}

Der HealthStatusManager ist eine einfache Implementierung des Health Checking Protocols. Der anfängliche Status ist standardmäßig SERVING. Sie können den Status ändern, indem Sie die Methode setStatus aufrufen.

Um die Healthcheck für Ihre Bereitstellung in Kubernetes zu aktivieren, fügen Sie den folgenden Abschnitt livenessProbe zu Ihrer Bereitstellungsspezifikation hinzu:

spec:
    containers:
    - name: my-service
        # ...
        livenessProbe:
        grpc:
            port: 8000
        initialDelaySeconds: 10

Das war’s. Die Healthcheck ist jetzt aktiviert und Kubernetes wird Ihren Dienst neu starten, wenn er nicht mehr reagiert oder seinen Status auf NOT_SERVING ändert.

Implementiere nicht Dein eigenes Health Checking Protocol. Verwende besser das Standardprotokoll, um von dem bestehenden Ökosystem zu profitieren. Verwende grpc_heath_probe nur mit einer Exec-Probe, wenn Du Kubernetes 1.23 oder neuer nicht verwenden kannst. Bevorzuge die native gRPC Healthcheck-Methode, die von Kubernetes bereitgestellt wird.

Wobei können wir Sie unterstützen?

Senden Sie mir einfach eine Nachricht order rufen Sie mich an. Ich freue mich, von Ihnen zu hören.

[email protected]

+49 160 975 280 94

Support Image

Marco Rico

Fractional CTO