Share
Embed
Transcript
37 slides
-
• Objetivos • Números e escala • O mundo da
EC2 • Migrando para K8s • Resumo • Referências • Perguntas Agenda -
Objetivos • Mostrar erros e acertos na migração • Evolução
da abstração • Ganhos nos processos • Próximos passos -
Números e escala • Funcionários em Tech: ~500 foodlovers •
Quantidade de Aplicações: ~550 apps • EC2s: ~3500 • Número de deploys: +1000 mês • Clusters K8s: 19 • Tráfego de rede: +3.5M RPS -
O mundo da EC2 chef APP terraform src Kong Properti
es Jenkins pipeline Jenkins pipeline Jenkins pipeline . . . . . . . . . Fluxos de deploy -
O mundo da EC2 • Tecnologias ◦ Terraform ▪ Módulos
◦ AWS ◦ Chef ▪ Gerenciamento de configuração ◦ Jenkins ▪ Pipelines e jobs ◦ Kong ▪ API Gateway ▪ Camada 7 de roteamento ▪ Transformações -
O mundo da EC2 • AutoScaling (CPU e SQS) •
Blue/Green, Rolling deployment • Agregação de Logs • Monitoramento ◦ App ◦ Load Balancers • Knife - Interações com EC2 (app restart, live logs, debugging) Features: -
O mundo da EC2 • Muitas tecnologias para conhecer e
interagir • Processo manual para definição de secrets • 3 a 5 interações dependendo do aplicativo ◦ Git, pipelines, Jira • Alguns repos/pipelines necessitavam de aprovação • Tempos para rollout com a plataforma escalada • Tempo de resposta durante o scaling em momentos de pico ◦ Tempo de inicialização da app ▪ Principalmente o tempo da AWS ◦ Regras de scaling agressivas para tentar contornar o tempo de inicialização ▪ 30% de uso de CPU ▪ $$$ • Não é rápido o suficiente Principais dificuldades: -
Migrando para K8s • Provisionamento dos clusters com Kops •
Um namespace por aplicação • Escolha da família de ec2 para nodes (m5.xlarge) • Limite do número de nodes por cluster (100) • Aplicações stateful não seriam migradas • Utilização de backends de disco diferentes do EBS não suportadas Premissas e definições: -
Migrando para K8s • Estabilidade • Monitoria • Escalabilidade do
cluster • Foco em (no mínimo) igualar as funcionalidades de EC2 ◦ Logs ◦ Scaling ◦ Monitoria ◦ Secrets ◦ Estratégias de Deployment ◦ Interação pela Kubernetes Dashboards e kubectl • Declarado freeze da antiga stack A primeira fase: -
Migrando para K8s • Escalabilidade mais rápida • Maior agilidade
• Imutabilidade das aplicações • Health checks e Liveness Probes • Monitoria individual de métricas por app Ferramentas e abstrações para migração: • Pipelines • Aplicação de manifestos K8S • Acessos a app por LoadBalancer • Grafana Dashboards para métricas e indicadores Igual mas diferente: -
Migrando para K8s • EC2 vs Docker (carro particular vs
metrô) • Pouco conhecimento de Docker • Imagens docker gigantes • Dimensionamento de recursos • Métricas e Escalabilidade Horizontal • Liveness Probe e Readiness Probe • Tempo de subida das aplicações • Escalabilidade de Banco de dados • ConfigMaps vs arquivo de propriedades • Muitos “Lift and Shift” • Falsa ideia que K8S implementa 12 factors por você. Os benefícios chamaram a atenção de muitos, mas… -
• EC2 vs Docker (carro particular vs metrô) • Pouco
conhecimento de Docker • Imagens docker gigantes • Dimensionamento de recursos • Métricas e Escalabilidade Horizontal • Liveness Probe e Readiness Probe • Tempo de subida das aplicações • Escalabilidade de Banco de dados • ConfigMaps vs arquivo de propriedades • Muitos “Lift and Shift” • Falsa ideia que K8S implementa 12 factors por você. Os benefícios chamaram a atenção de muitos, mas… Migrando para K8s -
Migrando para K8s • Manifestos puros levaram a ctrl+c ctrl+v
• Falta de padronização • Explosão de Load Balancers • Falta de rotinas para warmup • Gerenciamento de Secrets muito ruim • Quedas do sistema de monitoria • Sistemas requerendo hardware diferenciado • Muitas interações necessárias com o time de SRE Problemas começaram a surgir: -
Migrando para K8s • Helm no processo de Deployment ◦
Abstração e transparências ◦ Simplificação ◦ Padronização ◦ Rotinas agendadas de warmup ◦ Geração de releases ◦ Lifecycle da Chart • um exemplo… .1.16 A segunda fase: -
Migrando para K8s • Ingress ◦ Redução LBs ◦ Novas
métricas ◦ Canary, AB e outras transformações de camada 7 • Vault ◦ Autonomia para Devs ◦ Versionamento de Secrets ◦ Ingestão automática nos PODs ◦ Integração com Services Accounts ◦ Granularidade de acessos A segunda fase: -
Migrando para K8s • Criação novos Node Groups (Kops) ◦
Infra ▪ Maior estabilidade dos componentes de infra ▪ Flexibilidade de updates ◦ High Demand ▪ Perfis de aplicação CPU,Memory ou Network bound • Sharding de Prometheus ◦ Maior disponibilidade de métricas e alarmes essenciais • External DNS ◦ Menos interação com Terraform A segunda fase: -
• ~80% das apps migradas • Clusters ◦ 14 prod
◦ 1 por BU (em média) • Nodes ◦ ~900 • Resiliência • Autonomia • Scalings muito mais rápidos • Menos passos e sistemas precisam ser conhecidos Resumo -
• Converse com os times de Desenvolvimento • Mudanças nas
aplicações são inevitáveis • Implemente padrões o quanto antes • Ache o equilíbrio entre abstração e flexibilidade (perfil do time) • Estude sistemas distribuídos • Decida quais tipos de apps vão ou não para o K8S • Crie versões e lifecycle para toda nova fase ou tecnologia implantada Resumo Lições aprendidas: -
Resumo • Baixa granularidade de acessos ◦ Novo sistema de
auth e separação de namespaces • Observabilidade ◦ Service Mesh (Istio) • Resiliência do sistema de métricas e monitoria ◦ Cortex • Camada de validações de governança e segurança ◦ OPA Novos desafios e necessidades: -
Referências • https://institucional.ifood.com.br/carreiras/ • https://github.com/hugobcar/tiamat • https://12factor.net/pt_br/ • https://helm.sh/ •
https://www.vaultproject.io/ • https://github.com/kubernetes-sigs/external-dns • https://istio.io/ • https://konghq.com/kong/ • https://github.com/prymitive/karma • https://www.openpolicyagent.org/ • Prometheus no iFood - https://www.youtube.com/watch?v=YQuSSAZsP0c