Containers na
Passado, Presente e Futuro
1
André Carvalho
@andresantostc
whoami
Desenvolvedor
na
globo.com
Plataforma de deploys
+ de 500
desenvolvedores
fazendo
centenas
de
deploys por dia
1300
aplicações
3300
containers
450
máquinas virtuais
time <
10
pessoas
Como
chegamos aqui
Onde
estamos
E para onde
queremos
ir
Início
2012
Cada equipe
Fazia
1 deploy
a cada
2
semanas
Mantinha scripts de
deploy e provisionamento
de infra
Cada aplicação
Maquinas físicas em
4
ambientes
Setup inicial demorava
1 mês
Pouca
inovação
Aplicações
monolíticas
Alto
custo
Como melhorar?
Abstrair
a infraestrutura
Dar poder ao
desenvolvedor
Premissas
14
Open Source
Extensível
Escalável
Simples
Multi Linguagem
“I’m convinced the majority of people managing infrastructure
just want a PaaS. The only
requirement: it has to be built by them.”
100% Open Source
Premissas
Inspirado no Heroku
app create <name>
<platform>
17
app create <name>
<platform>
18
app deploy <files>
app create <name>
<platform>
19
app deploy <files>
Não tem
Dockerfile
apenas
código
e suas
dependencias
O conceito de containers
não
é exposto
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
Primeiro
deploy:
40
minutos
Deploys
seguintes
:
5
minutos
Primeira aplicação em produção AWS e Juju
25
Docker
2013
Queríamos fazer melhor
Deploys ainda
mais
rápidos
Deploys
reproduzíveis
Imagens e Plataformas
29
Imagens e Plataformas
Baseadas no
ubuntu
Trade-off entre
simplicidade
e
tamanho
Armazenadas em um
Registry
30Registry
31 docker/distribution Open Source Diversos backends Sem autenticação S3 Swift Disco{
Registry
32
Time dedicado
Autenticação (LDAP)
Ainda existe um problema:
Como escolher onde rodar o container?
Docker-cluster
Scheduler de containers extensível
Utilizado como biblioteca
github.com/tsuru/docker-cluster
Heurística de Scheduling
Segregamos os nós em pools
Cada aplicação está associada a um pool
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
38
D
o
cke
r-cl
u
st
e
r
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-2 N439 zone=us-east-2 zone=us-east-1 N2 N3 zone=us-east-2 N4
D
o
cke
r-cl
u
st
e
r
40 zone=us-east-2 zone=us-east-1 N2 N3 zone=us-east-2 N4
D
o
cke
r-cl
u
st
e
r
41 zone=us-east-2 zone=us-east-1 N2 N3 zone=us-east-2 N4
D
o
cke
r-cl
u
st
e
r
42 zone=us-east-2 zone=us-east-1 N2 N3 zone=us-east-2 N4
D
o
cke
r-cl
u
st
e
r
Como
acessar
os
containers?
44
curl app.cloud.tsuru.com
45
Aplicação em produção com
Docker
VMs pré-provisionadas
46
Serviços
2014
Poucas
aplicações são
completamente stateless
“Kelsey’s guide to running traditional databases on
Kubernetes. Strongly consider
using a managed service.”
Outros times começaram
a ofertar
serviços
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
Serviços
Swift (https://github.com/ openstack/swift) DBaaS (https://github.com/ globocom/database-as-a-service) RPaaS (https://github.com/tsuru/ rpaas) 52Fórum
Techtudo
+ de
4 milhões
de usuários
Integração com
Cloudstack
53
Resiliência
2015-2016
Investimentos em
resiliência
Troubleshooting
Problemas
Aplicações mal comportadas
VMs com filesystem read-only
Containers e VMs zumbis
Bugs do docker
“Do yourself a favor and walk
away from docker 1.13.0 and
1.13.1. Containerd randomly
panics and never recovers and it will give you serious agony.”
Troubleshooting
sysdig (https://sysdig.com/opensource/)
Troubleshooting
docker events
Troubleshooting
dmesg
Não
é o bastante
Precisamos
automatizar e
agregar
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)
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
VMs
Ubuntu LTS (Kernel 4) 4 vCPU, 8gb mem
Docker 12.x~13.x
VMs
Log driver Syslog (big-sibling) 65 Storage driver AUFS Overlay/Overlay2 (!POSIX) DevicemapperGloboplay
e
Cartola
Migração de Datacenter
66
Kubernetes
2017-2018
Porque?
Kubernetes
Deploy de componentes da Plataforma
Kubernetes
Kubernetes
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}
A plataforma continua
sendo o tsuru
“Limit the scope of access to a Kubernetes cluster to
automation tools and cluster administrators who may have
to debug it or keep it running.”
Tsuru + Kubernetes
Provisioners Configurado por pool
Leva em consideração os recursos
Espalha pods de um mesmo
deployment
Nodes com labels
Pods com nodeAffinity e
podAntiAffinity
76
Tsuru + Kubernetes
Kubernetes-router
Cria serviços de LoadBalancer e
Ingresses
77
Tsuru + Kubernetes
Volumes NFS
volume create <name>
volume bind <volume> <app>
Crescimento do Cartola Votação do BBB Componentes e aplicações no Kubernetes 79
2017-Hoje
Futuro
2018+
Kubernetes++
Multi-Cloud
Service Mesh
Obrigado!
andrestc.com
85