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


Поддержка контейнеров Linux в Azure Functions

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

Функции также поддерживают развертывания контейнеризированных функциональных приложений. В контейнерном развертывании вы создаете свой собственный экземпляр приложения-функции в локальном контейнере Docker из поддерживаемого базового образа. Затем вы можете развернуть это контейнеризованное функциональное приложение в среде размещения на Azure. Создание собственного контейнера приложения-функции позволяет настраивать или управлять средой непосредственной среды выполнения кода функции.

Important

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

Команда Functions обязуется публиковать ежемесячные обновления для этих базовых образов. Регулярные обновления включают последние незначительные обновления версий и исправления безопасности для среды выполнения функций и языков. Необходимо регулярно обновлять контейнер из последнего базового образа и повторно развертывать обновленную версию контейнера. Дополнительные сведения см. в разделе "Обслуживание пользовательских контейнеров".

Параметры размещения контейнеров

Существует несколько вариантов размещения контейнерных приложений-функций в Azure:

Вариант размещения Benefits
Приложения контейнеров Azure Функции Azure обеспечивают интегрированную поддержку для разработки, развертывания и управления контейнеризованными приложениями-функциями на Azure Container Apps. Эта интеграция позволяет управлять приложениями с помощью одинаковых средств и страниц функций на портале Azure. Используйте приложения контейнеров Azure для размещения контейнера приложения-функции в той же среде, что и другие микрослужбы, API, веб-сайты, рабочие процессы или другие размещенные в контейнере программы. Хостинг контейнерных приложений позволяет запускать ваши функции в управляемой среде на основе Kubernetes с встроенной поддержкой мониторинга с открытым кодом, mTLS, Dapr и KEDA. Поддерживает масштабирование до нуля и предоставляет бессерверную модель размещения с оплатой за то, что вы используете. Вы также можете запросить выделенное оборудование, даже GPU, используя профили рабочей нагрузки. Рекомендуемый вариант размещения для контейнерных приложений-функций n Azure.
Кластеры Kubernetes с поддержкой Azure Arc (предварительная версия) Вы можете размещать свои приложения-функции в кластерах Kubernetes, поддерживающих Azure Arc, либо как развертывание, состоящее только из кода, либо в настраиваемом контейнере Linux. Azure Arc позволяет подключать кластеры Kubernetes, чтобы управлять и настраивать их в Azure. Размещение контейнеров Azure Functions в кластерах Kubernetes с поддержкой Azure Arc в настоящее время доступно в предварительной версии. Дополнительные сведения см. в статье "Работа с контейнерами и Функции Azure".
Функции Azure Вы можете разместить контейнерные приложения-функции в Функциях Azure, размещая контейнер в плане Elastic Premium или Выделенного Плана Службы Приложений. Используйте платформу Container Apps для расширенной поддержки контейнеров. Размещение плана "Премиум" обеспечивает преимущества динамического масштабирования. Вы можете использовать выделенный хостинг план для того, чтобы воспользоваться преимуществами существующих неиспользуемых ресурсов плана службы приложений.
Kubernetes Так как среда выполнения Функции Azure обеспечивает гибкость размещения, где и как хотите, можно размещать контейнеры приложений-функций и управлять ими непосредственно в кластерах Kubernetes. KEDA (управляемое событиями автоматическое масштабирование на основе Kubernetes) легко интегрируется со средой выполнения Функций Azure и инструментами для обеспечения масштабирования на основе событий в Kubernetes. Важный: Размещение контейнерных приложений-функций Kubernetes с помощью KEDA или прямого развертывания — это работа с открытым кодом, которую можно использовать бесплатно. Поддержка на основе принципа "лучших усилий" для этого сценария размещения предоставляется только участниками и сообществом. Вы несете ответственность за обслуживание собственных контейнеров приложений-функций в кластере, даже при развертывании их в службе Azure Kubernetes (AKS).

Сравнение поддержки функций

Степень поддержки различных функций и поведения Azure Functions при запуске функционального приложения в контейнере зависит от выбранного параметра размещения контейнера.

