Criando um cluster CoreOS com Docker

docker

by Daniel Romero / @infoslack

Daniel Romero

daniel romero

infoslack.com/about

initsec

www.enjoei.com.br / jobs@enjoei.com.br

Livro começando com Linux
livro docker

O que é ?

  • Tolerante a falhas
  • Distribuído (clusters)
  • Fácil de escalar
  • Trabalha com containers
  • Não possui sistema de empacotamento

Boot

cloud-config

          
coreos:
  etcd:
   # generate a new token for each unique
   # cluster from https://discovery.etcd.io/new
   discovery: https://discovery.etcd.io/token

   addr: $private_ipv4:4001
   peer-addr: $private_ipv4:7001

   fleet:
    public-ip:$private_ipv4

   units:
    - name: etcd.service
      command: start
    - name: fleet.service
      command: start
          

ETCD

E o systemd ?

  • Executa containers Docker
  • Registra os serviços no etcd
  • Não é utilizado para iniciar ou parar serviços

Arquitetura

Fleet

  • Sistema de inicialização do cluster
  • Orquestração de processos dentro do cluster
  • Interface para gerenciar o systemd em cada nó do cluster
          
[Unit]
Description=Nginx web server service
After=etcd.service
After=docker.service
Requires=nginx-discovery@%i.service

[Service]
TimeoutStartSec=0
KillMode=none
ExecStartPre=-/usr/bin/docker kill nginx%i
ExecStartPre=-/usr/bin/docker rm nginx%i
ExecStartPre=/usr/bin/docker pull infoslack/docker-nginx
ExecStart=/usr/bin/docker run -d --name nginx%i \
-p 80:80 infoslack/docker-nginx

[X-Fleet]
X-Conflicts=nginx@*.service
          

Flannel & SkyDNS

  • SkyDNS - cria um sistema de DNS distribuído
  • Flannel - realiza o mapeamento de ips virtuais

Criando o cluster

          
$ ssh core@54.174.248.174

CoreOS (stable)
core@ip-172-31-34-98 ~ $ fleetctl list-machines

MACHINE       IP              METADATA
610aa9e3...   172.31.34.98    -
0b735501...   172.31.34.97    -
          
          
          
$ fleetctl start nginx@80.service
          
          
          
$ http -h 54.174.248.174
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 612
Content-Type: text/html
Date: Fri, 23 Jan 2015 01:32:54 GMT
ETag: "5418459b-264"
Last-Modified: Tue, 16 Sep 2014 14:13:47 GMT
Server: nginx/1.6.2

$ http -h 54.174.226.238
HTTP/1.1 200 OK
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 612
Content-Type: text/html
Date: Fri, 23 Jan 2015 01:33:08 GMT
ETag: "5418459b-264"
Last-Modified: Tue, 16 Sep 2014 14:13:47 GMT
Server: nginx/1.6.2
          
          
pergutas

Obrigado! =)