Azure Functions em Kubernetes com KEDA
O tempo de execução do Azure Functions fornece flexibilidade na hospedagem onde e como você deseja. KEDA (dimensionamento automático controlado por eventos baseado em Kubernetes) funciona perfeitamente com o tempo de execução e as ferramentas do Azure Functions a fim de fornecer um dimensionamento controlado por eventos em Kubernetes.
Importante
Executar seus aplicativos de funções em contêineres no Kubernetes, 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 esse espaço para relatar bugs e gerar solicitações de recursos. Quanto às implantações gerenciadas do Kubernetes, em vez disso, considere a Hospedagem de Aplicativos de Contêiner do Azure do Azure Functions.
Como trabalham as funções baseadas em Kubernetes
O serviço do 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 a 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 que estão direcionando sua função e dimensiona de forma proativa o número de instâncias que executam seu aplicativo. Para saber mais, confira Escala e hospedagem do Azure Functions.
As funções baseadas em Kubernetes fornecem o tempo de execução do Functions em um contêiner do Docker com dimensionamento controlado por eventos por meio de KEDA. 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 dimensionador automático do Kubernetes (Dimensionador automático de pod horizontal). O uso de contêineres do Functions com KEDA permite replicar recursos de função sem servidor em qualquer cluster de Kubernetes. Essas funções também podem ser implantadas usando o recurso nós virtuais do AKS (Serviços de Kubernetes do Azure) para a infraestrutura sem servidor.
Como gerenciar KEDA e Functions no Kubernetes
Para executar Functions em seu cluster do Kubernetes, você deverá instalar o componente KEDA. É possível instalar esse componente com uma das seguintes maneiras:
Azure Functions Core Tools: usando o
func kubernetes install
comando.Helm: há várias maneiras de instalar o KEDA em qualquer cluster do Kubernetes, incluindo o Helm. As opções de implantação estão documentadas no site do KEDA.
Implantação de um aplicativo de funções no Kubernetes
Você pode implantar qualquer aplicativo de funções em um cluster do Kubernetes que executa o KEDA. Como as funções são executadas em um contêiner do Docker, o projeto precisará de um Dockerfile. É possível criar um Dockerfile usando a --docker
opção ao chamar func init
para criar o projeto. Caso não tenha feito isso, você sempre poderá chamar func init
novamente pela raiz do projeto do Functions, mas, desta vez, usando a opção --docker-only
, conforme mostrado no exemplo a seguir.
func init --docker-only
Para saber mais sobre a geração do Dockerfile, consulte a referência func init
.
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 de seu aplicativo de funções.
O comando da implantação faz o seguinte:
- O Dockerfile criado anteriormente é usado para criar uma imagem local para o aplicativo de funções.
- A imagem local é marcada e enviada por push para o registro de contêiner em que o usuário está conectado.
- Um manifesto é criado e aplicado ao cluster que define um recurso
Deployment
do Kubernetes, um recursoScaledObject
eSecrets
, que inclui as variáveis de ambiente importadas do seu arquivolocal.settings.json
.
Para saber mais, consulte o comando func kubernetes deploy
.
Implantação de um aplicativo de funções a partir de um registro privado
O fluxo acima também funciona para registros privados. Se você estiver extraindo a imagem do contêiner de um registro privado, inclua o sinalizador --pull-secret
que faz referência ao segredo do Kubernetes que contém as credenciais do registro particular ao executar o func kubernetes deploy
.
Remoção de um aplicativo de funções do Kubernetes
Depois de implantar, você poderá remover uma função removendo o Deployment
associado, 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>
Desinstalação do KEDA do Kubernetes
É possível remover o KEDA do cluster com uma das seguintes maneiras:
Azure Functions Core Tools: usando o
func kubernetes remove
comando.Helm: consulte as etapas de desinstalação no site do KEDA.
Gatilhos com suporte no KEDA
O KEDA tem suporte para os seguintes gatilhos do Azure Functions:
- Filas de Armazenamento do Azure
- Barramento de Serviço do Azure
- Hubs de evento/IoT do Azure
- Apache Kafka
- Fila RabbitMQ
Suporte ao gatilho HTTP
Você pode usar o Azure Functions que expõem gatilhos HTTP, mas o KEDA não os gerencia diretamente. Você pode aproveitar o gatilho KEDA prometheus para dimensionar o Azure Functions de HTTP de 1 para n instâncias.
Próximas etapas
Para saber mais, consulte os recursos a seguir: