Nesse artigo vamos abordar alguns conceitos fundamentais na hora de entender container e orquestração.
Irei passar conceitos e práticas dos seguintes assuntos:
- Tipos de instâncias(nodes).
- Status de um node.
- Labels.
- Secret.
- Services.
- Load Balancer.
- Volumes.
- Networks.
1. Tipos de instâncias.
No swarm temos 2 tipos de nodes workers e os managers, os nodes workers executam os serviços delegados a eles e não é possível fazer nenhuma alteração em nosso cluster, os managers permite alterar o cluster, gerenciar os serviços e cuidam da saúde do cluster, caso algum container fique indisponível por algum motivo é ele que têm o papel de criar um novo container.
Para promover um node worker para manager utiliza-se o comando: docker node promote <hostname ou id do node>
e para rebaixar um node manager: docker node demote <hostname ou id do node>
2. Status de um node.
Os nodes podem está em três estados, active, pause e drain. O status active sinaliza que está tudo certo com a saúde do node e que pode executar tarefas. Já o status pause o node fica impossibilitado de receber novas tarefas mas continuam a execução das que estão em execução, e por fim o status drain na maioria das vezes é utilizado quando precisamos fazer manutenção nessa instância, mata todos containers em execução, transferem para outros nodes ativos e é impossibilitado de executar novas tarefas.
Para alterar o status de um node: docker node update --availability <active|pause|drain> <hostname | id do node>
3. Labels de um node.
Os labels são rótulos chave=valor que podemos implementar em nossos node afim de identifica-los para uma possível regra de execução dos services, podemos rodar um serviço especifico apenas em nodes com determinada label.
Para adicionar uma label a um node: docker node update --label-add <chave=valor> <hostname | id do node>
4. Secrets de um node.
São dados que não podem ser colocados diretamente na aplicação, transmitidos por uma rede ou expostas em algum dockerfile, pode ser senhas, certificados ssl, chaves privadas ssh. Os secrets só é visível pelos serviços que possuem o acesso ao mesmo e apenas enquanto estiver em execução.
Para criar um secret: docker secret create <nome do seecret> <diretório do arquivo>
Por exemplo: printf "This is a secret" | docker secret create my_secret_data -
Para criar um serviço que utilize esse segredo:
docker service create --name redis --secret my_secret_data redis:alpine
Os segredos podem ser acessados pelo serviço no diretório: /run/secrets/<secret_name>
5. Services.
Um service é composto por um ou mais containers, é na criação dele que escolhemos qual imagem utilizar, quais comandos rodar ao subir o serviço, quais as portas expostas, os secrets a serem utilizados, regras de onde será executado, limite de cpus e memórias, número de replicas que deverá está em execução, irei dar um exemplo básico pois existe bastantes configurações, irei abordar mais a fundo algumas configurações quando criarmos uma stack de serviços.
Para criar um serviço:
docker service create --name my_web nginx
6. Load Balancer.
Load balancer é a técnica de distribuir a carga de trabalho das requisições entre os containers que estão em execução, podemos fazer essa distribuição com o nginx, traefik, LB de um provedor, entre outros.
7. Volumes
Quando falamos de volumes no docker estamos falando de um método de persistir e acessar dados dentro dos containers. Com os volumes podemos persistir dados importantes e compartilhar esses dados entre containers caso necessário. Como estamos trabalhando com o swarm temos que utilizar alguma técnica de compartilhamento desse volume, podemos utilizar o S3 ou utilizar algum plugin.
Criando volumes junto com um serviço:
docker service create --name <nome do service> --mount type=volume,src=<nome do volume>,dst=<local destino no container> nginx
obs: criando dessa maneira apenas o node que criou o serviço terá "acesso" a esse volume, então como visto acima devemos utilizar o S3 como compartilhamento de dados ou utilizar algum plugin.
8. Networks
As redes no docker facilitam a comunicação entre containers e ambientes externos, temos alguns tipos de rede no docker:
- bridge é a rede padrão quando não especificamos nada na hora da criação dos nossos containers, seu caso de uso é quando precisamos conectar vários containers que estão no mesmo docker host.
- none é a ausência de rede, utilizado para isolar um container de comunicação externa.
- overlay é utilizada quando precisamos conectar a diferentes docker host ou quando temos muitos serviços em nosso cluster swarm. É um assunto bem extenso e necessita de atenção, pois estamos tratando de comunicação, então mais atenção quanto a segurança.
Para criarmos uma rede no docker:
docker network create --driver=<driver a ser utilizado> <nome da rede>
Enfim pessoal, o próximo artigo será mais prático e o assunto abordado será volumes.
Top comments (0)