0Pricing
Azure Fundamentals · Урок

Azure Container Instances

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

«Azure Container Instances» — бесплатный урок Azure Fundamentals на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Azure Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Azure Fundamentals содержит 4 уроков всего.

Что такое Azure Container Instances?

Azure Container Instances (ACI) — это самый быстрый способ запустить рабочую нагрузку в контейнере в Azure без управления серверами или оркестраторами. Вы предоставляете образ контейнера, а Azure запускает его за считаные секунды на общей многопользовательской инфраструктуре. ACI идеально подходит для краткосрочных задач, пакетных заданий, агентов сборки и рабочих нагрузок, управляемых событиями, когда запуск полноценного кластера Kubernetes был бы избыточным.

Создание Container Instance

Запустите контейнер ACI с помощью одной команды az container create. Укажите образ, группу ресурсов, CPU и память. ACI загружает образ, выделяет ресурсы и запускает контейнер — обычно в течение 5–10 секунд. Каждая Container Instance получает уникальное полное доменное имя (FQDN), если Вы назначите метку имени DNS, благодаря чему к ней сразу можно получить доступ из интернета.

# Run an Nginx container accessible from the internet
az container create \
  --name my-nginx \
  --resource-group MyRG \
  --image nginx:latest \
  --cpu 1 \
  --memory 1 \
  --dns-name-label my-nginx-demo \
  --ports 80

# Access at: http://my-nginx-demo.<region>.azurecontainer.io

Переменные среды и защищённые значения

Передавайте конфигурацию контейнерам ACI с помощью переменных среды, указываемых во время создания. Для конфиденциальных значений, таких как ключи API или пароли, используйте защищённые переменные среды — после развертывания они не отображаются на портале Azure или в выводе CLI, что предотвращает их случайное раскрытие в журналах и журналах аудита. При этом во время выполнения защищённые значения доступны внутри контейнера как обычные переменные среды.

# Pass regular and secure environment variables
az container create \
  --name my-app \
  --resource-group MyRG \
  --image mycontainerregistry.azurecr.io/myapp:v1.0 \
  --environment-variables APP_ENV=production \
  --secure-environment-variables \
    DATABASE_PASSWORD='super-secret-password' \
    API_KEY='my-api-key'

# View logs from the running container
az container logs --name my-app --resource-group MyRG

Выставление счетов и распределение ресурсов ACI

ACI тарифицируется посекундно с учётом выделенных ядер CPU и объёма памяти в GB; минимальный период тарификации отсутствует. Вы платите только во время работы контейнера — как только он останавливается, тарификация прекращается. Поэтому ACI особенно выгоден для краткосрочных рабочих нагрузок. Для каждой группы контейнеров можно выделить от 0,1 до 4 ядер CPU и от 0,1 до 16 GB памяти в поддерживаемых сочетаниях.

# Small: 0.5 CPU, 0.5 GB memory
az container create --name small-task --resource-group MyRG \
  --image my-batch-image:latest --cpu 0.5 --memory 0.5 \
  --restart-policy Never  # Don't restart after completion

# Large: 4 CPU, 16 GB memory for intensive tasks
az container create --name ml-inference --resource-group MyRG \
  --image ml-model:latest --cpu 4 --memory 16

Политики перезапуска

ACI поддерживает три политики перезапуска, которые определяют поведение контейнера после завершения работы. Always (по умолчанию) перезапускает контейнер при каждом завершении — этот вариант подходит для постоянно работающих служб. Never запускает контейнер один раз и оставляет его в завершённом состоянии — это удобно для пакетных заданий. OnFailure перезапускает контейнер только при завершении с ненулевым кодом выхода — такой вариант полезен для повторных попыток при ошибках.

# Batch job: run once, never restart
az container create \
  --name data-processor \
  --resource-group MyRG \
  --image my-batch-image:latest \
  --restart-policy Never \
  --environment-variables BATCH_DATE=2025-01-01

# Check the container's final state
az container show \
  --name data-processor \
  --resource-group MyRG \
  --query '{state:instanceView.state, exitCode:instanceView.currentState.exitCode}'

Группы контейнеров: развертывание нескольких контейнеров

Группа контейнеров — это набор контейнеров с общими временем существования, сетью и хранилищем; по смыслу она похожа на Pod Kubernetes. Контейнеры в одной группе используют общий локальный IP-адрес и пространство имён портов, поэтому могут взаимодействовать через localhost. Распространённый вариант — основной контейнер приложения и контейнер sidecar, например агент ведения журналов или прокси, в одной группе, описанной с помощью шаблона YAML или ARM.

# multi-container.yaml
apiVersion: '2021-09-01'
location: eastus
name: my-container-group
properties:
  containers:
  - name: app
    properties:
      image: myapp:v1.0
      ports: [{port: 80}]
      resources: {requests: {cpu: 1, memoryInGb: 1}}
  - name: log-forwarder
    properties:
      image: fluent-bit:latest
      resources: {requests: {cpu: 0.5, memoryInGb: 0.5}}
  osType: Linux
  restartPolicy: Always
type: Microsoft.ContainerInstance/containerGroups

# Deploy from YAML
# az container create --resource-group MyRG --file multi-container.yaml

Подключение томов: интеграция с Azure Files

По умолчанию контейнеры ACI не сохраняют состояние: данные, записанные в файловую систему контейнера, теряются при его перезапуске. Подключите общую папку Azure Files как том, чтобы сохранять данные после перезапуска контейнера или обмениваться ими между контейнерами в одной группе. При создании Container Instance укажите имя учётной записи хранения, ключ и имя общей папки.

# Mount an Azure Files share for persistent storage
az container create \
  --name stateful-app \
  --resource-group MyRG \
  --image myapp:v1.0 \
  --azure-file-volume-account-name mystorageaccount \
  --azure-file-volume-account-key '<storage-account-key>' \
  --azure-file-volume-share-name myfileshare \
  --azure-file-volume-mount-path /data

# Data written to /data persists in the Azure Files share

Container Instances с GPU

ACI поддерживает Container Instances с GPU (K80, V100) для вывода моделей машинного обучения, обработки видео и научных вычислений. Экземпляры с GPU доступны в отдельных регионах и требуют контейнеров Linux. Они тарифицируются за GPU/секунду, поэтому экономичны для сценариев пакетного вывода: Вы запускаете контейнер с GPU, выполняете модель и сразу удаляете контейнер — это значительно дешевле, чем выделенная GPU VM, работающая круглосуточно.

# Create a GPU-enabled container instance
az container create \
  --name gpu-inference \
  --resource-group MyRG \
  --image my-ml-model:latest \
  --gpu-count 1 \
  --gpu-sku V100 \
  --cpu 4 \
  --memory 16 \
  --os-type Linux

ACI с Virtual Network

Разверните группы контейнеров ACI в выделенной подсети внутри VNet, чтобы назначить им частные IP-адреса и разрешить доступ к другим ресурсам, подключённым к VNet (базам данных, VM), без публикации этих ресурсов в интернете. Для ACI, интегрированной с VNet, требуется выделенная делегированная подсеть (делегированная в Microsoft.ContainerInstance/containerGroups), и назначение общедоступного IP-адреса не поддерживается.

# Create an ACI container in a VNet
az container create \
  --name private-task \
  --resource-group MyRG \
  --image myapp:v1.0 \
  --vnet MyVNet \
  --subnet ContainerSubnet \
  --restart-policy Never

# The container gets a private IP from the subnet CIDR
# It can reach VNet resources (SQL, Redis, VMs) on private IPs

ACI в качестве виртуального узла Kubernetes

ACI интегрируется с AKS как виртуальный узел через проект с открытым исходным кодом Virtual Kubelet. Когда кластер AKS испытывает резкий рост нагрузки, превышающий вместимость его узлов VM, Kubernetes может запланировать Pod на виртуальном узле ACI, запустив реальные Container Instances ACI. Это обеспечивает неограниченное масштабирование при всплесках нагрузки без предварительного выделения дополнительных узлов VM; Вы платите только за вычислительные ресурсы ACI в период всплеска.

# Enable virtual nodes on an AKS cluster
az aks enable-addons \
  --name myAKSCluster \
  --resource-group MyRG \
  --addons virtual-node \
  --subnet-name VirtualNodeSubnet

# Schedule a burst pod on ACI via node selector
# spec:
#   nodeSelector:
#     kubernetes.io/role: agent
#     beta.kubernetes.io/os: linux
#     type: virtual-kubelet
#   tolerations:
#   - key: virtual-kubelet.io/provider
#     operator: Exists

Когда использовать ACI, AKS и App Service

Выбирайте ACI для краткосрочных задач, пакетных заданий, агентов сборки CI и разовых контейнеров, когда накладные расходы Kubernetes не нужны. Выбирайте AKS для постоянно работающих микрослужб из нескольких контейнеров, которым требуются обнаружение служб, проверки работоспособности, поэтапные обновления и кластерная сеть. Выбирайте App Service, если Вам нужны удобства PaaS (слоты развертывания, управляемые сертификаты, встроенная аутентификация) без самостоятельного управления сетью контейнеров.

Быстрая проверка

Проверьте своё понимание концепций Microsoft Azure Fundamentals (AZ-900), изученных в этом уроке.

Итоги урока

В этом уроке Вы узнали, что Azure Container Instances запускает контейнеры за считаные секунды без управления серверами и тарифицируется посекундно за CPU и память, группы контейнеров позволяют нескольким контейнерам совместно использовать сеть и хранилище подобно Pod Kubernetes, а политики перезапуска (Always, Never, OnFailure) управляют жизненным циклом контейнера после завершения работы. Далее мы рассмотрим концепции Kubernetes для Azure.

Часто задаваемые вопросы

Урок «Azure Container Instances» бесплатный?

Да — полный текст урока «Azure Container Instances» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Azure Fundamentals, подпишись на CoddyKit PRO. Курс Azure Fundamentals содержит 4 уроков всего.

Чему я научусь в уроке «Azure Container Instances»?

Запускайте контейнеризированное приложение за считаные секунды с помощью ACI без управления серверами, настраивайте переменные среды и подключения томов и изучайте тарификацию ACI. Ты практикуешь Azure Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Azure Fundamentals?

Предыдущий опыт не требуется. Azure Fundamentals на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Azure Container Instances»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Azure Fundamentals?

Да. Каждый урок Azure Fundamentals включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Azure Container Registry
  2. Azure Container Instances
  3. Основы Kubernetes для Azure
  4. Развертывание рабочих нагрузок в AKS
← Назад к Azure Fundamentals