Docker Swarm – Rex-Ray

Docker Swarm = O Docker Swarm é uma ferramenta nativa do Docker que permite a criação de clusters de Docker, ou seja, podemos fazer com que diversos hosts de Docker estejam dentro do mesmo pool de recursos, facilitando assim o deploy de containers.

Fonte: http://www.mundodocker.com.br/docker-swarm/

Rex-Ray = É um mecanismo agnóstico de orquestração de armazenamento (storage). Seu principal objetivo é fornecer armazenamento persistente para os containers Docker.

Link do projeto:
http://rexray.readthedocs.io/en/stable/

AWS EFS = O Amazon Elastic File System (Amazon EFS) disponibiliza um armazenamento de arquivos simples e escalável para usar com instâncias do Amazon EC2 na Nuvem AWS. O Amazon EFS é fácil de usar e oferece uma interface simples que permite criar e configurar sistemas de arquivos com rapidez e facilidade.

Fonte: https://aws.amazon.com/pt/efs/

Mão na massa:

O objetivo desse tutorial é criar um ambiente totalmente escalável. Nele irei demonstrar através dos passos como criar um ambiente com Docker Swarm com Rex-Ray em cima da nuvem da Amazon AWS. Na AWS irei utilizar os recursos de EC2 e Elastic File Systems (EFS).

Cenário:

2 Instâncias EC2 t2.micro (Ubuntu 16.04)
1 Credencial (AIM) com acesso Full no Elastic File System (EFS).

Subindo as instâncias EC2

Passo 1 – Criando as instâncias no EC2.

aws ec2 run-instances \
--image-id ami-e13739f6 \
--count 2 \
--instance-type t2.micro \
--key-name tutoriaisgnulinux \
--security-group-ids sg-9ef337e2 \
--subnet-id subnet-065eff2b \
--associate-public-ip-address

ec2

Feito…
Temos agora 2 instâncias EC2 t2.micro, são elas:

DNS: ec2-54-221-40-130.compute-1.amazonaws.com
IP: 54.221.40.130
IP: 192.168.202.152

DNS: ec2-54-146-188-140.compute-1.amazonaws.com
IP: 54.146.188.140
IP: 192.168.202.141

Passo 2 – Criando o usuário tglefs, este usuário estará será incluso em um grupo com direitos de acesso full no Elastic File System (AmazonElasticFileSystemFullAccess).

Usuário: tglefs
grupo: efs (Já criado)

Criando o usuários tglefs

# aws iam create-user --user-name tglefs 
{
    "User": {
        "UserName": "tglefs", 
        "Path": "/", 
        "CreateDate": "2017-01-12T22:54:43.774Z", 
        "UserId": "AIDAJAGMXQCTQ5PHE755A", 
        "Arn": "arn:aws:iam::605689560453:user/tglefs"
    }
}

Criando o access-key do usuário tglefs

# aws iam create-access-key --user-name tglefs
{
    "AccessKey": {
        "UserName": "tglefs", 
        "Status": "Active", 
        "CreateDate": "2017-01-12T23:04:11.002Z", 
        "SecretAccessKey": "2evG6VI+xxbRknpYp1xkt/nxCtPi+kMykC9BF3n", 
        "AccessKeyId": "AKIAJOEHWM6C3QRX3XEA"
    }
}

Adicionado o usuário tglefs no grupo efs.

Obs: O grupo efs possui permissão full no Elastic File System.

# aws iam add-user-to-group --user-name tglefs --group-name efs

Acessando as instâncias e configurando o ambiente.

Passo 1 – ssh na instâncias 1.

ssh -i "tutoriaisgnulinux.pem" ubuntu@ec2-54-221-40-130.compute-1.amazonaws.com

Passo 2 – ssh na instância 2.

ssh -i "tutoriaisgnulinux.pem" ubuntu@ec2-54-146-188-140.compute-1.amazonaws.com

Passo 3 – Instalando o git.

# apt-get install git -y

Passo 4 – Clonando o repositório Docker-Ray-Rex-Ubuntu16 (https://github.com/vandocouto/Docker-Ray-Rex-Ubuntu16.git).

# git clone https://github.com/vandocouto/Docker-Ray-Rex-Ubuntu16.git

Passo 5 – Executando o script configure.sh

# sh Docker-Ray-Rex-Ubuntu16/configure.sh

Criando o Cluster Swarm

Passo 1 – Na instância ec2-54-221-40-130.compute-1.amazonaws.com vamos configurar o Docker Swarm. Está instância será a manager.
Obs: Em produção recomendo extremamente que utilize de 2 a 3 manager’s.

# docker swarm init --advertise-addr 192.168.202.152
Swarm initialized: current node (0nc1vvfjvsbx608257lgtbmql) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join \
    --token SWMTKN-1-4qc1us6olq661i2eswck2o3w5c4j61fv8yt70yfli6f6p3cz9e-bqu76v97y37x6tvh9p8zwolos \
    192.168.202.152:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

Passo 2 – Na instância ec2-54-146-188-140.compute-1.amazonaws.com vamos executar o comando para inclui-lá no Cluster Swarm.

# docker swarm join --token SWMTKN-1-4qc1us6olq661i2eswck2o3w5c4j61fv8yt70yfli6f6p3cz9e-bqu76v97y37x6tvh9p8zwolos 192.168.202.152:2377
This node joined a swarm as a worker.

Passo 3 – Verificando quantos nodes estão no Cluster Swarm.

# docker node ls
ID                           HOSTNAME            STATUS  AVAILABILITY  MANAGER STATUS
0nc1vvfjvsbx608257lgtbmql *  ip-192-168-202-152  Ready   Active        Leader
da1rjo1a03v6td8omth3ydw6k    ip-192-168-202-141  Ready   Active  

Configurado o Rex-Ray

Para gerar o conf do Rex-Ray eu recomendo que utilize o seguinte endereço abaixo:

http://rexrayconfig.codedellemc.com/

Captura de tela de 2017-01-12 21:33:55

Execute em ambas as instâncias os comandos abaixo:

Passo 1 – Acessando o diretório do rexray.

# cd /etc/rexray/

Passo 2 – Criando o arquivo config.yml

# vim config.yml
rexray:
  logLevel: debug
libstorage:
  service: efs
efs:
  secretKey: 2evG6VI+xxbRknpYp1xkt/nxCtPi+/kMykC9BF3n
  accessKey: AKIAJOEHWM6C3QRX3XEA
  securityGroups: sg-9ef337e2
  tag: Cluster-01

Passo 3 – Iniciando o rexray.

# rexray start
INFO[0000] updated log level                             logLevel=debug
DEBU[0000] os.args                                       time=1484264505120 val=[rexray start]
● rexray.service - rexray
   Loaded: loaded (/etc/systemd/system/rexray.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2017-01-12 23:41:45 UTC; 31ms ago
 Main PID: 13064 (rexray)
    Tasks: 4
   Memory: 3.2M
      CPU: 10ms
   CGroup: /system.slice/rexray.service
           └─13064 /usr/bin/rexray start -f

Passo 4 – Verificando o processo do rexray.

# ps aux | grep -i rexray
root     13934  1.2  6.6 348308 67784 ?        Ssl  23:41   0:00 /usr/bin/rexray start -f
root     13976  0.0  0.0  12944  1012 pts/0    S+   23:42   0:00 grep --color=auto -i rexray

Passo 5 – Listando os volumes com o comando rexray volume ls

# rexray volume ls

OBS: Execute o comando somente em uma das instâncias.
Passo 6 – Criando o primeiro volume chamado teste1.

# rexray volume create teste1
ID           Name    Status     Size
fs-72ca6f3b  teste1  available  6144

Passo 7 – Verificando pelo painel da AWS no EFS se o volume foi realmente criado.

Captura de tela de 2017-01-12 21:46:54

Criando o primeiro Service no Docker Swarm

Obs: Execute os comandos abaixo somente na instância (ec2-54-221-40-130.compute-1.amazonaws.com).

Passo 1 – Criação da rede overlay (vxlan).

# docker network create --driver overlay --subnet 10.0.0.0/24 mynet
etvhs13eek8ljhdwb63ne5vb2

Passo 2 – Listando as network’s.

# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
e58b46c43693        bridge              bridge              local               
a6bc847c183f        docker_gwbridge     bridge              local               
58ca7fc6fbb5        host                host                local               
9iv0soco2ooh        ingress             overlay             swarm               
etvhs13eek8l        mynet               overlay             swarm               
5fd41e2b640b        none                null                local  

Passo 3 – Criando o serviço.

Explicando:

docker service create –name = Nome que estou dando para o meu serviço/grupo de containers (nginx).

–replicas 6 = Total de containers que estou subindo (6).

–update-delay: 30s = (Extremamente importante para quem vai pretende trabalhar com versionamento dos containers).

–publish 80:80 = Portal que estou mapeando, neste caso a 80 HTTP.

–mount = O tipo de volume e o ponto de montagem.

nginx = imagem.

# docker service create --name nginx \
--replicas 6 \
--update-delay 30s \
--publish 80:80 \
--mount type=volume,source=www,target=/var/www,volume-driver=rexray \
nginx

Passo 4 – Listando o número de replicas.

# docker service ls
ID            NAME   REPLICAS  IMAGE  COMMAND
78u5sv397kd8  nginx  6/6       nginx  

Passo 5 – Listando os volumes Rex-Ray.

# rexray volume ls
fs-72ca6f3b  teste1  available  6144
fs-a1ca6fe8  www     attached   6144

rex-ray-efs

Prova dos 9

Passo 1 – Entre em um dos containers da instância (ec2-54-221-40-130.compute-1.amazonaws.com), acesse o diretório /var/www e em seguida crie um arquivo chamado teste.

# docker exec -it 0219bf6d3d34 bash
# cd /var/www/
# touch teste

Passo 2 – Na outra instância (ec2-54-146-188-140.compute-1.amazonaws.com), acesse o diretório /var/www e liste (ls) para verificar se existe o arquivo teste.

# docker exec -it a4944f2eb9e2 bash
# cd /var/www/
# ls
teste

Da hora neh!
kkkk

Feito…
Para fechar, basta criar um Load Balance e apontar para as instâncias.

Mais visite o link abaixo:

https://rexray.readthedocs.io/

Docker Swarm – Rex-Ray
Tagged on:

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

%d blogueiros gostam disto: