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

Containers na Globo.com - Passado, Presente e Futuro

412 vues

Publié le

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

Publié dans : Ingénierie
  • Soyez le premier à commenter

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

×