Настройка проб готовности
Для контейнерных приложений, обслуживающих трафик, может потребоваться проверка готовности контейнера к обработке входящих запросов. Служба "Экземпляры контейнеров 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".