Авторизоваться
Аким Солянкин 15.06.2021 Опубликована

Как (и зачем) добавлять проверки работоспособности в контейнеры Docker 

Вы создали образ Docker, поместили его в реестр и запустили в производство новый контейнер. Все работает, когда вы отправляетесь домой , но на следующее утро вы получаете отчеты о сбоях. Ваш контейнер все еще работает, но он не обслуживает запросы.

Этот сценарий может быть неприятно знаком операционным группам, работающим с Docker. Вот как использовать функцию проверки работоспособности Docker, чтобы получить точные данные о доступности ваших сервисов.

Как работают проверки работоспособности

Проверки работоспособности позволяют контейнеру раскрыть доступность своей рабочей нагрузки. Это не зависит от того, запущен ли контейнер. Если ваша база данных выйдет из строя, ваш сервер API не сможет обрабатывать запросы, даже если его контейнер Docker все еще работает.

Это создает бесполезный опыт во время устранения неполадок. Простой docker ps сообщит, что контейнер доступен. Добавление проверки работоспособности расширяет выходные данные docker ps, чтобы включить истинное состояние контейнера.

Вы настраиваете проверки работоспособности контейнеров в своем Dockerfile. Он принимает команду, которую демон Docker будет выполнять каждые 30 секунд. Docker использует код выхода команды, чтобы определить работоспособность вашего контейнера:

  • 0 - Контейнер исправен и работает нормально.
  • 1- Контейнер неисправен; рабочая нагрузка может не работать.
  • 2 - Этот код состояния зарезервирован Docker и не должен использоваться.

Если HEALTHCHECK присутствует в Dockerfile, вы увидите состояние контейнера в столбце STATUS при запуске docker ps.

Работоспособность не проверяется сразу при создании контейнеров. Статус будет отображаться как starting до выполнения первой проверки. Это дает контейнеру время для выполнения любых задач запуска. Контейнер с пройденной проверкой работоспособности будет отображаться как healthy; отображается нездоровый контейнер unhealthy.

Написание команд проверки работоспособности

Проверки работоспособности контейнеров настраиваются с помощью инструкции HEALTHCHECK в вашем Dockerfile. Вы должны использовать команду проверки работоспособности, подходящую для вашего контейнера. Для веб-серверов curl это простой способ выполнить базовую проверку готовности. Проверьте связь с известной конечной точкой, которая должна быть доступна всякий раз, когда ваша служба работает.

FROM nginx:latest
HEALTHCHECK CMD curl --fail http://localhost/api/healthcheck || exit 1

В этом примере контейнер будет помечен как неработоспособный, если конечная точка /api/healthcheck вашего сервера выдала состояние ошибки.

Вы можете использовать docker inspect чтобы увидеть вывод команд проверки работоспособности. Это полезно при отладке инструкции HEALTHCHECK.

docker inspect --format='{{json .State.Health}}' my-container

Замените my-container идентификатором или названием контейнера, который вы хотите проверить. Эти сведения отображаются в выходных данных docker ps.

Настройка проверок работоспособности

Docker позволяет настраивать частоту проверок работоспособности. Вы также можете изменить критерии, по которым контейнер помечается как неисправный.

Доступны четыре варианта:

  • --interval- Установите время между проверками работоспособности. Это позволяет изменить значение по умолчанию 30 секунд. Используйте больший интервал, чтобы увеличить время между проверками. Это помогает, если у вас есть служба с низким приоритетом, где регулярные проверки работоспособности могут повлиять на производительность. Используйте более регулярную частоту для критически важных служб.
  • --start-period- Установите продолжительность после запуска контейнера, когда проверки работоспособности следует игнорировать. Команда все равно будет запущена, но нездоровый статус не будет засчитан. Это дает контейнерам время для завершения процедур запуска.
  • --retries- Это позволяет вам потребовать несколько последовательных сбоев, прежде чем контейнер будет помечен как unhealthy. По умолчанию это 3. Если проверка работоспособности завершилась неудачно, но последующая прошла успешно, контейнер не перейдет в режим unhealthy. Он станет нерабочим после трех неудачных проверок подряд.
  • --timeout- Установите тайм-аут для команд проверки работоспособности. Docker будет считать проверку неудачной, если команда не завершится в течение этого периода времени.

Параметры передаются в инструкцию HEALTHCHECK как флаги. Предоставьте их перед командой проверки работоспособности:

HEALTHCHECK --interval=60s --retries=5 CMD curl --fail http://localhost || exit 1

Эта конфигурация предписывает Docker запускать curl каждые 60 секунд. Контейнер будет отмечен как неисправный, если пять последовательных тестов имеют ненулевой код выхода.

Формат команды

Синтаксис команды HEALTHCHECK поддерживает либо обычный CMD, либо массив exec в стиле точки входа. Вы также можете передать NONE вместо CMD, чтобы отключить проверку работоспособности:

HEALTHCHECK NONE

Это позволяет запретить проверки работоспособности базового образа. Каждый оператор HEALTHCHECK отменяет любые предыдущие инструкции в слоях вашего изображения.

Что насчет Docker Compose?

Docker Compose также поддерживает определения проверки работоспособности. Добавьте раздел healthcheck в свой сервис :.

version: "3"
services:
  app:
    image: nginx:latest
    ports:
      - 80:80
    healthcheck:
      test: curl --fail http://localhost || exit 1
      interval: 10s
      retries: 5
      start_period: 5s
      timeout: 10s

Ключ test определяет команду для запуска. Другие ключи соответствуют параметрам, принятым инструкцией HEALTHCHECK Dockerfile.

Резюме

Установка инструкции HEALTHCHECK упрощает диагностику неисправного контейнера. Вы можете отслеживать готовность вашей рабочей нагрузки независимо от «запущенного» состояния контейнера.

Проверки работоспособности совместимы с любой командой, которая выдает код выхода 0 или 1. Вы можете использовать общие команды, такие как curl и ping для проверки веб-служб и баз данных. Для более продвинутого управления напишите специальный сценарий и включите его в свои изображения

Источник

LinkedIn Icon
Коментарии
Авторизоваться что-бы оставить комментарий
Присоединяйся в тусовку
Наш сайт использует файлы cookie для вашего максимального удобства. Пользуясь сайтом, вы даете свое согласие с условиями пользования cookie