Поделиться через


Пробы работоспособности в Контейнерах приложений Azure

Пробы работоспособности приложений контейнеров Azure позволяют среде выполнения контейнерных приложений регулярно проверять состояние приложений контейнеров.

Пробы можно настроить, используя исключительно TCP или HTTP(S).

Контейнерные приложения поддерживают следующие пробы:

Проба Description
Запуск Проверяет, успешно ли запущено приложение. Эта проверка отличается от пробы активности и выполняется на начальном этапе запуска приложения.
Живость Проверяет, работает ли ваше приложение и реагирует.
Готовность Проверяет, готова ли реплика обрабатывать входящие запросы.

Полный список спецификаций проб, поддерживаемых в приложениях контейнеров Azure, см. в спецификациях REST API Azure.

Пробы HTTP

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

Настройте конечные точки пробы работоспособности для ответа с кодом состояния HTTP, большим или равным 200 и меньшим 400, для указания успешного выполнения. Любой другой код ответа за пределами этого диапазона указывает на сбой.

В следующем примере показано, как реализовать конечную точку активности в JavaScript.

const express = require('express');
const app = express();

app.get('/liveness', (req, res) => {
  let isSystemStable = false;
  
  // check for database availability
  // check filesystem structure
  //  etc.

  // set isSystemStable to true if all checks pass

  if (isSystemStable) {
    res.status(200); // Success
  } else {
    res.status(503); // Service unavailable
  }
})

Пробы TCP

Проверки TCP ожидают установления соединения с сервером, чтобы указать успешность. Проверка завершается ошибкой, если не удается установить подключение к приложению.

Ограничения

  • Для каждого контейнера можно добавить только один из каждого типа пробы.
  • Пробы exec не поддерживаются.
  • Значения портов должны быть целыми числами; именованные порты не поддерживаются.
  • gRPC не поддерживается.

Примеры

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

Заполнители ... обозначают пропущенный код. Полные сведения о шаблоне ARM см. в спецификации API шаблона ARM для Контейнеров приложений.

{
  ...
  "containers":[
    {
      "image":"nginx",
      "name":"web",
      "probes": [
        {
          "type": "liveness",
          "httpGet": {
            "path": "/health",
            "port": 8080,
            "httpHeaders": [
              {
                "name": "Custom-Header",
                "value": "liveness probe"
              }]
          },
          "initialDelaySeconds": 7,
          "periodSeconds": 3
        },
        {
          "type": "readiness",
          "tcpSocket": {
            "port": 8081
          },
          "initialDelaySeconds": 10,
          "periodSeconds": 3
        },
        {
          "type": "startup",
          "httpGet": {
            "path": "/startup",
            "port": 8080,
            "httpHeaders": [
              {
                "name": "Custom-Header",
                "value": "startup probe"
              }]
          },
          "initialDelaySeconds": 3,
          "periodSeconds": 3
        }]
    }]
  ...
}

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

Конфигурация по умолчанию

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

Тип пробы Значения по умолчанию
Запуск Протокол: TCP
Порт: целевой порт входящего трафика
Время ожидания: 3 секунды
Период: 1 секунда
Начальная задержка: 1 секунда
Порог успеха: 1
Порог сбоя: 240
Готовность Протокол: TCP
Порт: целевой порт входящего трафика
Время ожидания: 5 секунд
Период: 5 секунд
Начальная задержка: 3 секунды
Порог успеха: 1
Порог сбоя: 48
Живость Протокол: TCP
Порт: целевой порт входящего трафика

Если ваше приложение занимает длительное время начала (обычно в Java), вам часто нужно настроить пробы, чтобы контейнер не сбой.

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

"probes": [
       {
        "type": "liveness",
        "failureThreshold": 3,
        "periodSeconds": 10,
        "successThreshold": 1,
        "tcpSocket": {
          "port": 80
        },
        "timeoutSeconds": 1
       },
       {
         "type": "readiness",
         "failureThreshold": 48,
         "initialDelaySeconds": 3,
         "periodSeconds": 5,
         "successThreshold": 1,
         "tcpSocket": {
           "port": 80
          },
          "timeoutSeconds": 5
       }]

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