Feature/behavior Приложения-контейнеры (интегрированные) Контейнерные приложения (в прямом режиме) План "Премиум" Выделенный план Kubernetes
Поддержка продуктов Yes No Yes Yes No
Интеграция портала функций No No Yes Yes No
Масштабирование на основе событий Yes5 Да (правила масштабирования) Yes No No
Максимальный масштаб (экземпляры) 10001  10001  1002  10-303  Зависит от кластера
Экземпляры с масштабированием до нуля Yes Yes No No KEDA
Ограничение времени выполнения Unbounded6 Unbounded6 Unbounded7 Unbounded8 None
Развертывание основных средств No No No No func kubernetes 
Revisions Yes  Yes No No No
Слоты развертывания  No No Yes Yes No
Журналы потоковой передачи  Yes  Yes  Yes Yes No
Доступ к консоли  Yes  Yes Да (с помощью Kudu) Да (с помощью Kudu) Да (в модулях с использованием kubectl)
Минимизация последствий холодного запуска Минимальное количество копий Правила масштабирования  Всегда готовые и разогретые экземпляры  n/a n/a
Проверка подлинности службы приложений  Yes  Yes Yes Yes No
Личные доменные имена  Yes  Yes Yes Yes No
Сертификаты закрытого ключа  Yes  Yes Yes Yes No
Виртуальные сети Yes  Yes Yes Yes Yes
Зоны доступности Yes  Yes Yes Yes Yes
Diagnostics Yes  Yes Yes  Yes  No
Выделенное оборудование Да (профили рабочей нагрузки) Да (профили рабочей нагрузки) No Yes Yes
Выделенные графические процессоры Да (профили рабочей нагрузки) Да (профили рабочей нагрузки) No No Yes
Настраиваемое количество памяти и ЦП Yes Yes No No Yes
Параметр "Бесплатный грант" Yes Yes No No No
Сведения о ценах Выставление счетов за контейнерные приложения Выставление счетов за контейнерные приложения Выставление счетов за план "Премиум" Выставление счетов за выделенный план Цены на AKS
Требования к имени службы 2–32 символов: ограничено строчными буквами, цифрами и дефисами. Должен начинаться с буквы и заканчиваться буквенно-цифровым символом. 2–32 символов: ограничено строчными буквами, цифрами и дефисами. Должен начинаться с буквы и заканчиваться буквенно-цифровым символом. Менее 64 символов: ограничено буквенно-цифровыми символами и дефисами. Нельзя начинать или заканчивать слово дефисом. Менее 64 символов: ограничено буквенно-цифровыми символами и дефисами. Нельзя начинать или заканчивать слово дефисом. Менее 253 символов: ограничено буквенно-цифровыми символами и дефисами. Должен начинаться и заканчиваться буквенно-цифровым символом.
  1. В контейнерных приложениях по умолчанию используется 10 экземпляров, но можно задать максимальное количество реплик, которое имеет общее максимальное значение 1000. Этот параметр учитывается до тех пор, пока доступно достаточно квоты ядер. При создании приложения-функции из портала Azure вы ограничены до 300 экземпляров.
  2. В некоторых регионах приложения Linux в плане "Премиум" могут масштабироваться до 100 экземпляров. Дополнительную информацию см. в статье "План Премиум".
  3. К конкретным ограничениям для различных вариантов планов Службы приложений см. ограничения плана Службы приложений.
  4. Требуется KEDA; поддерживается большинством триггеров. Сведения о том, какие триггеры поддерживают масштабирование на основе событий, см. в разделе "Рекомендации по размещению контейнерных приложений".
  5. Если минимальное количество реплик равно нулю, время ожидания по умолчанию зависит от конкретных триггеров, используемых в приложении.
  6. Не применяется максимальное время ожидания выполнения. Однако льготный период, предоставленный выполнению функции, составляет 60 минут во время масштабирования, а льготный период 10 минут предоставляется во время обновлений платформы.
  7. Требуется, чтобы план службы приложений был настроен на Always On. Льготный период 10 минут предоставляется во время обновлений платформы.

Обслуживание пользовательских контейнеров

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

