10/07/2020

Besserer Support für Kubernetes in Spring Boot 2.3

Situation

Die Container-Plattform Kubernetes kennt zwei Endpunkte für Health-Checks: den Readiness-Probe und den Liveness-Probe. Grob gesagt, bewirken die Endpunkte folgendes: Schlägt der Readiness-Probe fehl, wird der Container aus dem Load Balancing gehangen. Schlägt der Livenss-Probe fehl, wird der Container neu gestartet.

In Spring Boot gab es bisher aber nur einen einzigen Health-Check, was für Kubernetes nicht optimal war. Wenn z.B. die Verbindung zur Datenbank ausfällt, wird sofort der Service neu gestartet, was in einem Crash-Loop mündet, was wiederum der Cluster Autoscaler stresst (dadurch verursachter CPU Overhead auf dem Cluster ca. 15-25%).

Lösung

Um dem Problem zu begegnen hat man oftmals den Readiness Probe auf /info gemappt (simpel aber nicht so effektiv, da der Container dann *nie* aus dem Load Balancing genommen wird), oder sich einen eigenen Readiness Probe geschrieben (intelligentere Variante).

Mit Spring Boot 2.3 hat man auf diese Anforderungen aus dem Kubernetes Umfeld reagiert und es gibt jetzt zwei verschiedene Endpunkte /actuator/health/readiness und /actuator/health/liveness. Mehr Details gibt es in der offiziellen Ankündigung.