Em primeiro lugar Kubernetes é uma tecnologia. É até possivel rodar na maquina local. Você pode aprender, simular um ambiente completo. No entanto esse laboratório está um abismo de distância de ter um Kubernetes pronto para produção.
Por isso, sempre que pensar em utilizar Kubernetes em um projeto, a pergunta que vem logo em seguida é: Onde exatamente?
Como usar Kubernetes no Azure?
A resposta curta é: Azure Kubernetes Service, ou AKS. No entanto, essa não é a resposta completa.
Assim como você pode criar uma máquina virtual no Azure com 128 GB de memória, 16 VCPU e configurar manualmente um banco de dados PostgreSQL para produção, você também pode configurar uma dezena de maquinas virtuais e gerenciar um cluster de Kubernetes.
No entanto a Microsoft sabe dos desafios de manter soluções como um PostgreSQL em produção, por isso, oferece opções de Banco de Dados como serviço, ou seja o famoso PaaS (Platform as a Service), dessa forma você usa o serviço e a Microsoft se encarrega do hardware e oferece vários beneficios, como por exemplo, backups automaticos.
O AKS é a solução PaaS da Microsoft para Kubernetes. Assim ela disponibiliza todo um ecossistema para minimizar a fricção na adoção do Kubernetes. Reduzindo a complexidade operacional e facilitando, e muito, o uso dele.
O importante é saber que nada impede que você configure e gerencie o Kubernetes por conta própria, mas é uma decisão, no minimo, questionável.
O Azure App Service é uma alternativa ao Kubernetes?
O AppService não é exatamente uma alternativa direta ao Kubernetes. Apesar de ambos permitirem o uso de containers, ainda assim são soluções diferentes, com casos de uso específicos.
Tanto o App Service quanto o AKS permitem rodar aplicações em container, embora o AppService vai além, permitindo usar outras formas de deployment e não precisa ser necessariamente uma imagem docker.
O App Service é ideal para a maioria dos projetos. Ele é mais simples, com um custo menor e mais acessível e quem usa praticamente não precisa de conhecimento em infraestrutura. Não precisa entender de rede ou segurança em nível avançado. O App Service cuida da infraestrutura e do escalonamento básico para você. Ideal para times que querem focar no desenvolvimento do produto.
Azure Functions ou AKS ?
Assim como o App Service, Azure Functions e AKS tem propósitos diferentes, embora ambos possibilitem o uso de containers. O Azure Functions é serverless para executar funções sob demanda. Possui certas limitações, como por exemplo, o tempo máximo para a função rodar é de 5 ou 15 minutos, dependendo da camada de serviço. O pagamento é feito apenas pelo tempo de execução. Dependendo da tecnologia que você usar vai sofrer com problemas como Cold Start.
Enquanto o Azure Functions é ideal para tarefas simples e rápidas. Que podem ser acionadas por eventos e que não exigem uma infra complexa. Por outro lado o AKS é voltado para cenários mais robustos.
O AKS é serveless?
Essencialmente não. No entanto, o AKS oferece uma opção onde você pode utilizar Worker Nodes serverless, chamado de AKS Virtual Nodes. Com essa configuração, é possível escalar automaticamente o cluster sem precisar provisionar e gerenciar uma VM. Embora o AKS serverless elimine parte da complexidade do gerenciamento dos nodes, ainda é necessário configurar e manter o cluster Kubernetes. Portanto o "serverless" é no uso do Worker Node. Esse é um tópico um pouco mais complexo e requer um entendimento um pouco mais profundo da arquitetura do Kubernetes. A explicação pode parecer confusa, mas se você entende o básico da arquitetura do Kubernetes, entende a "mágica" do AKS Virtual Nodes.
Já uso o AKS, faz sentido usar outros serviços de containers, como AppService e Functions?
Apesar da resposta ser: Depende. É questionável essa decisão.
Se você está lidando com aplicações legadas que não foram preparadas para rodar em container, faz sentido usar o App Service ou Azure Functions, pois eles permitem rodar aplicações sem a necessidade de adaptar tudo para o Docker. O App Service, por exemplo, pode hospedar aplicações de forma nativa, o que simplifica o deploy e reduz o tempo e o custo de migração para a nuvem.
Por outro lado, se suas aplicações já suportam container, essa decisão é bem questionável. Pois você já paga pelo custo do AKS. Já tem uma infraestrutura robusta para gerenciar containers, com controle centralizado e muitas features para escalabilidade. Nesse caso, manter tudo no AKS é mais eficiente, evitando a fragmentação da sua infrae e centralizando a gestão do seu ambiente em uma única plataforma.
Conclusão
A Azure oferece diversos serviços que suportam o uso de containers, cada um com propósitos e casos de uso específicos. Em geral, esses serviços buscam fornecer soluções mais simples, evitando a complexidade que o Kubernetes traz. Embora o Kubernetes seja extremamente poderoso e flexível, oferecendo tudo o que um projeto de grande escala pode precisar, ele nem sempre é a opção mais prática. Para muitas aplicações, ele acaba sendo uma solução mais complexa e financeiramente mais cara do que o necessário – uma "bala de canhão para matar uma formiga".