Recentemente foi anunciado o Swarm 1.0, pronto para ser utilizado em ambientes de produção, portanto achei que seria um bom momento para checar as novas funcionalidades e escrever algo a respeito.

Neste artigo vou demonstrar como criar um cluster docker Swarm utlizando o Machine, mas antes de mais nada, vamos “dar nome aos bois”.

Docker Swarm

O Swarm é a ferramenta nativa de clustering do Docker. Ela te possibilita a criação de um grupo de servidores docker.

Como o Swarm provê a API Docker padrão, qualquer ferramenta que se comunica com o Docker utilizando essa api, pode se comunicar com um cluster Swarm de maneira transparente.

Para saber como instalar o Swarm, clique aqui.

Docker Machine

O Machine é uma ferramenta de linha de comando que facilita o provisionamento de servidores docker no seu computador, provedores cloud ou em seu próprio data center. A ferramenta cria hosts, instala o docker-engine e configura seu client, para que este se comunique com o servidor recém criado.

Uma “machine” é a combinação de um host Docker e um client docker configurado.

A ferramenta provê uma série de comandos para facilitar a administração de seus “machines”.

Utilizando esses comandos você consegue:

  • controlar o status do host ( start, inspect, stop, restart )
  • Atualizar o Docker daemon
  • configurar um client docker para se comunicar com o host Docker

Para saber mais a respeito, veja este guia de introdução e o manual de instalação.

Criando o cluster

Criando o cluster – Passo a Passo

Primeiro vamos nos certificar que o docker-machine está instalado e funcionando corretamente.

Comando:
user@local:~> docker-machine --version
Retorno:
docker-machine version 0.5.0 (04cfa58)

Docker-machine está ok. Agora temos que criar o token de identificação do cluster Swarm.

Comando:
user@local:~> docker run swarm create
Retorno:
Unable to find image 'swarm:latest' locally
latest: Pulling from library/swarm
2bc79aec8ea0: Pull complete
dc2fb86a875a: Pull complete
435e648d0f23: Pull complete
e16042a92d05: Pull complete
045bd7b00b5b: Pull complete
3caea1253d76: Pull complete
2b4c55187a27: Pull complete
6b40fe7724bd: Pull complete
Digest: sha256:1ab748e67f00ee34d0bedcb306caede47c02dad3e0e03455d55
Status: Downloaded newer image for swarm:latest
70102c42555f190d42fb24c3d8a32773

Pronto, nosso token é a última linha retornada, o valor 70102c42555f190d42fb24c3d8a32773.

Agora vamos criar nosso node master.

Comando:
user@local:~> docker-machine create \
      -d virtualbox \
      --swarm \
      --swarm-master \
      --swarm-discovery token://VALOR_TOKEN \
      swarm-master
Retorno:
Running pre-create checks...
Creating machine...
Waiting for machine to be running, this may take a few minutes...
Machine is running, waiting for SSH to be available...
Detecting operating system of created instance...
Provisioning created instance...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Configuring swarm...
To see how to connect Docker to this machine, run: docker-machine env swarm-master

O nosso nó master está pronto. Para nos certificar podemos utilizar o comando docker-machine ls.

user@local:~> docker-machine ls
Retorno:
NAME           ACTIVE   DRIVER       STATE     URL                         SWARM
swarm-master   -        virtualbox   Running   tcp://192.168.99.107:2376   swarm-master (master)

O próximo passo é criar nosso node-00, onde os containers serão executados.

Comando:
user@local:~> docker-machine ls
docker-machine create \
      -d virtualbox \
      --swarm \
      --swarm-discovery token://VALOR_TOKEN \
      swarm-node-00

Vamos verificar novamente se o host foi criado e está no ar.

user@local:~> docker-machine ls
NAME            ACTIVE   DRIVER       STATE     URL                         SWARM
swarm-master    -        virtualbox   Running   tcp://192.168.99.107:2376   swarm-master (master)
swarm-node-00   -        virtualbox   Running   tcp://192.168.99.108:2376   swarm-master

O cluster está no ar e pronto para uso.

Para “apontar” nosso cliente docker para o cluster, vamos utilizar o seguinte comando:

eval "$(docker-machine env --swarm swarm-master)"

Para termos certeza que o cliente está utilizando cluster, podemos utilizar o comando docker info.

user@local:~> docker info
Containers: 3
Images: 2
Role: primary
Strategy: spread
Filters: health, port, dependency, affinity, constraint
Nodes: 2
 swarm-master: 192.168.99.107:2376
  └ Containers: 2
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.021 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.1.12-boot2docker, operatingsystem=Boot2Docker 1.9.0 (TCL 6.4); master : 16e4
a2a - Tue Nov  3 19:49:22 UTC 2015, provider=virtualbox, storagedriver=aufs
 swarm-node-00: 192.168.99.108:2376
  └ Containers: 1
  └ Reserved CPUs: 0 / 1
  └ Reserved Memory: 0 B / 1.021 GiB
  └ Labels: executiondriver=native-0.2, kernelversion=4.1.12-boot2docker, operatingsystem=Boot2Docker 1.9.0 (TCL 6.4); master : 16e4
a2a - Tue Nov  3 19:49:22 UTC 2015, provider=virtualbox, storagedriver=aufs
CPUs: 2
Total Memory: 2.043 GiB
Name: 412cc93d5d40

É isso, o cluster está funcionando, o cliente docker está apontado para o cluster, já podemos testar o cluster subindo um container com a imagem hello-world.

user@local:~> docker run hello-world

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/

 

Por hoje é só, no próximo artigo vou mostrar como fazer coisas mais interessantes com o cluster, não se esqueça de excluir o cluster utilizando o comando docker-machine rm.

Olá,

na primeira parte do artigo, fizemos os 3 primeiros passos para ter nosso app Django com Auto scaling na AWS.

Agora vamos para a parte um pouco mais complicada que requer mais atenção.

4 – Criando o ELB e Auto Scaling Group

Vamos criar o ELB ( Load Balancer ) que é encarregado de distribuir o tráfego entre as instâncias Django que estão no ar. Já o Auto Scaling Group é o grupo de instâncias idênticas que rodam a aplicação, esse grupo é configurado para aumentar ou diminuir o número de instâncias de acordo com a necessidade.


Continue reading

Olá,

nesse artigo quero mostrar uma forma de hospedar um app Django na plataforma de cloud da Amazon Web Services, utilizando o recurso de Auto Scaling do EC2.

Para quem não conhece, o Auto Scaling é uma das principais funcionalidades da AWS, pois permite que você otimize seus gastos, aumentando ou diminuindo a quantidade de recursos contratados de acordo com a necessidade. Dessa forma você só paga pelo que realmente utiliza.

Para saber mais, dê uma olhada nesses posts:


Continue reading