Функции Azure в Kubernetes с KEDA

Среда выполнения Функций Azure обеспечивает гибкость при размещении в соответствии с вашими требованиями. KEDA (управляемое событиями автоматическое масштабирование на основе Kubernetes) легко интегрируется со средой выполнения Функций Azure и инструментами для обеспечения масштабирования на основе событий в Kubernetes.

Принципы работы функций на основе Kubernetes

Служба "Функции Azure" состоит из двух ключевых компонентов: среды выполнения и контроллера масштабирования. Среда выполнения Функций запускает и выполняет код. Среда выполнения включает в себя логику для активации, ведения журнала и управления выполнением функций. Среда выполнения Функций Azure может быть запущена где угодно. Второй компонент — контроллер масштабирования. Контроллер масштабирования отслеживает скорость событий, предназначенных для функции, и заранее масштабирует количество экземпляров, в которых выполняется приложение. Дополнительные сведения см. в статье Масштабирование и размещение Функций Azure.

Функции на основе Kubernetes предоставляют среду выполнения Функций в контейнере Docker с масштабированием на основе событий через KEDA. KEDA может уменьшать горизонтальный масштаб до 0 экземпляров (при отсутствии событий) или увеличивать его до 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 для создания проекта. Если вы забыли это сделать, вы всегда можете снова выполнить вызов func init из корня проекта Функций, на этот раз указав параметр --docker-only, как показано в следующем примере.

func init --docker-only

Дополнительные сведения о создании Dockerfile доступны в справочных материалах func init.

Чтобы создать образ и развернуть функции в Kubernetes, выполните следующую команду:

func kubernetes deploy --name <name-of-function-deployment> --registry <container-registry-username>

В нашем примере замените <name-of-function-deployment> именем реального приложения-функции.

Команда deploy выполняет следующие действия:

  1. Созданный ранее Dockerfile используется для сборки локального образа для приложения-функции.
  2. Локальный образ помечается и передается в реестр контейнеров, где пользователь вошел в систему.
  3. Манифест создается и применяется к кластеру, который определяет ресурсы Kubernetes Deployment, ScaledObject и Secrets, включая переменные среды, импортированные из вашего файла local.settings.json.

Дополнительные сведения см. в описании команды func kubernetes deploy.

Развертывание приложения-функции из частного реестра

Приведенный выше поток подходит и для частных реестров. Если вы извлекаете образ контейнера из частного реестра, включите флаг --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 из кластера можно одним из следующих способов:

Поддерживаемые триггеры в KEDA

KEDA поддерживает следующие триггеры Функций Azure:

Поддержка триггеров HTTP

Вы можете использовать Функции Azure, которые предоставляют триггеры HTTP, но KEDA не управляет ими напрямую. Вы можете использовать триггер Prometheus KEDA, чтобы масштабировать Функции Azure HTTP от 1 до n экземпляров.

Next Steps

Для получения дополнительных сведений см. следующие ресурсы: