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


Использование пулов сеансов в приложениях контейнеров Azure

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

Общие понятия для обоих пулов

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

Чтобы создать пулы сеансов с помощью Azure CLI, убедитесь, что у вас есть последние версии Azure CLI и расширения приложений контейнеров Azure:

# Upgrade the Azure CLI
az upgrade

# Install or upgrade the Azure Container Apps extension
az extension add --name containerapp --upgrade --allow-preview true -y

К общим командам пула сеансов относятся:

  • az containerapp sessionpool create
  • az containerapp sessionpool show
  • az containerapp sessionpool list
  • az containerapp sessionpool update
  • az containerapp sessionpool delete

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

Чтобы проверить состояние пула сеансов, используйте az containerapp sessionpool show команду:

az containerapp sessionpool show \
    --name <SESSION_POOL_NAME> \
    --resource-group <RESOURCE_GROUP> \
    --query "properties.poolManagementEndpoint" \
    --output tsv

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

Это важно

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

Это важно

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

Настройка пула

Используйте az containerapp sessionpool create --help для просмотра последних аргументов CLI для конфигурации пула сеансов. В этом разделе рассматриваются дополнительные параметры конфигурации, применяемые в версиях API.

Конфигурация жизненного цикла сеанса

При создании или обновлении пула сеансов можно настроить способ завершения сеансов с помощью параметра properties.dynamicPoolConfiguration.lifecycleConfiguration. Начиная с версии 2025-01-01API выберите один из двух типов жизненного цикла.

Полные спецификации API см. в спецификации API SessionPools.

Время (по умолчанию)

С жизненным циклом Timed сеанс удаляется после периода бездействия. Любой запрос, отправленный в сеанс, сбрасывает таймер ожидания, продлевая время жизни сеансаcooldownPeriodInSeconds.

Замечание

Timed поддерживается для всех типов пула сеансов и работает так же, как executionType: Timed и в более ранних версиях API.

{
  "dynamicPoolConfiguration": {
    "lifecycleConfiguration": {
      "cooldownPeriodInSeconds": 600,
      "lifecycleType": "Timed"
    }
  }
}
Недвижимость Description
cooldownPeriodInSeconds Сеанс удаляется при отсутствии запросов на этот период.
maxAlivePeriodInSeconds Не поддерживается для Timed жизненного цикла.

Конечная точка управления

Это важно

Идентификатор сеанса — это конфиденциальная информация, требующая безопасного процесса при создании и управлении его значением. Чтобы защитить это значение, приложение должно гарантировать, что у каждого пользователя или клиента есть доступ только к собственным сеансам.

Неспособность защитить доступ к сеансам может привести к неправильному использованию или несанкционированного доступа к данным, хранящимся в сеансах пользователей. Дополнительные сведения см. в разделе "Идентификаторы сеансов"

Все запросы к конечной точке управления пулом должны содержать Authorization заголовок с маркером носителя. Сведения о проверке подлинности с помощью API управления пулом см. в статье "Проверка подлинности".

Каждый запрос API также должен содержать параметр identifier строки запроса с идентификатором сеанса. Этот уникальный идентификатор сеанса позволяет приложению взаимодействовать с определенными сеансами. Дополнительные сведения об идентификаторах сеансов см. в разделе "Идентификаторы сеанса".

Кэширование изображений

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

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

Пул сеансов интерпретатора кода

az containerapps sessionpool create Используйте команду для создания пула. В следующем примере создается пул сеансов интерпретатора кода Python с именем my-session-pool. Перед выполнением команды обязательно замените <RESOURCE_GROUP> на имя вашей группы ресурсов.

az containerapp sessionpool create \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --location westus2 \
    --container-type PythonLTS \
    --max-sessions 100 \
    --cooldown-period 300 \
    --network-status EgressDisabled

При создании пула сеансов можно определить следующие параметры:

Setting Description
--container-type Тип используемого интерпретатора кода. Поддерживаются следующие значения: PythonLTS, NodeLTS, Shell и CustomContainer.
--max-sessions Максимальное количество выделенных сеансов, разрешенных одновременно. Максимальное значение — 600.
--cooldown-period Количество разрешенных секунд простоя перед завершением работы. Период простоя сбрасывается при каждом вызове API сеанса. Допустимый диапазон между 300 и 3600.
--network-status Указывает, разрешен ли исходящий сетевой трафик из сеанса. Допустимые значения: EgressDisabled (по умолчанию) и EgressEnabled.

Конечная точка управления интерпретатором кода

Чтобы использовать сеансы интерпретатора кода с интеграцией платформы LLM или вызывая конечные точки API управления напрямую, вам потребуется конечная точка API управления пула.

Конечная точка находится в формате https://<REGION>.dynamicsessions.io/subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP>/sessionPools/<SESSION_POOL_NAME>.

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

Для управления сеансами в пуле доступны следующие конечные точки:

Путь к конечной точке Метод Description
code/execute POST Выполнение кода в сеансе.
files/upload POST Загрузите файл в сеанс.
files/content/{filename} GET Скачайте файл из сеанса.
files GET Перечислите файлы в сеансе.

Вы создаете полный URL-адрес для каждой конечной точки, объединяя конечную точку API управления пула с путем конечной точки. Строка запроса должна содержать identifier параметр, содержащий идентификатор сеанса, и api-version параметр со значением 2024-02-02-preview. Версии API могут изменяться, поэтому всегда проверяйте последнюю версию в документации REST API перед его использованием в рабочей среде.

Например: {sessionManagementEndpoint}/code/execute?api-version=2024-02-02-preview&identifier=<IDENTIFIER>

