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:

  1. O Dockerfile criado anteriormente é usado para criar uma imagem local para o aplicativo de função.
  2. A imagem local é marcada e enviada por push para o registro de contêiner onde o usuário está conectado.
  3. Um manifesto é criado e aplicado ao cluster que define um recurso do Kubernetes Deployment , um ScaledObject recurso e Secrets, que inclui variáveis de ambiente importadas do seu local.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 deployo --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, , ScaledObjectum 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:

Gatilhos suportados no KEDA

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

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: