Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Da EC2 para o K8S

drequena
August 26, 2020

Da EC2 para o K8S

Estratégias e lições aprendidas na migração do iFood

drequena

August 26, 2020
Tweet

More Decks by drequena

Other Decks in Technology

Transcript

  1. • Objetivos • Números e escala • O mundo da

    EC2 • Migrando para K8s • Resumo • Referências • Perguntas Agenda
  2. Objetivos • Mostrar erros e acertos na migração • Evolução

    da abstração • Ganhos nos processos • Próximos passos
  3. 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
  4. O mundo da EC2 chef APP terraform src Kong Properti

    es Jenkins pipeline Jenkins pipeline Jenkins pipeline . . . . . . . . . Fluxos de deploy
  5. 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
  6. 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:
  7. 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:
  8. 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:
  9. 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:
  10. 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:
  11. 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…
  12. • 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
  13. 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:
  14. 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:
  15. 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:
  16. 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:
  17. • ~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
  18. • 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:
  19. 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:
  20. 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