CV laden
Zurück zu Business Cases

Kubernetes

Eine Liveness, die PHP während OPcache tötete

Der Docker-Healthcheck wurde Liveness. Der erste Request kompilierte LaraBoom. Kubelet schickte SIGKILL. Die Replica wurde nie Ready.

Die App zog von Compose auf einem VPS nach Kubernetes. Der Dockerfile-Healthcheck curlte /. Dieser Check wurde Liveness. Period 10s, timeout 1s, failureThreshold 3. php-fpm band in zwei Sekunden. Der erste echte Request kompilierte den LaraBoom-Host in OPcache und brauchte acht.

Kubelet tötete den Pod. Der nächste machte dasselbe. nginx im Mesh lieferte 502. Der Deploy sah in CI gesund aus, weil das Image baute. Der Service hatte keine Ready-Endpoints.

Das Problem war ein Docker-Healthcheck, der während OPcache-Warmup zur Liveness wurde. Besucher trafen 502 in einem Crash Loop. Ich brauchte startupProbe auf /up, Liveness nach Warmup und Readiness auf nginx, nicht auf einer Route, die Eloquent bootet.

Prozess up ist nicht Request ready. Kurze Liveness während Compile sieht aus wie Crash Loop.
Prozess up ist nicht Request ready. Kurze Liveness während Compile sieht aus wie Crash Loop.

startupProbe, dann live

startupProbe trifft /up alle fünf Sekunden, failureThreshold 24. Liveness danach. Readiness sitzt auf nginx, nicht auf einer Route, die Eloquent bootet. Rolling Update hält einen Ready-php-Pod. SIGTERM draint Worker weiter wie in Compose.

startupProbe besitzt Warmup. Liveness darf später töten. Readiness entscheidet, ob Traffic kommt.
startupProbe besitzt Warmup. Liveness darf später töten. Readiness entscheidet, ob Traffic kommt.

Was auf Compose blieb

Diese Site läuft weiter Compose. Der Cluster war ein anderer Host. Healthcheck in Liveness zu kopieren ist der billigste Weg, Kubernetes schlechter als Docker aussehen zu lassen. Die Probe-Datei ist kein Port-Check. Sie ist eine Aussage über OPcache und FPM.

Was ich daraus mitnehme

Prozess hört zu ist nicht Request ready. Acht Sekunden Compile sehen wie ein Crash aus, wenn Liveness eine Sekunde ist.

startupProbe besitzt Warmup. Liveness danach. Readiness am Proxy, nicht am Eloquent-Boot.

CI grün beim Image-Build ist kein Ready-Service. Endpoints sind der Check, der zählt.

Zurück zu Business Cases