Partilhar via


Combinando contêineres e abordagens sem servidor

Gorjeta

Este conteúdo é um excerto do eBook, Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.

Miniatura da capa dos aplicativos .NET nativos da nuvem para eBook do Azure.

Os aplicativos nativos da nuvem normalmente implementam serviços aproveitando contêineres e orquestração. Muitas vezes, há oportunidades para expor alguns dos serviços do aplicativo como Azure Functions. No entanto, com um aplicativo nativo da nuvem implantado no Kubernetes, seria bom aproveitar o Azure Functions dentro desse mesmo conjunto de ferramentas. Felizmente, você pode encapsular o Azure Functions dentro de contêineres do Docker e implantá-los usando os mesmos processos e ferramentas do restante do seu aplicativo baseado em Kubernetes.

Quando faz sentido usar contêineres sem servidor?

Sua Função do Azure não tem conhecimento da plataforma na qual está implantada. Para alguns cenários, você pode ter requisitos específicos e precisar personalizar o ambiente no qual o código da função será executado. Você precisará de uma imagem personalizada que suporte dependências ou uma configuração não suportada pela imagem padrão. Nesses casos, faz sentido implantar sua função em um contêiner personalizado do Docker.

Quando você deve evitar o uso de contêineres com o Azure Functions?

Se você quiser usar o faturamento de consumo, não poderá executar sua função em um contêiner. Além disso, se você implantar sua função em um cluster do Kubernetes, não se beneficiará mais do dimensionamento interno fornecido pelo Azure Functions. Você precisará usar os recursos de dimensionamento do Kubernetes, descritos anteriormente neste capítulo.

Como combinar contêineres sem servidor e Docker

Para encapsular uma Função do Azure em um contêiner do Docker, instale as Ferramentas Principais do Azure Functions e execute o seguinte comando:

func init ProjectName --worker-runtime dotnet --docker

Quando o projeto é criado, ele incluirá um Dockerfile e o tempo de execução do trabalhador configurado para dotnet. Agora, você pode criar e testar sua função localmente. Compile-o e execute-o usando os docker build comandos and docker run . Para obter etapas detalhadas para começar a criar o Azure Functions com suporte ao Docker, consulte o tutorial Criar uma função no Linux usando uma imagem personalizada.

Como combinar serverless e Kubernetes com KEDA

Neste capítulo, você viu que a plataforma do Azure Functions se expande automaticamente para atender à demanda. Ao implantar funções em contêineres no AKS, no entanto, você perde a funcionalidade de dimensionamento integrada. Para o resgate vem o Event Driven (KEDA) baseado no Kubernetes. Ele permite dimensionamento automático refinado para event-driven Kubernetes workloads, incluindo funções conteinerizadas.

O KEDA fornece funcionalidade de dimensionamento controlado por eventos para o tempo de execução das funções em um contêiner do Docker. O KEDA pode ser dimensionado de zero instâncias (quando nenhum evento está ocorrendo) para n instances, com base na carga. Ele permite o dimensionamento automático expondo métricas personalizadas ao 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.

Vale a pena notar que o projeto KEDA agora é gerenciado pela Cloud Native Computing Foundation (CNCF).