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

Da EC2 para o K8S

Dd500b30db98bd254ffc5a7982a70803?s=47 drequena
August 26, 2020

Da EC2 para o K8S

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

Dd500b30db98bd254ffc5a7982a70803?s=128

drequena

August 26, 2020
Tweet

Transcript

  1. Do EC2 para K8S Estratégias e lições aprendidas na migração

    do iFood
  2. • Objetivos • Números e escala • O mundo da

    EC2 • Migrando para K8s • Resumo • Referências • Perguntas Agenda
  3. Objetivos

  4. Objetivos • Mostrar erros e acertos na migração • Evolução

    da abstração • Ganhos nos processos • Próximos passos
  5. Números e escala

  6. 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
  7. O mundo da EC2

  8. O mundo da EC2 iFood APP Uma típica app no

    iFood
  9. O mundo da EC2 chef APP terraform src Kong Properti

    es Jenkins pipeline Jenkins pipeline Jenkins pipeline . . . . . . . . . Fluxos de deploy
  10. 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
  11. 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:
  12. 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:
  13. Migrando para K8S

  14. Migrando para K8s Mas antes... Abstração Backend

  15. Migrando para K8s Mas antes... Abstração Backend

  16. Migrando para K8s Mas antes... Abstração Backend

  17. Migrando para K8s Mas antes... Abstração Backend

  18. Migrando para K8s Mas antes... Abstração Backend

  19. Migrando para K8s Mas antes... Abstração Backend

  20. 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:
  21. Migrando para K8s Um cluster K8S no iFood

  22. 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:
  23. 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:
  24. 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…
  25. • 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
  26. 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:
  27. 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:
  28. 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:
  29. 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:
  30. Resumo

  31. • ~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
  32. • 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:
  33. 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:
  34. Referências

  35. 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
  36. Perguntas?

  37. Contatos https://institucional.ifood.com.br/carreiras/ https://institucional.ifood.com.br/carreiras/