manuais-e-documentacao-itguys/documentacao conteineres/Docker_Swarm_Basico.md

95 lines
3.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MANUAL TÉCNICO - DOCKER SWARM: INICIALIZAÇÃO E GERENCIAMENTO
**Código:** ITGENG 0014/26 | **Classificação:** RESTRITO
**Responsável:** João Pedro Toledo Gonçalves | **Data:** {{DATA_ATUAL}}
## 1. HISTÓRICO DE REVISÃO
> ⚠️ **REGRA DE OURO:**
> 1. **Autor:** João Pedro Toledo Gonçalves.
> 2. **Descrição:** Criação do documento.
| Data | Versão | Descrição | Autor |
| :--- | :--- | :--- | :--- |
| {{DATA_ATUAL}} | 1.0 | Criação Inicial | João Pedro Toledo Gonçalves |
## 2. OBJETIVO
Habilitar o o modo Swarm (Orquestração Nativa) para garantir alta disponibilidade, balanceamento de carga e escalabilidade horizontal de containers.
## 3. PRÉ-REQUISITOS
- [ ] Mínimo de 3 máquinas com Docker instalado (Recomendado para HA).
- [ ] Portas liberadas entre os nós:
* **TCP/2377** (Cluster Management)
* **TCP/UDP 7946** (Communication)
* **UDP 4789** (Overlay Network)
## 4. PASSO A PASSO (EXECUÇÃO)
**Etapa 1: Inicializando o Manager (Nó Principal)**
1. No servidor escolhido como líder, execute:
```bash
docker swarm init --advertise-addr {{IP_DO_MANAGER}}
```
2. O comando retornará um token. Copie-o. Exemplo:
`docker swarm join --token SWMTKN-1-xx... {{IP_DO_MANAGER}}:2377`
**Etapa 2: Adicionando Workers**
1. Nos outros servidores, cole o comando copiado na etapa anterior.
2. Confirme a entrada no cluster:
```bash
docker node ls
```
> O status deve ser **Ready** e **Active**.
**Etapa 3: Deploy de Serviços (Services vs Containers)**
> **NOTA:** No Swarm, não damos deploy em "Containers", mas sim em "Services". O Swarm decide onde o container vai rodar.
1. Crie um serviço replicado (3 réplicas do Nginx).
```bash
docker service create --name meu-site-ha --replicas 3 -p 80:80 nginx
```
2. Liste os serviços e verifique a distribuição.
```bash
docker service ls
docker service ps meu-site-ha
```
**Etapa 4: Escala e Atualização (Rolling Update)**
1. Aumente a capacidade para 5 containers.
```bash
docker service scale meu-site-ha=5
```
2. Atualize a imagem sem downtime (Rolling Update).
```bash
docker service update --image nginx:alpine meu-site-ha
```
## 5. SOLUÇÃO DE PROBLEMAS (TROUBLESHOOTING)
**Problema 1: Nós não conseguem se comunicar (Status Down)**
* **Causa:** Firewall bloqueando porta 7946 ou 4789.
* **Solução:** Verifique `telnet IP 2377` e libere as portas no Security Group/Firewall.
**Problema 2: Split Brain (Líderes perdidos)**
* **Causa:** Mais de 50% dos Managers caíram.
* **Solução:**
1. No manager sobrevivente: `docker swarm init --force-new-cluster`.
## 6. DADOS TÉCNICOS
| Campo | Valor | Descrição |
| :--- | :--- | :--- |
| **Driver Rede** | `overlay` | Rede criptografada multi-host |
| **Routing Mesh** | `Ingress` | Balanceador de carga interno (L4) |
## 7. VALIDAÇÃO FINAL
- [ ] `docker node ls` mostra todos os nós online?
- [ ] Ao desligar um nó worker, os containers migram para outro?
- [ ] Acessar o IP de QUALQUER nó na porta 80 carrega o site (Routing Mesh)?