Команда Functions обязуется публиковать ежемесячные обновления для этих базовых образов. Регулярные обновления включают последние незначительные обновления версий и исправления безопасности для среды выполнения функций и языков. Необходимо регулярно обновлять контейнер из последнего базового образа и повторно развертывать обновленную версию контейнера.

Выберите базовый образ на основе стека языка, который вы используете в приложении-функции. В следующей таблице приведены примеры для каждого стека. Как правило, тег должен начинаться с 4- указания среды выполнения функций версии 4. При выпуске новых дополнительных версий этот тег будет обновлен, чтобы указать на новую версию. При периодическом перестроении пользовательского образа вы будете извлекать новые версии с помощью этого же тега, что позволяет приложению иметь те же обновления. Теги, указывающие дополнительные версии среды выполнения, не следует использовать, так как они не будут получать обновления, и ваше приложение потенциально останется в непатшированных версиях независимо от частоты перестроения пользовательского образа.

Языковой стек Пример рекомендуемых тегов базового образа
.NET (изолированная рабочая модель) mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 или
mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0-appservice

Эти примеры предназначены для .NET 8. Выберите подходящий образ для нужной вам версии .NET.
.NET (устаревшая внутрипроцессная модель) mcr.microsoft.com/azure-functions/dotnet:4-dotnet8.0 или
mcr.microsoft.com/azure-functions/dotnet:4-dotnet8.0-appservice

(Поддержка завершится для модели в процессе 10 ноября 2026 г. Вы должны перейти в изолированную рабочую модель как можно скорее.)
Ява mcr.microsoft.com/azure-functions/java:4-java21 или
mcr.microsoft.com/azure-functions/java:4-java21-appservice

(Эти примеры предназначены для Java 21. Выберите подходящий образ для нужной версии Java.)
Node.js (JavaScript или TypeScript) mcr.microsoft.com/azure-functions/node:4-node22 или
mcr.microsoft.com/azure-functions/node:4-node22-appservice

(Эти примеры нацелены на Node.js 22. Выберите подходящее изображение для версии Node.js, которая вам нужна.)
PowerShell mcr.microsoft.com/azure-functions/powershell:4-powershell7.4 или
mcr.microsoft.com/azure-functions/powershell:4-powershell7.4-appservice

(Эти примеры предназначены для PowerShell 7.4. Выберите подходящий образ для нужной версии PowerShell.)
Питон mcr.microsoft.com/azure-functions/python:4-python3.12 или
mcr.microsoft.com/azure-functions/python:4-python3.12-appservice

(Эти примеры предназначены для Python 3.12. Выберите подходящий образ для нужной версии Python.)
Пользовательские обработчики / другие mcr.microsoft.com/azure-functions/base:4 или
mcr.microsoft.com/azure-functions/base:4-appservice

Базовые образы, заканчивающиеся на -appservice, позволяют использовать SSH и удаленную отладку с платформы. Если вам не нужны эти возможности, можно использовать базовые образы без -appservice суффикса.

Important

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

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

В некоторых случаях необходимо внести изменения на уровне платформы, которые могут означать, что приложение в пользовательском контейнере с помощью старого базового образа может перестать работать должным образом. Для таких серьезных изменений мы развертываем обновленные образы задолго до изменений, чтобы приложения, которые получают регулярные обновления, не были негативно затронуты. Чтобы избежать потенциальных проблем с приложениями, работающими в пользовательских контейнерах, убедитесь, что вы не отстаёте от последней выпущенной минорной версии. Если в ходе обращения в службу поддержки мы определим, что ваше приложение испытывает проблемы из-за старой или неподдерживаемой версии, мы просим вас обновить контейнер до последней версии базового образа, прежде чем продолжать поддержку.

Начало работы

Используйте следующие ссылки, чтобы приступить к работе с Функции Azure в контейнерах Linux:

Я хочу... См. статью:
Создание первых контейнерных функций Создание приложения-функции в локальном контейнере Linux
Создание и развертывание функций в приложениях контейнеров Azure Создание первых контейнерных функций в приложениях контейнеров Azure
Создание и развертывание контейнерных функций для Функции Azure Создайте свои первые контейнеризованные функции Azure