Partilhar via


Funções do Azure 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 ao melhor nível possível é fornecido por colaboradores e pela comunidade usando issues do GitHub no repositório do Azure Functions. Use estes tópicos para relatar bugs e fazer pedidos de funcionalidades.

Para implantações Kubernetes totalmente suportadas, considere o alojamento de Azure Functions através de Azure Container Apps.

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 runtime do Functions executa o seu código. O runtime inclui lógica sobre como ativar, registar e gerir execuções de funções. O Azure Functions runtime funciona 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. KEDA pode escalar até zero instâncias (quando nenhum evento está ocorrendo) e até 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 criar seu Dockerfile, você sempre pode chamar func init novamente a partir da raiz do seu projeto de código.

  1. (Opcional) Se você precisar criar seu Dockerfile, use o func init comando com a --docker-only opção:

    func init --docker-only
    

    Para saber mais sobre a geração do Dockerfile, consulte a func init referência.

  2. Use o func kubernetes deploy comando para criar sua imagem e implantar seu aplicativo de função em contêiner no Kubernetes:

    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 executa estas tarefas:

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

Implantando um aplicativo de função a partir de um registro privado

As etapas de implantação anteriores também funcionam para registros privados. Se estiver a extrair a sua imagem de contentor de um registo privado, inclua a opção que faz referência ao --pull-secret segredo do Kubernetes que contém as credenciais do registo privado ao executar func kubernetes deploy.

Removendo um aplicativo de função do Kubernetes

Após a implantação, pode remover uma função eliminando os elementos associados Deployment, ScaledObject, e 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:

Os gatilhos suportados pelo KEDA

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

Suporte para HTTP Trigger

Você pode usar o Azure Functions que expõe gatilhos HTTP, mas o KEDA não os gerencia diretamente. Você pode usar o gatilho do Prometheus do KEDA para dimensionar as Funções HTTP do Azure de uma para n instâncias.

Passos Seguintes

Para obter mais informações, consulte os seguintes recursos: