Бөлісу құралы:


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

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

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

Служба "Экземпляры контейнеров Azure" также поддерживает пробы готовности, которые можно настроить так, чтобы трафик достигал контейнера только в том случае, если он готов к работе.

Развертывание файла YAML

Создайте файл liveness-probe.yaml со следующим фрагментом кода. Этот файл определяет группу контейнеров, содержащую контейнер NGINX, который в конечном итоге становится неработоспособным.

apiVersion: 2019-12-01
location: eastus
name: livenesstest
properties:
  containers:
  - name: mycontainer
    properties:
      image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
      command:
        - "/bin/sh"
        - "-c"
        - "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"
      ports: []
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      livenessProbe:
        exec:
            command:
                - "cat"
                - "/tmp/healthy"
        periodSeconds: 5
  osType: Linux
  restartPolicy: Always
tags: null
type: Microsoft.ContainerInstance/containerGroups

Выполните следующую команду, чтобы развернуть эту группу контейнеров с предыдущей конфигурацией YAML:

az container create --resource-group myResourceGroup --name livenesstest -f liveness-probe.yaml

Команда "Запуск"

Развертывание включает свойство command, определяющее стартовую команду, которая выполняется при первом запуске контейнера. Это свойство принимает поступление массива строк. Эта команда имитирует контейнер в неработоспособном состоянии.

Сначала она запускает сеанс Bash и создает файл с именем healthy в каталоге /tmp. После этого она ждет 30 секунд перед удалением файла, а затем переходит в 10-минутный спящий режим:

/bin/sh -c "touch /tmp/healthy; sleep 30; rm -rf /tmp/healthy; sleep 600"

Команда активности

Это развертывание определяет livenessProbe, поддерживающую команду активности exec, которая действует как проверка готовности. Если эта команда завершает работу с ненулевым значением, контейнер будет убит и перезапущен, сигнализирует healthy о том, что файл не найден. Если эта команда завершается успешно с кодом выхода 0, никакие действия выполняться не будут.

Свойство periodSeconds определяет команду активности, которая должна выполняться каждые 5 секунд.

Проверка выходных данных активности

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

Через 30 секунд работа cat /tmp/healthy завершится сбоем, что приведет к неработоспособному состоянию и завершению возникающих событий.

Эти события можно просмотреть на портале Azure или в Azure CLI.

Неработоспособные события на портале

Просматривая события на портале Azure, вы увидите, что события типа Unhealthy будут запускаться при сбое команды активности. Далее будет выполняться событие типа Killing, сообщающее об удалении контейнера; таким образом, перезагрузку можно начать. Количество перезагрузок контейнера будет увеличиваться после каждого такого события.

Перезагрузки выполняются "по месту"; таким образом, ресурсы (такие как общедоступные IP-адреса и содержимое конкретного узла) сохраняются.

Счетчик перезагрузки на портале

Если проба активности постоянно завершается сбоем и активирует слишком много перезагрузок, контейнер вводит экспоненциальную задержку.

Пробы активности и политики перезагрузки

Политики перезагрузки заменяют поведение перезагрузки, активируемое пробами активности. Например, если задать restartPolicy = Never и пробу активности, группа контейнеров не перезапустится из-за сбоя проверки активности. Вместо этого группа контейнеров будет соответствовать Never в политике перезагрузки.

Следующие шаги

Для сценариев на основе задач может потребоваться проба активности, чтобы включить автоматические перезапуски, если необходимая функция не работает должным образом. Дополнительные сведения о запуске контейнеров на основе задач см. статье Выполнение задачи-контейнера в службе "Экземпляры контейнеров Azure".