Открыть сервис

Azure Container Apps

Azure Container Apps — это полностью управляемый сервис бессерверных вычислений (serverless) от компании Microsoft, предназначенный для развёртывания и оркестрации контейнеризированных приложений и микросервисов. Сервис работает поверх платформы оркестрации Kubernetes, но абстрагирует пользователя от управления кластером, узлами и инфраструктурой, предоставляя среду для выполнения контейнеров на основе событий, HTTP-запросов или по расписанию. Azure Container Apps входит в состав облачной платформы Microsoft Azure и позиционируется как альтернатива Azure Kubernetes Service (AKS) для сценариев, не требующих полного контроля над кластером, а также как конкурент таким сервисам, как Google Cloud Run и AWS Fargate.

История

Azure Container Apps был анонсирован компанией Microsoft в ноябре 2021 года на конференции Microsoft Ignite. Сервис стал доступен в публичной предварительной версии (public preview) в январе 2022 года. В мае 2022 года Azure Container Apps достиг статуса общедоступного (General Availability, GA). Разработка сервиса была обусловлена растущей популярностью бессерверных контейнерных решений (serverless containers) и потребностью в упрощённом способе запуска микросервисов без необходимости управления сложной инфраструктурой Kubernetes. В отличие от Azure Kubernetes Service (AKS), который требует от администраторов настройки и обслуживания кластера, Azure Container Apps берёт на себя эти задачи, предоставляя пользователю только среду выполнения.

Архитектура и принципы работы

Среда выполнения (Environment)

Основной единицей развёртывания в Azure Container Apps является среда выполнения (Container Apps Environment). Среда выполнения представляет собой изолированную границу безопасности и сети вокруг группы приложений. Она разворачивается в виртуальной сети (VNet) пользователя (или в управляемой Microsoft сети) и включает в себя один или несколько виртуальных узлов, на которых запускаются контейнеры. Каждая среда выполнения может содержать множество приложений (Container Apps), которые могут взаимодействовать друг с другом через внутреннюю сеть.

Приложения (Container Apps)

Container App — это отдельное приложение или микросервис, состоящее из одного или нескольких контейнеров, объединённых в одну логическую единицу. Приложение определяется набором контейнеров (обычно один контейнер с кодом приложения и, возможно, контейнеры-сайдкары), переменными окружения, настройками масштабирования, правилами входящего трафика и политиками обновления.

Ревизии (Revisions)

Azure Container Apps использует концепцию ревизий (revisions) для управления версиями приложения. Каждая ревизия — это неизменяемый снимок конфигурации приложения (образ контейнера, переменные окружения, настройки масштабирования). При изменении конфигурации (например, при обновлении образа контейнера) создаётся новая ревизия. Сервис поддерживает несколько активных ревизий одновременно, что позволяет реализовать стратегии развёртывания, такие как:

  • Blue-Green deployment: одна ревизия (blue) обслуживает весь трафик, вторая (green) развёртывается параллельно для тестирования.
  • Canary deployment: часть трафика (например, 10%) направляется на новую ревизию, а остальная часть — на старую.
  • Rollback: при обнаружении проблемы можно быстро переключить весь трафик на предыдущую стабильную ревизию.

Масштабирование

Масштабирование в Azure Container Apps является ключевой особенностью. Оно поддерживает два режима:

  • Масштабирование на основе HTTP-трафика: количество реплик приложения автоматически увеличивается или уменьшается в зависимости от количества входящих HTTP-запросов. Сервис может масштабироваться до нуля реплик, когда трафик отсутствует, что позволяет экономить ресурсы.
  • Масштабирование на основе событий (KEDA): Azure Container Apps интегрирован с KEDA (Kubernetes Event-Driven Autoscaling) — открытым проектом, который позволяет масштабировать контейнеры на основе событий из различных источников: очередей (Azure Service Bus, RabbitMQ), баз данных (Azure Cosmos DB, PostgreSQL), мониторинга (Prometheus) и других. Например, приложение может масштабироваться в зависимости от длины очереди сообщений.
  • Масштабирование по расписанию: можно задать правило, которое будет поддерживать определённое количество реплик в заданные промежутки времени (например, увеличить количество реплик с 9:00 до 18:00).

Сеть и безопасность

Azure Container Apps поддерживает несколько способов управления входящим трафиком:

  • Внешний доступ (External): приложение доступно из интернета по публичному URL.
  • Внутренний доступ (Internal): приложение доступно только внутри виртуальной сети.
  • Пользовательские домены: возможность привязать собственный домен к приложению.
  • SSL/TLS: автоматическое управление сертификатами для HTTPS-соединений.
  • Входящие правила (Ingress): можно настроить правила маршрутизации трафика на основе HTTP-заголовков, путей и портов.

