Самовосстановление и наблюдаемость — Примеры

Пример 1 — Старт, который убивают до готовности

Сервису нужно сорок секунд, чтобы прогреть кэш, прежде чем отвечать на своём порту. Во время постепенного развёртывания новые pod’ы перезапускаются снова и снова, и выпуск застревает. Ниже блок проб; объясните цикл и исправьте его.

livenessProbe:
  httpGet:
    path: /live
    port: 8080
  periodSeconds: 5
  failureThreshold: 3

Решение

startupProbe:
  httpGet:
    path: /live
    port: 8080
  failureThreshold: 30
  periodSeconds: 5
livenessProbe:
  httpGet:
    path: /live
    port: 8080
  periodSeconds: 5
  failureThreshold: 3

Startup-проба придерживает liveness-проверку, пока процесс не получит время инициализироваться, поэтому медленный прогрев больше не принимается за мёртвый процесс. Оба значения по умолчанию для проб слишком малы, чтобы быть верными для настоящих сервисов, а короткий период милосердия рядом с процессом, игнорирующим сигнал завершения, — обычная причина ошибок во время выпуска.

Пример 2 — Число перезапусков, на которое никто не смотрит

Сервис работает неделю, и пользователи ничего не заметили, но pod’ы говорят другое. Прочитайте доказательства и скажите, что означает это число и где этому сигналу место.

$ kubectl get pods
NAME         READY   STATUS             RESTARTS   AGE
api-7d4b2    1/1     Running            37         6d
api-91ab4    1/1     Running            41         6d

Решение

$ kubectl get events --field-selector reason=Unhealthy
... Readiness probe failed: context deadline exceeded
... Back-off restarting failed container

alert: container_restarts{app="api"} > 5 in 1h

Растущее число перезапусков — доказательство, а не шум: pod’ы убивают и создают заново достаточно часто, чтобы хроническая неисправность уже присутствовала, хотя снаружи сервис выглядит здоровым. Платформа восстанавливает pod’ы и тем самым прячет причину, поэтому перезапускам и вытеснениям место в оповещении, а не на панели, которую никто не читает. Относиться к ним как к норме — обычная ошибка.

Подставьте свои имена образов, правила оповещений и детали кластера там, где эти наброски используют заполнители.