Продолжая знакомиться с Kubernetes, разберемся с проверкой работоспособности приложений (Health chec

Продолжая знакомиться с Kubernetes, разберемся с проверкой работоспособности приложений (Health chec

Проверки работоспособности дают кластеру k8s понять, когда с нашим приложением что-то не так и нам нужно зафиксировать это в логах или перезапустить под. Есть два типа проверок: Liveness и Readiness.

Liveness

В этом случае мы определяем работоспособность контейнера. Узнать его состояние можно несколькими способами – это httpGet (запрос HTTP к приложению), tcpSocket (k8s попробует создать соединение на указанный порт вашего приложения) и gRPC (grpc-health-probe). Рассмотрим первые два варианта.

Для приложения с HTTP-сервером определение работоспособности через httpGet выглядит примерно так:

Делается HTTP-запрос к указанным URI и порту (в нашем случае это / на порте 8080). В случае успешного ответа вида 2xx, k8s считает приложение работоспособным. Другой ответ или отсутствие такового говорит о том, что контейнер отключен и его нужно перезапустить.

  • initialDelaySeconds отвечает за задержку в секундах перед началом проверки. Нет такого приложения, которое стартует мгновенно.
  • periodSeconds отвечает за периодичность запуска проверки для защиты от перегрузки. В нашем случае проверка проводится каждые 3 секунды.

Если приложение не умеет обрабатывать HTTP-запросы, можно использовать проверку через tcpSoket:

Если TCP-соединение будет успешным, k8s считает приложение работоспособным.

Readiness

С технической точки зрения эта проверка похожа на предыдущую. Разница в том, что если мы не проходим Liveness, то под с нашим приложением уходит в перезагрузку, а в случае с провалом Readiness он блокируется на Service. На приложение в этом случае не будет направляться трафик.

Описать проверку Readiness можно так:

Внимательный читатель увидит, что разница только в одной строчке.

Ingress

От проверок переходим к объекту Ingress, который организует сетевое взаимодействие с подами (как Service), но прокидывает трафик на доменное имя и позволяет добраться до приложения из Internet. Еще одна его функция – балансировка трафика, при этом в настройках можно указать правила маршрутизации на определенные Service.

Схема работы Ingress.Схема работы Ingress.

Ingress сверху мапится с доменным именем, а снизу – с Service, который обслуживает трафик для подов нашего приложения.

Описать YAML можно так:

Основные моменты:

  • host – ваше доменное имя.
  • serviceName – Name Service, который обслуживает приложение.
  • servicePort – порт для сетевого взаимодействия.

В статьях цикла мы сделали следующее:

После публикации приложение в Internet с помощью Ingress архитектурная схема нашего кластера выглядит так:

Продолжая знакомиться с Kubernetes, разберемся с проверкой работоспособности приложений (Health chec

Забрать файлы YAML можно по ссылке . В следующей статье мы разберемся с Helm (package manager for Kubernetes).