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 by them.”
15
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 de containers
metadados
36
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
zone=us-east-2N4
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 ambiente
Serviço é informado sobre containers
51
Serviços
Swift (https://github.com/openstack/swift)
DBaaS (https://github.com/globocom/
database-as-a-service)
RPaaS (https://github.com/tsuru/rpaas)
52
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 give you serious
agony.”
57
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 redireciona logs
Envia métricas (dashboard e autoscale)
62
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
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.com/tsuru/integration_{gce,ec2}
72
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 or
keep it running.”
74
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 podAntiAffinity
76
Tsuru + Kubernetes
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

Containers na Globo.com - Passado, Presente e Futuro