Azure Functions no Kubernetes com KEDA
O tempo de execução do Azure Functions fornece flexibilidade na hospedagem onde e como você deseja. O KEDA (Event Driven Autoscaling baseado em Kubernetes) combina perfeitamente com o tempo de execução e as ferramentas do Azure Functions para fornecer escala orientada a eventos no Kubernetes.
Importante
Executar seus aplicativos de função em contêineres no Kubernetes, seja usando KEDA ou por implantação direta, é um esforço de código aberto que você pode usar gratuitamente. O suporte de melhor esforço é fornecido por colaboradores e pela comunidade usando problemas do GitHub no repositório do Azure Functions. Use esses problemas para relatar bugs e levantar solicitações de recursos.
Para implantações Kubernetes totalmente suportadas, considere o Azure Container Apps hospedagem do Azure Functions.
Como funcionam as funções baseadas no Kubernetes
O serviço Azure Functions é composto por dois componentes principais: um tempo de execução e um controlador de escala. O tempo de execução do Functions é executado e executa seu código. O tempo de execução inclui lógica sobre como disparar, registrar e gerenciar execuções de função. O tempo de execução do Azure Functions pode ser executado em qualquer lugar. O outro componente é um controlador de escala. O controlador de escala monitora a taxa de eventos direcionados à sua função e dimensiona proativamente o número de instâncias que executam seu aplicativo. Para saber mais, consulte Dimensionamento e hospedagem do Azure Functions.
As funções baseadas em Kubernetes fornecem o tempo de execução das funções em um contêiner do Docker com escalonamento controlado por eventos por meio do KEDA. O KEDA pode ser dimensionado para zero instâncias (quando nenhum evento está ocorrendo) e para n instâncias. Ele faz isso expondo métricas personalizadas para o autoscaler do Kubernetes (Horizontal Pod Autoscaler). O uso de contêineres do Functions com o KEDA torna possível replicar recursos de função sem servidor em qualquer cluster do Kubernetes. Essas funções também podem ser implantadas usando o recurso de nós virtuais do Azure Kubernetes Services (AKS) para infraestrutura sem servidor.
Gerenciando KEDA e funções no Kubernetes
Para executar o Functions no cluster do Kubernetes, você deve instalar o componente KEDA. Você pode instalar esse componente de uma das seguintes maneiras:
Ferramentas Principais do Azure Functions: usando o
func kubernetes install
comando.Helm: há várias maneiras de instalar o KEDA em qualquer cluster Kubernetes, incluindo o Helm. As opções de implantação estão documentadas no site da KEDA.
Implantando um aplicativo de função no Kubernetes
Você pode implantar qualquer aplicativo de função em um cluster Kubernetes executando o KEDA. Como suas funções são executadas em um contêiner do Docker, seu projeto precisa de um Dockerfile. Você pode criar um Dockerfile usando a --docker
opção ao chamar func init
para criar o projeto. Se você esqueceu de criar seu Dockerfile, você sempre pode chamar func init
novamente a partir da raiz do seu projeto de código.
(Opcional) Se você precisar criar seu Dockerfile, use o
func init
comando com a--docker-only
opção:func init --docker-only
Para saber mais sobre a geração do Dockerfile, consulte a
func init
referência.Use o
func kubernetes deploy
comando para criar sua imagem e implantar seu aplicativo de função em contêiner no Kubernetes:func kubernetes deploy --name <name-of-function-deployment> --registry <container-registry-username>
Neste exemplo, substitua
<name-of-function-deployment>
pelo nome do seu aplicativo de função. O comando deploy executa estas tarefas:- O Dockerfile criado anteriormente é usado para criar uma imagem local para seu aplicativo de função em contêiner.
- A imagem local é marcada e enviada por push para o registro de contêiner onde o usuário está conectado.
- Um manifesto é criado e aplicado ao cluster que define um recurso do Kubernetes
Deployment
, umScaledObject
recurso eSecrets
, que inclui variáveis de ambiente importadas do seulocal.settings.json
arquivo.
Implantando um aplicativo de função a partir de um registro privado
As etapas de implantação anteriores também funcionam para registros privados. Se você estiver extraindo sua imagem de contêiner de um registro privado, inclua o sinalizador que faz referência ao --pull-secret
segredo do Kubernetes que contém as credenciais do registro privado ao executar func kubernetes deploy
o .
Removendo um aplicativo de função do Kubernetes
Após a implantação, você pode remover uma função removendo o associado Deployment
, ScaledObject
, um Secrets
criado.
kubectl delete deploy <name-of-function-deployment>
kubectl delete ScaledObject <name-of-function-deployment>
kubectl delete secret <name-of-function-deployment>
Desinstalando o KEDA do Kubernetes
Você pode remover o KEDA do cluster de uma das seguintes maneiras:
Ferramentas Principais do Azure Functions: usando o
func kubernetes remove
comando.Leme: veja as etapas de desinstalação no site KEDA.
Gatilhos suportados no KEDA
O KEDA tem suporte para os seguintes gatilhos do Azure Function:
- Filas de Armazenamento do Azure
- Azure Service Bus
- Evento do Azure / Hubs IoT
- Apache Kafka
- Fila RabbitMQ
Suporte a HTTP Trigger
Você pode usar o Azure Functions que expõe gatilhos HTTP, mas o KEDA não os gerencia diretamente. Você pode usar o gatilho KEDA prometheus para dimensionar o HTTP Azure Functions de uma para n
instâncias.
Passos Seguintes
Para obter mais informações, consulte os seguintes recursos: