Compartilhar via


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.

Quanto às implantações com suporte completo do Kubernetes, em vez disso, considere a Hospedagem de Aplicativos de Contêiner do Azure do 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 zero 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 tenha esquecido de criar o Dockerfile, sempre poderá chamar func init novamente na raiz do projeto de código.

  1. (Opcional) Caso precise criar o Dockerfile, use o comando func init com a opção --docker-only:

    func init --docker-only
    

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

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

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

    • O Dockerfile criado anteriormente é usado para criar uma imagem local para o aplicativo de funções conteinerizado.
    • A imagem local é marcada e enviada por push para o registro de contêiner em que o usuário está conectado.
    • 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

As etapas de implantação anteriores também funcionam para registros privados. Se você estiver extraindo sua 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 usa o gatilho do KEDA prometheus para dimensionar o Azure Functions de HTTP de uma para n instâncias.

Próximas etapas

Para saber mais, consulte os recursos a seguir: