Функции Azure в Kubernetes с KEDAAzure Functions on Kubernetes with KEDA

Среда выполнения Функций Azure обеспечивает гибкость при размещении в соответствии с вашими требованиями.The Azure Functions runtime provides flexibility in hosting where and how you want. KEDA (управляемое событиями автоматическое масштабирование на основе Kubernetes) легко интегрируется со средой выполнения Функций Azure и инструментами для обеспечения масштабирования на основе событий в Kubernetes.KEDA (Kubernetes-based Event Driven Autoscaling) pairs seamlessly with the Azure Functions runtime and tooling to provide event driven scale in Kubernetes.

Принципы работы функций на основе KubernetesHow Kubernetes-based functions work

Служба "Функции Azure" состоит из двух ключевых компонентов: среды выполнения и контроллера масштабирования.The Azure Functions service is made up of two key components: a runtime and a scale controller. Среда выполнения Функций запускает и выполняет код.The Functions runtime runs and executes your code. Среда выполнения включает в себя логику для активации, ведения журнала и управления выполнением функций.The runtime includes logic on how to trigger, log, and manage function executions. Среда выполнения Функций Azure может быть запущена где угодно.The Azure Functions runtime can run anywhere. Второй компонент — контроллер масштабирования.The other component is a scale controller. Контроллер масштабирования отслеживает скорость событий, предназначенных для функции, и заранее масштабирует количество экземпляров, в которых выполняется приложение.The scale controller monitors the rate of events that are targeting your function, and proactively scales the number of instances running your app. Дополнительные сведения см. в статье Масштабирование и размещение Функций Azure.To learn more, see Azure Functions scale and hosting.

Функции на основе Kubernetes предоставляют среду выполнения Функций в контейнере Docker с масштабированием на основе событий через KEDA.Kubernetes-based Functions provides the Functions runtime in a Docker container with event-driven scaling through KEDA. KEDA может уменьшать горизонтальный масштаб до 0 экземпляров (при отсутствии событий) или увеличивать его до n экземпляров.KEDA can scale in to 0 instances (when no events are occurring) and out to n instances. Это достигается за счет предоставления пользовательских метрик для средства автомасштабирования Kubernetes (средство горизонтального автомасштабирования pod).It does this by exposing custom metrics for the Kubernetes autoscaler (Horizontal Pod Autoscaler). Использование контейнеров Функций с KEDA позволяет реплицировать возможности бессерверных функций в любом кластере Kubernetes.Using Functions containers with KEDA makes it possible to replicate serverless function capabilities in any Kubernetes cluster. Эти функции также можно развернуть с помощью компонента виртуальных узлов Azure Kubernetes Services (AKS) для бессерверной инфраструктуры.These functions can also be deployed using Azure Kubernetes Services (AKS) virtual nodes feature for serverless infrastructure.

Управление KEDA и функциями в KubernetesManaging KEDA and functions in Kubernetes

Для запуска Функций в кластере Kubernetes необходимо установить компонент KEDA.To run Functions on your Kubernetes cluster, you must install the KEDA component. Этот компонент можно установить с помощью Azure Functions Core Tools.You can install this component using Azure Functions Core Tools.

Установка с помощью HelmInstalling with Helm

Существует несколько способов установки KEDA в любом кластере Kubernetes, включая Helm.There are various ways to install KEDA in any Kubernetes cluster including Helm. Варианты развертывания описаны на сайте KEDA.Deployment options are documented on the KEDA site.

Развертывание приложения-функции в KubernetesDeploying a function app to Kubernetes

Вы можете развернуть любое приложение-функцию в кластере Kubernetes с KEDA.You can deploy any function app to a Kubernetes cluster running KEDA. Так как функции выполняются в контейнере Docker, вашему проекту требуется Dockerfile.Since your functions run in a Docker container, your project needs a Dockerfile. Если у вас его еще нет, можно добавить Dockerfile, выполнив следующую команду в корне проекта Функций:If it doesn't already have one, you can add a Dockerfile by running the following command at the root of your Functions project:

func init --docker-only

Чтобы создать образ и развернуть функции в Kubernetes, выполните следующую команду:To build an image and deploy your functions to Kubernetes, run the following command:

Примечание

Core Tools будут использовать Docker CLI для создания и публикации образа.The Core Tools will leverage the docker CLI to build and publish the image. Убедитесь, что Docker уже установлен и подключен к вашей учетной записи с помощью docker login.Be sure to have docker installed already and connected to your account with docker login.

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

Замените <name-of-function-deployment> на имя приложения-функции.Replace <name-of-function-deployment> with the name of your function app.

При этом создается ресурс Deployment Kubernetes, ресурс ScaledObject и Secrets, который включает переменные среды, импортированные из файла local.settings.json.This creates a Kubernetes Deployment resource, a ScaledObject resource, and Secrets, which includes environment variables imported from your local.settings.json file.

Развертывание приложения-функции из частного реестраDeploying a function app from a private registry

Приведенный выше поток подходит и для частных реестров.The above flow works for private registries as well. Если вы извлекаете образ контейнера из частного реестра, включите флаг --pull-secret, который ссылается на секрет Kubernetes, содержащий учетные данные частного реестра при запуске func kubernetes deploy.If you are pulling your container image from a private registry, include the --pull-secret flag that references the Kubernetes secret holding the private registry credentials when running func kubernetes deploy.

Удаление приложения-функции из KubernetesRemoving a function app from Kubernetes

После развертывания можно удалить функцию, удалив связанный Deployment, ScaledObject, созданный Secrets.After deploying you can remove a function by removing the associated Deployment, ScaledObject, an Secrets created.

kubectl delete deploy <name-of-function-deployment>
kubectl delete ScaledObject <name-of-function-deployment>
kubectl delete secret <name-of-function-deployment>

Удаление KEDA из KubernetesUninstalling KEDA from Kubernetes

Действия по удалению KEDA описаны на сайте KEDA.Steps to uninstall KEDA are documented on the KEDA site.

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

KEDA поддерживает следующие триггеры Функций Azure:KEDA has support for the following Azure Function triggers:

Поддержка триггеров HTTPHTTP Trigger support

Вы можете использовать Функции Azure, которые предоставляют триггеры HTTP, но KEDA не управляет ими напрямую.You can use Azure Functions that expose HTTP triggers, but KEDA doesn't directly manage them. Вы можете использовать триггер Prometheus KEDA, чтобы масштабировать Функции Azure HTTP от 1 до n экземпляров.You can leverage the KEDA prometheus trigger to scale HTTP Azure Functions from 1 to n instances.

Next StepsNext Steps

Для получения дополнительных сведений см. следующие ресурсы:For more information, see the following resources: