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.
Marco Rico
Fractional CTO