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. As implantações de aplicativos de função em contêineres para Aplicativos de Contêiner do Azure, que são executadas em clusters Kubernetes gerenciados no Azure, estão atualmente em visualização. Para obter mais informações, consulte Aplicativos de contêiner do Azure hospedando o 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 0 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 fazer isso, você sempre pode chamar func init
novamente a partir da raiz do seu projeto Functions, desta vez usando a opção, como mostrado no exemplo a --docker-only
seguir.
func init --docker-only
Para saber mais sobre a geração do Dockerfile, consulte a func init
referência.
Para criar uma imagem e implantar suas funções no Kubernetes, execute o seguinte comando:
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 faz o seguinte:
- O Dockerfile criado anteriormente é usado para criar uma imagem local para o aplicativo de função.
- 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.
Para saber mais, consulte o func kubernetes deploy
comando.
Implantando um aplicativo de função a partir de um registro privado
O fluxo acima também funciona para registros privados. Se você estiver extraindo sua imagem de contêiner de um registro privado, inclua o sinalizador que faz referência ao segredo do Kubernetes que contém as credenciais do registro privado ao executar func kubernetes deploy
o --pull-secret
.
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 aproveitar o gatilho KEDA prometheus para dimensionar o HTTP Azure Functions de 1 para n instâncias.
Passos Seguintes
Para obter mais informações, consulte os seguintes recursos: