Скачать CV
Назад к бизнес-кейсам

Kubernetes

Liveness, который убивал PHP во время OPcache

Healthcheck Docker стал liveness. Первый запрос компилировал LaraBoom. Kubelet слал SIGKILL. Реплика не стала Ready.

Приложение уехало с Compose на одном VPS в Kubernetes. Healthcheck в Dockerfile дергал /. Эта проверка стала liveness. Period 10s, timeout 1s, failureThreshold 3. php-fpm поднялся за две секунды. Первый живой запрос компилировал хост LaraBoom в OPcache и занял восемь.

Kubelet убил под. Следующий сделал то же. nginx в mesh отдавал 502. Деплой в CI выглядел здоровым, потому что образ собрался. У Service не было Ready endpoints.

Проблема была в Docker healthcheck, скопированном в liveness на прогреве OPcache. Посетители ловили 502 в crash loop. Нужен startupProbe на /up, liveness после прогрева и readiness на nginx, не на маршруте, который поднимает Eloquent.

Процесс слушает это не готовый запрос. Короткий liveness на компиляции выглядит как crash loop.
Процесс слушает это не готовый запрос. Короткий liveness на компиляции выглядит как crash loop.

Сначала startupProbe, потом live

startupProbe бьёт в /up каждые пять секунд, failureThreshold 24. Liveness после этого. Readiness на nginx, не на маршруте, который поднимает Eloquent. Rolling update держит один Ready php под. SIGTERM по-прежнему даёт воркерам доработать, как в Compose.

startupProbe владеет прогревом. Liveness может убить позже. Readiness решает, придёт ли трафик.
startupProbe владеет прогревом. Liveness может убить позже. Readiness решает, придёт ли трафик.

Что осталось на Compose

Этот сайт всё ещё на Compose. Кластер был другим хостом. Скопировать healthcheck в liveness это самый дешёвый способ сделать Kubernetes хуже Docker. Файл зонда это не проверка порта. Это заявление про OPcache и FPM.

Какой опыт из этого

Процесс слушает это не готовый запрос. Восемь секунд компиляции выглядят как crash, если liveness одна секунда.

startupProbe владеет прогревом. Liveness после. Readiness на прокси, не на boot Eloquent.

Зелёный CI на сборке образа это не Ready Service. Endpoints это проверка, которая важна.

Назад к бизнес-кейсам