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. As implantações de aplicativos de função em contêineres para Aplicativos de Contêiner do Azure, que são executados em clusters Kubernetes gerenciados no Azure, estão atualmente em versão prévia. Para obter mais informações, consulte Aplicativos de Contêiner do Azure que hospedam o 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:

  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.

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:

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: