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.

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. Você pode instalar esse componente usando Azure Functions Core Tools.

Instalação com Helm

Há várias maneiras de instalar o KEDA em qualquer cluster do Kubernetes, incluindo 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 suas funções são executadas em um contêiner do Docker, seu projeto precisa de um Dockerfile. Se ele ainda não tiver um, você poderá adicionar um Dockerfile executando o seguinte comando na raiz do seu projeto do Functions:

Observação

O Core Tools cria automaticamente o Dockerfile para funções do Azure escritas em .NET, Node, Python ou PowerShell. Para aplicativos de funções escritos em Java, o Dockerfile deve ser criado manualmente. Use a lista de imagens do Azure Functions a fim de localizar a imagem correta para basear a função do Azure.

func init --docker-only

Para criar uma imagem e implantar suas funções no Kubernetes, execute o seguinte comando:

Observação

As ferramentas principais aproveitarão a CLI do Docker para criar e publicar a imagem. Verifique se o Docker já está instalado e conectado à sua conta com docker login.

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

Substitua <name-of-function-deployment> pelo nome do aplicativo de funções.

O comando deploy executa uma série de ações:

  1. O Dockerfile criado anteriormente é usado para criar uma imagem local para o aplicativo de funções.
  2. A imagem local é marcada e enviada por push para o registro de contêiner em que o usuário está conectado.
  3. Um manifesto é criado e aplicado ao cluster que define um recurso Deployment do Kubernetes, um recurso ScaledObject e Secrets, que inclui as variáveis de ambiente importadas do seu arquivo local.settings.json.

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

As etapas para desinstalar o KEDA são documentadas no site do KEDA.

Gatilhos com suporte no KEDA

O KEDA tem suporte para os seguintes gatilhos do Azure Functions:

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: