Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Containers na Globo.com - Passado, Presente e Futuro

338 views

Published on

Nesta palestra você irá descobrir as lições aprendidas pela Globo.com em mais de 4 anos de containers em produção.

Published in: Engineering
  • Be the first to comment

Containers na Globo.com - Passado, Presente e Futuro

  1. 1. Containers na Passado, Presente e Futuro 1 André Carvalho @andresantostc
  2. 2. whoami Desenvolvedor na globo.com Plataforma de deploys 2
  3. 3. + de 500 desenvolvedores fazendo centenas de deploys por dia 3
  4. 4. 4
  5. 5. 1300 aplicações 3300 containers 450 máquinas virtuais 5
  6. 6. time < 10 pessoas 6
  7. 7. Como chegamos aqui Onde estamos E para onde queremos ir 7
  8. 8. Início 2012 8
  9. 9. Cada equipe Fazia 1 deploy a cada 2 semanas Mantinha scripts de deploy e provisionamento de infra 9
  10. 10. Cada aplicação Maquinas físicas em 4 ambientes Setup inicial demorava 1 mês 10
  11. 11. Pouca inovação Aplicações monolíticas Alto custo 11
  12. 12. Como melhorar? 12
  13. 13. Abstrair a infraestrutura Dar poder ao desenvolvedor 13
  14. 14. Premissas 14
  15. 15. Premissas 14 Open Source
  16. 16. Premissas 14 Open Source Extensível
  17. 17. Premissas 14 Open Source Extensível Multi Linguagem
  18. 18. Premissas 14 Open Source Extensível Multi Linguagem Alta Disponibilidade
  19. 19. Premissas 14 Open Source Extensível Escalável Multi Linguagem Alta Disponibilidade
  20. 20. Premissas 14 Open Source Extensível Escalável Simples Multi Linguagem Alta Disponibilidade
  21. 21. “I’m convinced the majority of people managing infrastructure just want a PaaS. The only requirement: it has to be built by them.” 15
  22. 22. 100% Open Source Premissas Inspirado no Heroku 16
  23. 23. app create <name> <platform> 17
  24. 24. app create <name> <platform> 17 static go php…
  25. 25. app create <name> <platform> 18 app deploy <files>
  26. 26. app create <name> <platform> 18 app deploy <files> requirements.txt tsuru.yaml app.py …
  27. 27. app create <name> <platform> 19 app deploy <files> unit add/remove <# units>
  28. 28. Não tem Dockerfile apenas código e suas dependencias 20
  29. 29. O conceito de containers não é exposto 21
  30. 30. 22 https://www.infoq.com/news/2013/03/Docker Na verdade… ainda não existem docker containers
  31. 31. Cada unit era uma VM provisionada com Juju 23
  32. 32. Primeiro deploy: 40 minutos Deploys seguintes: 5 minutos 24
  33. 33. Primeira aplicação em produção AWS e Juju 25 2012
  34. 34. Docker 2013 26
  35. 35. Queríamos fazer melhor Deploys ainda mais rápidos Deploys reproduzíveis 27
  36. 36. 28
  37. 37. Imagens e Plataformas 29 Deploy gera uma nova layer
  38. 38. Imagens e Plataformas Baseadas no ubuntu Trade-off entre simplicidade e tamanho Armazenadas em um Registry 30
  39. 39. Registry 31 docker/distribution Open Source Diversos backends Sem autenticação S3 Swift Disco{
  40. 40. Registry 32 Time dedicado Autenticação (LDAP) Garbage collection
  41. 41. Ainda existe um problema: Como escolher onde rodar o container? 33
  42. 42. Docker-cluster Scheduler de containers extensível Utilizado como biblioteca github.com/tsuru/docker-cluster 34
  43. 43. Heurística de Scheduling Segregamos os nós em pools Cada aplicação está associada a um pool 35
  44. 44. Heurística de Scheduling Espalhar as units de uma mesma aplicação Levamos em consideração memória requisitada quantidade de containers metadados 36
  45. 45. Exemplo Adicionando 3 units do Cartola 37
  46. 46. 38 Docker-cluster pool=g1 pool=esporte pool=esporte zone=us-east-1 zone=us-east-2 zone=us-east-1 N1 N2 N3 pool=esporte zone=us-east-2N4
  47. 47. 39 zone=us-east-2 zone=us-east-1 N2 N3 zone=us-east-2 N4 Docker-cluster
  48. 48. 40 zone=us-east-2 zone=us-east-1 N2 N3 zone=us-east-2 N4 Docker-cluster
  49. 49. 41 zone=us-east-2 zone=us-east-1 N2 N3 zone=us-east-2 N4 Docker-cluster
  50. 50. 42 zone=us-east-2 zone=us-east-1 N2 N3 zone=us-east-2 N4 Docker-cluster
  51. 51. Como acessar os containers? 43
  52. 52. 44 curl app.cloud.tsuru.com Router
  53. 53. 45 curl app.com Router
  54. 54. Aplicação em produção com Docker VMs pré-provisionadas 46 2013
  55. 55. Serviços 2014 47
  56. 56. Poucas aplicações são completamente stateless 48
  57. 57. “Kelsey’s guide to running traditional databases on Kubernetes. Stronglyconsider usingamanagedservice.” 49
  58. 58. Outros times começaram a ofertar serviços 50
  59. 59. Serviços Usuário cria uma instância do serviço Usuário faz bind da instância com a app Serviço injeta variáveis de ambiente Serviço é informado sobre containers 51
  60. 60. Serviços Swift (https://github.com/openstack/swift) DBaaS (https://github.com/globocom/ database-as-a-service) RPaaS (https://github.com/tsuru/rpaas) 52
  61. 61. Fórum Techtudo + de 4 milhões de usuários Integração com Cloudstack 53 2014
  62. 62. Resiliência 2015-2016 54
  63. 63. Investimentos em resiliência Troubleshooting 55
  64. 64. Problemas Aplicações mal comportadas VMs com filesystem read-only Containers e VMs zumbis Bugs do docker 56
  65. 65. “Do yourself a favor and walkaway from docker 1.13.0 and 1.13.1. Containerd randomly panics and never recovers and it will give you serious agony.” 57
  66. 66. Troubleshooting sysdig (https://sysdig.com/opensource/) 58
  67. 67. Troubleshooting docker events 59
  68. 68. Troubleshooting dmesg 60
  69. 69. Não é o bastante Precisamos automatizar e agregar 61
  70. 70. Big-Sibling Container que roda em todos os nós • https://github.com/tsuru/bs Realiza checks de sanidade Processa e redireciona logs Envia métricas (dashboard e autoscale) 62
  71. 71. Healing Nunca atualizar/reiniciar o Docker em uma instância em uso Big-sibling identifica VMs problemáticas Tsuru cria nova VM e move containers 63
  72. 72. VMs Ubuntu LTS (Kernel 4) 4 vCPU, 8gb mem Docker 12.x~13.x 64
  73. 73. VMs Log driver Syslog (big-sibling) 65 Storage driver AUFS Overlay/Overlay2 (!POSIX) Devicemapper
  74. 74. Globoplay e Cartola Migração de Datacenter 66 2015-2016
  75. 75. Kubernetes 2017-2018 67
  76. 76. Porque? 68
  77. 77. Kubernetes Deploy de componentes da Plataforma 69
  78. 78. Kubernetes 70
  79. 79. Kubernetes 71
  80. 80. Kubernetes Destruímos e criamos clusters todos os dias AWS, GCE e Cloudstack Validações do tsuru, scripts e puppet github.com/tsuru/integration_{gce,ec2} 72
  81. 81. A plataforma continua sendo o tsuru 73
  82. 82. “Limit the scope of access to a Kubernetes cluster to automationtools and cluster administrators who may have to debug it or keep it running.” 74
  83. 83. Tsuru + Kubernetes Provisioners Configurado por pool 75
  84. 84. Leva em consideração os recursos Espalha pods de um mesmo deployment Nodes com labels Pods com nodeAffinity e podAntiAffinity 76 Tsuru + Kubernetes
  85. 85. Tsuru + Kubernetes Kubernetes-router Cria serviços de LoadBalancer e Ingresses 77 curl app.cloud.tsuru.com
  86. 86. Tsuru + Kubernetes Volumes NFS volume create <name> volume bind <volume> <app> 78
  87. 87. Crescimento do Cartola Votação do BBB Componentes e aplicações no Kubernetes 79 2017-Hoje
  88. 88. 80
  89. 89. Futuro 2018+ 81
  90. 90. Kubernetes++ 82
  91. 91. Multi-Cloud 83
  92. 92. Service Mesh 84
  93. 93. Obrigado! andrestc.com 85 @andresantostc

×