Для аутентификации и авторизации Azure Container Apps интегрирован с Azure Active Directory (Azure AD), а также поддерживает сторонние провайдеры (Facebook, Google, Microsoft Account) через встроенный прокси-сервер аутентификации.

Сравнение с другими сервисами Azure

Azure Container Apps vs Azure Kubernetes Service (AKS)

ХарактеристикаAzure Container AppsAzure Kubernetes Service (AKS)
Управление кластеромПолностью управляемый MicrosoftПользователь управляет узлами, сетью, обновлениями
СложностьНизкая (настройка через YAML или портал)Высокая (требуется знание Kubernetes)
МасштабированиеАвтоматическое, до нуляТребуется настройка HPA, VPA, Cluster Autoscaler
СтоимостьОплата за потреблённые ресурсы (CPU, память, сеть)Оплата за виртуальные машины (узлы) + управляемая плоскость
ГибкостьОграниченная (набор предопределённых функций)Высокая (полный доступ к API Kubernetes)
СценарииМикросервисы, API, веб-приложения, фоновые задачиСложные распределённые системы, stateful-приложения, кастомные контроллеры

Azure Container Apps vs Azure App Service

Azure App Service — это платформа для размещения веб-приложений, поддерживающая .NET, Java, Node.js, Python и другие языки. Основные отличия:

  • Контейнеризация: Azure Container Apps требует, чтобы приложение было упаковано в контейнер (Docker). Azure App Service может запускать как контейнеризированные, так и традиционные приложения (через код).
  • Масштабирование до нуля: Azure Container Apps может масштабироваться до нуля реплик, что невозможно в Azure App Service (всегда есть хотя бы одна реплика).
  • Событийное масштабирование: Azure Container Apps поддерживает KEDA, что делает его более подходящим для сценариев с обработкой событий (например, чтение из очередей).
  • Управление версиями: Azure Container Apps имеет встроенную поддержку ревизий, что упрощает развёртывание и откат.

Применение

Azure Container Apps подходит для широкого круга сценариев, где требуется быстрая разработка и развёртывание контейнеризированных приложений без управления инфраструктурой:

  • Микросервисы: развёртывание отдельных сервисов, которые взаимодействуют через HTTP или очереди.
  • API-серверы: создание RESTful или GraphQL API с автоматическим масштабированием под нагрузку.
  • Фоновые задачи и обработчики событий: приложения, которые запускаются по расписанию или при поступлении сообщений в очередь (например, обработка заказов, отправка уведомлений).
  • Веб-приложения: размещение фронтенд- и бэкенд-приложений, включая одностраничные приложения (SPA) и серверный рендеринг.
  • Приложения с переменной нагрузкой: сервисы, которые могут простаивать большую часть времени (например, ночью) и резко нагружаться в пиковые часы (например, интернет-магазины, системы бронирования).

Ограничения

Несмотря на широкие возможности, Azure Container Apps имеет ряд ограничений по сравнению с полным Kubernetes:

  • Отсутствие доступа к API Kubernetes: пользователь не может напрямую управлять Pod, Service, Deployment или другими ресурсами Kubernetes. Вся конфигурация осуществляется через специфический API Azure Container Apps.
  • Ограниченная поддержка stateful-приложений: сервис не поддерживает StatefulSets, PersistentVolumeClaims и другие механизмы для работы с состоянием. Для хранения данных рекомендуется использовать внешние сервисы (Azure SQL, Azure Cosmos DB, Azure Storage).
  • Ограниченная сетевая модель: поддержка сложных сетевых политик (Network Policies) и Service Mesh (например, Istio) недоступна.
  • Ограничения на размер контейнера: максимальный размер образа контейнера ограничен (обычно до 4 ГБ).
  • Региональная доступность: не все регионы Azure поддерживают Azure Container Apps на момент написания статьи.

Интересные факты

  • Azure Container Apps построен на базе Kubernetes, KEDA и Dapr (Distributed Application Runtime). Dapr предоставляет встроенные возможности для работы с состоянием, публикации/подписки на события, связывания сервисов и других шаблонов микросервисной архитектуры.
  • Сервис поддерживает GitOps через интеграцию с Azure DevOps и GitHub Actions, что позволяет автоматизировать развёртывание приложений.
  • Azure Container Apps является частью экосистемы Azure Arc, что позволяет запускать контейнеры не только в облаке Azure, но и на локальных или гибридных инфраструктурах.

Источники

  • Документация Microsoft Azure: «Azure Container Apps overview»
  • Microsoft Learn: «Introduction to Azure Container Apps»
  • Статья на портале Microsoft Azure: «Azure Container Apps: A serverless container service»
  • Блог Microsoft Azure: «Announcing the general availability of Azure Container Apps» (май 2022)
  • Официальная документация KEDA: «KEDA — Kubernetes Event-Driven Autoscaling»
  • Документация Dapr: «Dapr — Distributed Application Runtime»

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →