Apresentação sobre o uso de Docker, Kubernetes e serviços do Microsoft Azure como Web App for Containers e AKS (Azure Kubernetes Service) no desenvolvimento de APIs REST escaláveis. Palestra realizada durante o DEVPIRA Festival, um evento promovido pela comunidade DevPiracicaba e que aconteceu em Piracicaba-SP no dia 01/12/2018.
Sobrevoando os serviços do Azure | TDC São Paulo Online 2020
Renato Groffe - Escalabilidade na Web com Docker e Kubernetes
1.
2. • Microsoft Most Valuable Professional (MVP)
• Multi-Plataform Technical Audience
Contributor (MTAC)
• Mais de 15 anos de experiência na área de
Tecnologia
• Autor Técnico e Palestrante
• Um dos organizadores do Canal .NET, do .NET
SP e do Campinas .NET
Renato Groffe
h t t p s : / / m e d i u m . c o m / @ re n a t o . g rof f e /
3. Renato Groffe - Contatos
h t t p s : / / m e d i u m . c o m / @ re n a t o . g rof f e /
/renatogroffe /in/renatogroffe
/canaldotnet
/renatogroffe
/canaldotnet
/renatogroff
4. Agenda
• Um pouco mais sobre escalabilidade na Web...
• Por que utilizar Docker?
• Orquestração de containers com Kubernetes
• Exemplos práticos
5. APIs REST - Contexto Atual
• REST como principal estilo arquitetural
• Microserviços ganhando força
• Economia das APIs
• Escalabilidade, disponibilidade e performance
são questões centrais
6. Um pouco mais sobre escalabilidade na Web...
Vertical
Horizontal
7. Por que escalar uma aplicação Web?
• Necessidade de atender a uma demanda
crescente de uso sem comprometer a
performance
• Garantir uma alta disponibilidade
8. Problemas comuns ao se escalar uma aplicação Web
• Como criar rapidamente diferentes instâncias de uma
mesma aplicação?
• Como evitar problemas envolvendo mudanças de
ambientes (Desenvolvimento / Testes para Produção)?
• Como configurar sem grandes complicações o
balanceamento de carga (load balancing)?
• Como evitar problemas com armazenamento temporário
de dados (cache em memória, por exemplo)?
• Como se recuperar de problemas envolvendo uma
instância específica da aplicação?
9. Algumas respostas...
• Utilizando soluções na nuvem do tipo PaaS
(Plataform as a Service) → O Microsoft Azure conta
com excelentes opções
• Empregando alternativas para cache distribuído
como o Redis
• Utilização de containers Docker
• Orquestação de containers com Kubernetes ou
Docker Swarm (auto-recuperação e reinicialização
automáticas)
10. Microsoft Azure e escalabilidade na Web
• Azure App Service
• Azure Web App for Containers
• Azure Container Service
• Azure Kubernetes Service (AKS)
13. Azure Web App for Containers
• Hospedagem de aplicações
• Suporte a Continuous Integration
• Escalabilidade (vertical e horizontal)
• Suporte a HTTPS
15. Dificuldades na adoção de containers...
• Como escalar containers?
• Como garantir o trabalho coordenado
entre os diferentes containers de uma
aplicação?
• Como detectar containers com falhas e
corrigir isso automaticamente?
19. Kubernetes: uma visão geral
• Também conhecido como K8s ou kube
• Desenvolvido originalmente pela Google
• Mantido pela Cloud Native Computing Foundation
• Escrito em Go
• Open source
20. Kubernetes: uma visão geral
• Cluster com máquina Master e Nodes
• Criação de objetos através de arquivos no formato
YAML
• Diversas funcionalidades para gerenciamento
• kubectl → ferramenta de linha de comando
• Minikube → ambiente de testes
21. Kubernetes: gerenciamento de containers
• Orquestração
• Auto recuperação
• Reinício
• Replicação
• Escalonamento
22. Kubernetes: arquitetura
• Master
• Máquina que controla os Nodes (Nós)
• Responsável pelas atribuições de tarefas
aos Nodes
• Nodes
• Máquina que realizam as tarefas
atribuídas pelo Master
24. Kubernetes: arquitetura
• Pod
• Grupo de um ou mais containers
implantados em um Node (Nó)
• Compartilham o mesmo endereço IP,
IPC, nome do host e outros recursos
POD
26. Kubernetes: arquitetura
• Service
• Objeto mais estável (Pods são criados ou
removidos continuamente)
• Cuidará do acesso aos Pods, funcionando
como um Load Balancer
27. Kubernetes: arquitetura
• Replication Controller
• Controla quantas cópias idênticas de um Pod
serão executadas e em quais locais do cluster
• Kubelet
• Serviço que garante a inicialização e execução
dos containers nos Nodes
32. Aplicação
• Utilização do Azure Web App for Containers e
Azure Kubernetes Service (AKS)
• API REST criada com o ASP.NET Core 2.1
• Esta aplicação foi publicada no Docker Hub
como a imagem renatogroffe/apicontagem
• Contagem de acessos, além de exibição do
nome da máquina e do sistema operacional em
uso