Справочные материалы по REST API смотрите в документации по API уровня данных Container Apps и обзоре операций уровня данных для Container Apps.

Настраиваемый пул сеансов контейнеров

Чтобы создать настраиваемый пул сеансов контейнеров, необходимо указать образ контейнера и параметры конфигурации пула.

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

Следующие возможности применяются только к настраиваемым пулам сеансов контейнеров.

Конечная точка настраиваемого управления контейнерами

Для пользовательских пулов сеансов контейнеров получите точку управления через портал Azure или с помощью командной строки Azure CLI. Конечная точка возвращается как poolManagementEndpoint.

Конечная точка находится в формате https://<SESSION_POOL_NAME>.<ENVIRONMENT_ID>.<REGION>.azurecontainerapps.io.

OnContainerExit (OnContainerExit)

При жизненном цикле OnContainerExit сеанс остается активным до тех пор, пока контейнер не завершится самостоятельно или не будет достигнут максимальный период активности.

{
  "dynamicPoolConfiguration": {
    "lifecycleConfiguration": {
      "maxAlivePeriodInSeconds": 6000,
      "lifecycleType": "OnContainerExit"
    }
  }
}
Недвижимость Description
maxAlivePeriodInSeconds Максимальное время, в течение которого сеанс может оставаться активным перед удалением.
cooldownPeriodInSeconds Не поддерживается для OnContainerExit жизненного цикла.

Проверки контейнеров

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

Пулы сеансов поддерживают пробы Liveness и Startup . Дополнительные сведения о поведении зондов см. в разделе «Проверка работоспособности зондов в Azure Container Apps».

При создании или обновлении пула сеансов укажите пробы в properties.customContainerTemplate.containers. Полную схему тела запроса см. в справочнике по API создания или обновления SessionPools. В следующем примере показана частичная конфигурация с определениями пробы:

{
  "properties": {
    "customContainerTemplate": {
      "containers": [
        {
          "name": "my-session-container",
          "image": "myregistry.azurecr.io/my-session-image:latest",
          "probes": [
            {
              "type": "Liveness",
              "httpGet": {
                "path": "/health",
                "port": 8080
              },
              "periodSeconds": 10,
              "failureThreshold": 3
            },
            {
              "type": "Startup",
              "httpGet": {
                "path": "/ready",
                "port": 8080
              },
              "periodSeconds": 5,
              "failureThreshold": 30
            }
          ]
        }
      ]
    },
    "dynamicPoolConfiguration": {
      "readySessionInstances": 5
    }
  }
}

Для пользовательских пулов сессий контейнеров требуется среда Azure Container Apps с включенной поддержкой профилей рабочих нагрузок. Если у вас нет среды, используйте az containerapp env create -n <ENVIRONMENT_NAME> -g <RESOURCE_GROUP> --location <LOCATION> команду, чтобы создать ее.

Используйте команду az containerapp sessionpool create для создания настраиваемого пула контейнерных сеансов.

В следующем примере создается пул сеансов с именем my-session-pool и с пользовательским образом контейнера myregistry.azurecr.io/my-container-image:1.0.

Перед отправкой запроса замените заполнители между <> скобками соответствующими значениями для пула сеансов и идентификатора сеанса.

az containerapp sessionpool create \
    --name my-session-pool \
    --resource-group <RESOURCE_GROUP> \
    --environment <ENVIRONMENT> \
    --registry-server myregistry.azurecr.io \
    --registry-username <USER_NAME> \
    --registry-password <PASSWORD> \
    --container-type CustomContainer \
    --image myregistry.azurecr.io/my-container-image:1.0 \
    --cpu 0.25 --memory 0.5Gi \
    --target-port 80 \
    --cooldown-period 300 \
    --network-status EgressDisabled \
    --max-sessions 10 \
    --ready-sessions 5 \
    --env-vars "key1=value1" "key2=value2" \
    --location <LOCATION>

Эта команда создает пул сеансов со следующими параметрами:

Параметр Ценность Description
--name my-session-pool Имя пула сеансов.
--resource-group my-resource-group Группа ресурсов, содержащая пул сеансов.
--environment my-environment Имя среды приложения контейнеров или идентификатор ресурса.
--container-type CustomContainer Тип контейнера пула сеансов. Должен быть CustomContainer для пользовательских сеансов контейнеров.
--image myregistry.azurecr.io/my-container-image:1.0 Образ контейнера, используемый для пула сеансов.
--registry-server myregistry.azurecr.io Имя узла сервера реестра контейнеров.
--registry-username my-username Имя пользователя для входа в реестр контейнеров.
--registry-password my-password Пароль для входа в реестр контейнеров.
--cpu 0.25 Требуемое количество ядер ЦП.
--memory 0.5Gi Требуемая память.
--target-port 80 Порт сеанса, используемый для входящего трафика.
--cooldown-period 300 Количество секунд, в течение которых сеанс может быть неактивен до завершения сеанса. Период простоя сбрасывается при каждом вызове API сеанса. Значение должно быть между 300 и 3600.
--network-status EgressDisabled Указывает, разрешен ли исходящий сетевой трафик из сеанса. Допустимые значения: EgressDisabled (по умолчанию) и EgressEnabled.
--max-sessions 10 Максимальное количество сеансов, которые можно выделить одновременно.
--ready-sessions 5 Целевое число сеансов, которые постоянно готовы в пуле сеансов. Увеличьте это число, если сеансы распределяются быстрее, чем пул обновляется.
--env-vars "key1=value1" "key2=value2" Переменные среды, которые нужно задать в контейнере.
--location "Supported Location" Расположение пула сеансов.

Чтобы обновить пул сеансов, используйте az containerapp sessionpool update команду.