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

Для контейнерных приложений, обслуживающих трафик, может потребоваться проверка готовности контейнера к обработке входящих запросов. Служба "Экземпляры контейнеров Azure" поддерживает пробы для проверки контейнеров на готовность к включению в них конфигураций, поэтому доступ к контейнеру при определенных условиях невозможен. Проба готовности ведет себя так же, как проба готовности Kubernetes. Например, приложению-контейнеру необходимо загрузить большой набор данных во время запуска, и вы не хотите, чтобы он получал запросы в течение этого времени.

В этой статье объясняется, как развернуть группу контейнеров, включающую пробу готовности, чтобы контейнер получал трафик только после завершения этой пробы.

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

Конфигурация YAML

В качестве примера создайте файл readiness-probe.yaml со следующим далее фрагментом. Данный фрагмент включает пробу готовности. Этот файл определяет группу контейнеров, включающую контейнер, в котором работает небольшое веб-приложение. Приложение развертывается из общедоступного образа mcr.microsoft.com/azuredocs/aci-helloworld. Это контейнерное приложение также представлено в статье Развертывание экземпляра контейнера в Azure с помощью Azure CLI и в других кратких руководствах.

apiVersion: 2019-12-01
location: eastus
name: readinesstest
properties:
  containers:
  - name: mycontainer
    properties:
      image: mcr.microsoft.com/azuredocs/aci-helloworld
      command:
        - "/bin/sh"
        - "-c"
        - "node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait"
      ports:
      - port: 80
      resources:
        requests:
          cpu: 1.0
          memoryInGB: 1.5
      readinessProbe:
        exec:
          command:
          - "cat"
          - "/tmp/ready"
        periodSeconds: 5
  osType: Linux
  restartPolicy: Always
  ipAddress:
    type: Public
    ports:
    - protocol: tcp
      port: '80'
tags: null
type: Microsoft.ContainerInstance/containerGroups

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

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

Сначала запускается сеанс оболочки и производится node команда для запуска веб-приложения. При этом также запускается команда на спящий режим в течение 240 секунд, после чего создается файл с именем ready в каталоге /tmp:

node /usr/src/app/index.js & (sleep 240; touch /tmp/ready); wait

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

Этот ФАЙЛ YAML определяет команду readinessProbe готовности, exec которая выступает в качестве проверки готовности. В этом примере команда готовности проверяет наличие файла ready в каталоге /tmp.

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

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

Пример развертывания

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

az container create --resource-group myResourceGroup --file readiness-probe.yaml

Просмотр проверок готовности

В этом примере в течение первых 240 секунд команда готовности при проверке существования файла ready завершается ошибкой. Код состояния вернул сигналы о том, что контейнер не готов.

Эти события можно просмотреть на портале Azure или в Azure CLI. Например, на портале отображаются события типа Unhealthy, запускаемые при сбое команды готовности.

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

Проверка готовности контейнера

После запуска контейнера можно проверить, доступен ли он изначально. После проведения подготовительных шагов получите IP-адрес группы контейнеров:

az container show --resource-group myResourceGroup --name readinesstest --query "ipAddress.ip" --out tsv

Попробуйте получить доступ в тот момент когда проба готовности завершилась ошибкой:

wget <ipAddress>

Выходные данные показывают, что сайт недоступен изначально:

wget 192.0.2.1
--2019-10-15 16:46:02--  http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...

По истечении 240 секунд команда готовности завершается успешно и подает сигнал, что контейнер готов. Теперь при подаче команды wget она успешно выполняется:

wget 192.0.2.1
--2019-10-15 16:46:02--  http://192.0.2.1/
Connecting to 192.0.2.1... connected.
HTTP request sent, awaiting response...200 OK
Length: 1663 (1.6K) [text/html]
Saving to: ‘index.html.1’

index.html.1                       100%[===============================================================>]   1.62K  --.-KB/s    in 0s

2019-10-15 16:49:38 (113 MB/s) - ‘index.html.1’ saved [1663/1663]

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

Примечание.

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

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

Проверка готовности может пригодиться в сценариях с участием групп, состоящих из нескольких зависимых контейнеров. Дополнительные сведения о сценариях с несколькими контейнерами см. в статьеГруппы контейнеров в службе "Экземпляры контейнеров Azure".