Функции Azure в Kubernetes с KEDA
Среда выполнения Функций Azure обеспечивает гибкость при размещении в соответствии с вашими требованиями. KEDA (управляемое событиями автоматическое масштабирование на основе Kubernetes) легко интегрируется со средой выполнения Функций Azure и инструментами для обеспечения масштабирования на основе событий в Kubernetes.
Внимание
Запуск контейнерных приложений-функций в Kubernetes с помощью KEDA или прямого развертывания — это работа с открытым кодом, которую можно использовать бесплатно. Поддержка лучших усилий предоставляется участниками и сообществом с помощью проблем GitHub в репозитории Функции Azure. Используйте эти проблемы, чтобы сообщить об ошибках и вызвать запросы на функции.
Для полностью поддерживаемых развертываний Kubernetes вместо этого рассмотрите возможность размещения приложений контейнеров Azure Функции Azure.
Принципы работы функций на основе Kubernetes
Служба "Функции Azure" состоит из двух ключевых компонентов: среды выполнения и контроллера масштабирования. Среда выполнения Функций запускает и выполняет код. Среда выполнения включает в себя логику для активации, ведения журнала и управления выполнением функций. Среда выполнения Функций Azure может быть запущена где угодно. Второй компонент — контроллер масштабирования. Контроллер масштабирования отслеживает скорость событий, предназначенных для функции, и заранее масштабирует количество экземпляров, в которых выполняется приложение. Дополнительные сведения см. в статье Масштабирование и размещение Функций Azure.
Функции на основе Kubernetes предоставляют среду выполнения Функций в контейнере Docker с масштабированием на основе событий через KEDA. KEDA может масштабироваться до нуля экземпляров (если события не происходят) и выходить на n экземпляров. Это достигается за счет предоставления пользовательских метрик для средства автомасштабирования Kubernetes (средство горизонтального автомасштабирования pod). Использование контейнеров Функций с KEDA позволяет реплицировать возможности бессерверных функций в любом кластере Kubernetes. Эти функции также можно развернуть с помощью компонента виртуальных узлов Azure Kubernetes Services (AKS) для бессерверной инфраструктуры.
Управление KEDA и функциями в Kubernetes
Для запуска Функций в кластере Kubernetes необходимо установить компонент KEDA. Данный компонент можно установить одним из следующих способов.
Azure Functions Core Tools: с помощью команды
func kubernetes install
.Helm: существует несколько способов установки KEDA в любом кластере Kubernetes, включая Helm. Варианты развертывания описаны на сайте KEDA.
Развертывание приложения-функции в Kubernetes
Вы можете развернуть любое приложение-функцию в кластере Kubernetes с KEDA. Так как функции выполняются в контейнере Docker, вашему проекту требуется Dockerfile. Можно создать Dockerfile с помощью параметра --docker
, указываемого при вызове func init
для создания проекта. Если вы забыли создать Dockerfile, вы всегда можете снова вызвать func init
из корневого каталога проекта кода.
(Необязательно) Если вам нужно создать Dockerfile, используйте
func init
команду с параметром--docker-only
:func init --docker-only
Дополнительные сведения о создании Dockerfile доступны в справочных материалах
func init
.func kubernetes deploy
Используйте команду для создания образа и развертывания контейнерного приложения-функции в Kubernetes:func kubernetes deploy --name <name-of-function-deployment> --registry <container-registry-username>
В нашем примере замените
<name-of-function-deployment>
именем реального приложения-функции. Команда развертывания выполняет следующие задачи:- Файл Dockerfile, созданный ранее, используется для создания локального образа для контейнерного приложения-функции.
- Локальный образ помечается и передается в реестр контейнеров, где пользователь вошел в систему.
- Манифест создается и применяется к кластеру, который определяет ресурсы Kubernetes
Deployment
,ScaledObject
иSecrets
, включая переменные среды, импортированные из вашего файлаlocal.settings.json
.
Развертывание приложения-функции из частного реестра
Предыдущие шаги развертывания также работают для частных реестров. Если вы извлекаете образ контейнера из частного реестра, включите --pull-secret
флаг, который ссылается на секрет Kubernetes, содержащий учетные данные частного реестра при запуске func kubernetes deploy
.
Удаление приложения-функции из Kubernetes
После развертывания можно удалить функцию, удалив связанный Deployment
, ScaledObject
, созданный Secrets
.
kubectl delete deploy <name-of-function-deployment>
kubectl delete ScaledObject <name-of-function-deployment>
kubectl delete secret <name-of-function-deployment>
Удаление KEDA из Kubernetes
Удалить KEDA из кластера можно одним из следующих способов:
Azure Functions Core Tools: с помощью команды
func kubernetes remove
.Helm: действия по удалению приведены на сайте KEDA.
Поддерживаемые триггеры в KEDA
KEDA поддерживает следующие триггеры Функций Azure:
- Очереди службы хранилища Azure
- Служебная шина Azure
- Центр событий Azure/Центр Интернета вещей
- Apache Kafka
- Очередь RabbitMQ
Поддержка триггеров HTTP
Вы можете использовать Функции Azure, которые предоставляют триггеры HTTP, но KEDA не управляет ими напрямую. Триггер KEDA prometheus можно использовать для масштабирования HTTP-Функции Azure от одного до n
экземпляров.
Next Steps
Дополнительные сведения см. на следующих ресурсах: