95 lines
3.0 KiB
Markdown
95 lines
3.0 KiB
Markdown
# 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)?
|