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. Do EC2 para K8S
    Estratégias e lições aprendidas na migração do
    iFood

    View Slide

  2. ● Objetivos
    ● Números e escala
    ● O mundo da EC2
    ● Migrando para K8s
    ● Resumo
    ● Referências
    ● Perguntas
    Agenda

    View Slide

  3. Objetivos

    View Slide

  4. Objetivos
    ● Mostrar erros e acertos na migração
    ● Evolução da abstração
    ● Ganhos nos processos
    ● Próximos passos

    View Slide

  5. Números e escala

    View Slide

  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

    View Slide

  7. O mundo da EC2

    View Slide

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

    View Slide

  9. O mundo da EC2
    chef
    APP terraform
    src
    Kong
    Properti
    es
    Jenkins pipeline
    Jenkins pipeline
    Jenkins pipeline
    . . .
    . . .
    . . .
    Fluxos de deploy

    View Slide

  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

    View Slide

  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:

    View Slide

  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:

    View Slide

  13. Migrando para K8S

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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:

    View Slide

  21. Migrando para K8s
    Um cluster K8S no iFood

    View Slide

  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:

    View Slide

  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:

    View Slide

  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…

    View Slide

  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

    View Slide

  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:

    View Slide

  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:

    View Slide

  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:

    View Slide

  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:

    View Slide

  30. Resumo

    View Slide

  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

    View Slide

  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:

    View Slide

  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:

    View Slide

  34. Referências

    View Slide

  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

    View Slide

  36. Perguntas?

    View Slide

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

    View Slide