Docker e CoreOS: escalando serviços usando fleet

@nirev
http://slides.com/nirev
<guilherme@nirev.org>

Quem sou eu?



Greyjoy:
time de busca e data science
Guilherme Nogueira
Ex-Desenvolvedor @ Elo7

Greyjoy:  Busca e
Data Science




Todos rodando em containers Docker no CoreOS



Por quê?

Antes

Imagem X








  • Não dava pra testar localmente, 
    apenas na AWS
  • Ambiente local != produção
  • Muito difícil de recriar do zero
Imagem Y


Antes - pt2



  • Código que cria a máquina == Fácil de recriar
  • Mesma stack de integração e produção
  • Muito chato de testar localmente, mas dá (Vagrant + hacks)
  • Ambiente local != produção




Exemplo:



CoreOS


  • Boot rápido

  • Distro leve

  • Apps apenas em containers

  • Atualizações on-the-fly

  • SystemD

 

SystemD



cloud-config



Fleet


 

O que é?

O que é?



cloud-config



service unit



Tipos de deployment

  global-unit.service





my-app.service


my-app@.service

Escalável

Único service

Global

Gerenciando serviços


$ fleetctl list-unit-files
UNIT            HASH    DSTATE   STATE    TMACHINE
goodbye.service d4c61bf launched launched 85c0c595.../172.17.8.102
hello.service   e55c0ae launched launched 113f16a7.../172.17.8.103





$ fleetctl list-machines
MACHINE                                 IP          METADATA
148a18ff-6e95-4cd8-92da-c9de9bb90d5a    10.10.1.1   search_api=true,env=integration
491586a6-508f-4583-a71d-bfc4d146e996    10.10.1.2   search_api=true,env=integration
c9de9451-6a6f-1d80-b7e6-46e996bfc4d1    10.10.1.3   search_api=true,env=integration





$ fleetctl list-units
UNIT                    MACHINE                  ACTIVE    SUB
global-unit.service     148a18ff.../10.10.1.1    active    running
global-unit.service     491586a6.../10.10.1.2    active    running
global-unit.service     c9de9451.../10.10.1.3    active    running

Gerenciando Serviços

$ fleetctl list-units
UNIT                    MACHINE                  ACTIVE    SUB
global-unit.service     148a18ff.../10.10.1.1    active    running
global-unit.service     491586a6.../10.10.1.2    active    running
global-unit.service     c9de9451.../10.10.1.3    active    running
my-app.service          491586a6.../10.10.1.2    active    running


$ fleetctl start my-app

Gerenciando Serviços

$ fleetctl start my-app@{1..2}

$ fleetctl list-units
UNIT                    MACHINE                  ACTIVE    SUB
global-unit.service     148a18ff.../10.10.1.1    active    running
global-unit.service     491586a6.../10.10.1.2    active    running
global-unit.service     c9de9451.../10.10.1.3    active    running
my-app@1.service        491586a6.../10.10.1.2    active    running
my-app@2.service        c9de9451.../10.10.1.3    active    running




Mas... e os problemas?


  • logs
  • split-brain etcd
  • monitoração
  • estado dos serviços
    (qual versão está rodando?)


Container para Monitorar containers

Log aggregators:
Docker 1.8 tem suporte para "log drivers"

etcd split-brain: MONITORE sempre!
não é comum, mas pode acontecer


estado dos serviços:
monitoração, métricas, autoscaling, alertas

Obrigado!

Perguntas?

@nirev
http://slides.com/nirev
<guilherme@nirev.org>

jobs@elo7.com 


Docker e CoreOS: escalando serviços usando fleet (AgileBrazil 2015)

By Guilherme M. Nogueira

Docker e CoreOS: escalando serviços usando fleet (AgileBrazil 2015)

Slides da palestra apresentada na trilha Desenvolvimento e Testes da AgileBrazil 2015, em 22/10/2015.

  • 1,948