Partilhar via


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. Para implantações gerenciadas do Kubernetes, considere os 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 --docker-only opção, como mostrado no exemplo a 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 --pull-secret segredo do Kubernetes que contém as credenciais do registro privado ao executar func kubernetes deployo .

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:

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: