andré carvalho @andresantostc - 14 a 16 de dezembro · e para onde queremos ir 7. início 2012 8....
TRANSCRIPT
Containers na Passado, Presente e Futuro
1
André Carvalho@andresantostc
+ de 500 desenvolvedores fazendo centenas de
deploys por dia
3
4
1300 aplicações3300 containers450 máquinas virtuais
5
time < 10 pessoas
6
Como chegamos aquiOnde estamosE para onde queremos ir
7
Início2012
8
Cada equipeFazia 1 deploy a cada 2 semanasMantinha scripts de deploy e provisionamento de infra
9
Cada aplicação
Maquinas físicas em 4 ambientesSetup inicial demorava 1 mês
10
Pouca inovação Aplicações monolíticasAlto custo
11
Como melhorar?
12
Abstrair a infraestruturaDar poder ao
desenvolvedor
13
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 SourcePremissasInspirado no Heroku
16
app create <name> <platform>
17
static go php…
app create <name> <platform>
18
app deploy <files>
requirements.txttsuru.yamlapp.py…
app create <name> <platform>
19
app deploy <files>unit add/remove <# units>
Não tem Dockerfileapenas 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 minutosDeploys seguintes: 5
minutos
24
Primeira aplicação em produçãoAWS e Juju
25
2012
Docker2013
26
Queríamos fazer melhor
Deploys ainda mais rápidosDeploys reproduzíveis
27
28
Imagens e Plataformas
29
Deploy gera uma nova layer
Imagens e PlataformasBaseadas no ubuntuTrade-off entre simplicidade e tamanhoArmazenadas em um Registry
30
Registry
31
docker/distribution
Open Source
Diversos backends
Sem autenticação
S3SwiftDisco{
Registry
32
Time dedicado
Autenticação (LDAP)
Garbage collection
Ainda existe um problema:Como escolher onde rodar o
container?
33
Docker-clusterScheduler 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 SchedulingEspalhar as units de uma mesma aplicaçãoLevamos em consideração
memória requisitada
quantidade de containers
metadados36
ExemploAdicionando 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
N3pool=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
Aplicação em produção com Docker
VMs pré-provisionadas
46
2013
Serviços2014
47
Poucas aplicações são completamente stateless
48
“Kelsey’s guide to running traditional databases on
Kubernetes. Strongly consider using a managed service.”
49
Outros times começaram a ofertar serviços
50
ServiçosUsuá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çosSwift (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áriosIntegração com Cloudstack
53
2014
Resiliência2015-2016
54
Investimentos em resiliência
Troubleshooting
55
ProblemasAplicações mal comportadas
VMs com filesystem read-only
Containers e VMs zumbis
Bugs do docker56
“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.”
57
Troubleshootingdocker events
59
Troubleshootingdmesg
60
Não é o bastantePrecisamos automatizar e
agregar
61
Big-SiblingContainer 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
HealingNunca 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
VMsLog driver
Syslog (big-sibling)
65
Storage driver
AUFS
Overlay/Overlay2 (!POSIX)
Devicemapper
Globoplay e CartolaMigração de Datacenter
66
2015-2016
Kubernetes2017-2018
67
Porque?
68
KubernetesDeploy de componentes da Plataforma
69
Kubernetes
70
Kubernetes
71
KubernetesDestruí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
automation tools 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 + KubernetesKubernetes-router
Cria serviços de LoadBalancer e Ingresses
77
curl app.cloud.tsuru.com
Tsuru + KubernetesVolumes
NFS
volume create <name>
volume bind <volume> <app>
78
Crescimento do CartolaVotação do BBB
Componentes e aplicações no Kubernetes
79
2017-Hoje
80
Futuro2018+
81
Kubernetes++
82
Multi-Cloud
83
Service Mesh
84
Obrigado!andrestc.com
85
@andresantostc