HardТеория2 min

Контейнерные решения Azure

Container Instances, Container Apps, Container Registry, multi-container groups

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

Azure Container Instances (ACI)

ACI -- самый простой способ запустить контейнер в Azure. Не нужно управлять серверами или кластерами. Контейнер запускается за секунды.

# Запуск одного контейнера
az container create \
  --resource-group rg-orderapp \
  --name order-api \
  --image myregistry.azurecr.io/order-api:latest \
  --cpu 1 --memory 1.5 \
  --ports 80 \
  --environment-variables \
    ConnectionString="Server=sql-orderapp.database.windows.net;..." \
    ASPNETCORE_ENVIRONMENT=Production \
  --ip-address public

Характеристики ACI:

  • Запуск за секунды, без предварительной настройки
  • Посекундная тарификация
  • Поддержка Linux и Windows контейнеров
  • До 4 vCPU и 16 GB RAM на группу контейнеров
  • Монтирование Azure Files для persistent storage

Multi-Container Groups

Группа контейнеров -- аналог Pod в Kubernetes. Контейнеры в группе разделяют сеть (localhost) и хранилище.

# deploy-aci.yaml
apiVersion: 2021-10-01
type: Microsoft.ContainerInstance/containerGroups
properties:
  osType: Linux
  containers:
    - name: order-api
      properties:
        image: myregistry.azurecr.io/order-api:latest
        ports:
          - port: 8080
        resources:
          requests:
            cpu: 1.0
            memoryInGb: 1.5
    - name: nginx-sidecar
      properties:
        image: nginx:latest
        ports:
          - port: 80
        resources:
          requests:
            cpu: 0.5
            memoryInGb: 0.5
  ipAddress:
    type: Public
    ports:
      - port: 80
az container create \
  --resource-group rg-orderapp \
  --file deploy-aci.yaml

Когда использовать ACI:

  • Batch-задачи и одноразовые операции
  • CI/CD агенты
  • Тестирование контейнеров
  • Простые микросервисы с sidecar-контейнерами

Azure Container Apps

Container Apps -- современный serverless-сервис для контейнеров. Построен на основе Kubernetes, но абстрагирует его сложность.

Ключевые преимущества:

  • Автомасштабирование до нуля (не платите, когда нет трафика)
  • Встроенный ingress-контроллер (HTTPS, custom domains)
  • Service discovery между контейнерами
  • Revisions для blue-green и canary деплоя
  • Поддержка Dapr для микросервисных паттернов
  • Масштабирование на основе событий (KEDA): HTTP-трафик, очереди, Cron
# Создание Container Apps Environment
az containerapp env create \
  --name env-orderapp \
  --resource-group rg-orderapp \
  --location westeurope

# Деплой приложения
az containerapp create \
  --name order-api \
  --resource-group rg-orderapp \
  --environment env-orderapp \
  --image myregistry.azurecr.io/order-api:latest \
  --target-port 8080 \
  --ingress external \
  --min-replicas 0 \
  --max-replicas 10 \
  --cpu 0.5 --memory 1.0Gi

Revisions и управление трафиком

Container Apps поддерживает несколько ревизий одновременно. Можно постепенно переключать трафик:

# Создание новой ревизии
az containerapp update \
  --name order-api \
  --resource-group rg-orderapp \
  --image myregistry.azurecr.io/order-api:v2

# Распределение трафика: 80% на v1, 20% на v2
az containerapp ingress traffic set \
  --name order-api \
  --resource-group rg-orderapp \
  --revision-weight order-api--v1=80 order-api--v2=20

Azure Container Registry (ACR)

ACR -- частный реестр Docker-образов в Azure. Интегрируется с ACI, Container Apps и AKS.

# Создание реестра
az acr create --name acrorderapp --resource-group rg-orderapp --sku Basic

# Сборка образа прямо в ACR (без локального Docker!)
az acr build --registry acrorderapp --image order-api:v1 .

# Включение admin-доступа (для быстрого тестирования)
az acr update --name acrorderapp --admin-enabled true

# Просмотр образов
az acr repository list --name acrorderapp --output table

SKU-уровни ACR:

SKU Storage Webhooks Geo-replication Private Link
Basic 10 GB 2 Нет Нет
Standard 100 GB 10 Нет Нет
Premium 500 GB 500 Да Да

ACR Tasks

ACR Tasks позволяет автоматизировать сборку образов:

# Автоматическая сборка при push в GitHub
az acr task create \
  --name build-order-api \
  --registry acrorderapp \
  --image order-api:{{.Run.ID}} \
  --context https://github.com/myorg/order-api.git \
  --file Dockerfile \
  --git-access-token $PAT

Сравнение контейнерных сервисов

Критерий ACI Container Apps AKS
Сложность Минимальная Средняя Высокая
Масштабирование Ручное Авто (до 0) Авто (cluster autoscaler)
Оркестрация Нет Встроенная Полный Kubernetes
Service mesh Нет Dapr (встроенный) Istio, Linkerd
Стоимость За контейнер/сек За vCPU + память За ноды
Сценарий Batch, тесты Микросервисы, API Сложные системы

Проверь себя

Какой контейнерный сервис Azure поддерживает автомасштабирование до нуля реплик?

Что такое Multi-Container Group в ACI?

Команда 'az acr build' позволяет:

Container Apps поддерживает постепенное переключение трафика между ревизиями. Как это называется?