Como Configurar Cloud Bursting no Docker Swarm em 15 Minutos
2025-10-18 · Equipe SwarmBurst · 9 min de leitura
Neste tutorial, vamos configurar cloud bursting completo no seu cluster Docker Swarm usando o SwarmBurst. Ao final, seu cluster será capaz de escalar automaticamente para a AWS quando a demanda aumentar e reduzir quando ela diminuir — tudo sem intervenção manual.
Pré-requisitos
Antes de começar, certifique-se de que você tem:
- 2+ servidores (VPS ou on-premise) com Docker instalado (versão 24.0+)
- Uma conta AWS com acesso programático (Access Key e Secret Key)
- Uma conta SwarmBurst (crie uma gratuita em swarmburst.io)
- Acesso SSH aos servidores
- Portas abertas: 2377/tcp, 7946/tcp+udp, 4789/udp entre os nós
Passo 1: Inicializando o Docker Swarm (3 minutos)
Se você já tem um cluster Docker Swarm rodando, pule para o Passo 2.
No servidor que será o nó manager, execute:
# Inicializar o Swarm
docker swarm init --advertise-addr <IP_DO_MANAGER>
O comando retornará um token para adicionar workers. Nos demais servidores, execute:
# Adicionar workers ao cluster
docker swarm join --token <TOKEN_RETORNADO> <IP_DO_MANAGER>:2377
Verifique se todos os nós estão no cluster:
docker node ls
Você deve ver algo como:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
abc123def456 * manager-1 Ready Active Leader
ghi789jkl012 worker-1 Ready Active
mno345pqr678 worker-2 Ready Active
Passo 2: Instalando o Agente SwarmBurst (2 minutos)
O agente SwarmBurst roda como um serviço no nó manager do seu cluster. A instalação é feita via Docker Compose.
Crie o arquivo de configuração no nó manager:
mkdir -p /opt/swarmburst && cd /opt/swarmburst
Crie o arquivo docker-compose.yml:
version: "3.8"
services:
swarmburst-agent:
image: swarmburst/agent:latest
deploy:
placement:
constraints:
- node.role == manager
restart_policy:
condition: on-failure
delay: 5s
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./config:/etc/swarmburst
environment:
- SWARMBURST_API_KEY=${SWARMBURST_API_KEY}
- SWARMBURST_CLUSTER_NAME=${CLUSTER_NAME}
ports:
- "9090:9090"
networks:
- swarmburst-net
networks:
swarmburst-net:
driver: overlay
Defina suas variáveis de ambiente:
export SWARMBURST_API_KEY="sua-api-key-do-painel-swarmburst"
export CLUSTER_NAME="producao-principal"
Faça o deploy do agente:
docker stack deploy -c docker-compose.yml swarmburst
Verifique se o agente está rodando:
docker service ls | grep swarmburst
ID NAME MODE REPLICAS IMAGE
x1y2z3a4b5 swarmburst_swarmburst-agent replicated 1/1 swarmburst/agent:latest
Neste ponto, o agente já está coletando métricas do cluster. Você pode verificar acessando http://<IP_DO_MANAGER>:9090/health.
Passo 3: Configurando os Thresholds de Scaling (3 minutos)
Os thresholds definem quando o SwarmBurst deve provisionar ou remover nós na nuvem. Crie o arquivo de configuração:
touch /opt/swarmburst/config/scaling-policy.yml
Edite o arquivo scaling-policy.yml:
# /opt/swarmburst/config/scaling-policy.yml
scaling:
# Política de scale-up (adicionar nós)
scale_up:
conditions:
- metric: cpu_percent
threshold: 75
duration: 120s # CPU > 75% por 2 minutos
operator: ">"
- metric: memory_percent
threshold: 80
duration: 60s # Memória > 80% por 1 minuto
operator: ">"
- metric: requests_per_second
threshold: 1000
duration: 60s # Mais de 1000 req/s por 1 minuto
operator: ">"
# Qualquer UMA das condições acima dispara o scale-up
match: any
# Máximo de nós adicionais na nuvem
max_burst_nodes: 5
# Cooldown entre scale-ups (evita oscilação)
cooldown: 300s
# Política de scale-down (remover nós)
scale_down:
conditions:
- metric: cpu_percent
threshold: 40
duration: 300s # CPU < 40% por 5 minutos
operator: "<"
- metric: memory_percent
threshold: 50
duration: 300s # Memória < 50% por 5 minutos
operator: "<"
# TODAS as condições devem ser verdadeiras para scale-down
match: all
# Cooldown entre scale-downs
cooldown: 600s
# Tempo mínimo que um nó burst fica ativo
min_node_lifetime: 900s
As configurações acima são um bom ponto de partida para a maioria das aplicações. Vamos entender os pontos principais:
duration: Evita que picos momentâneos (1-2 segundos) disparem scaling desnecessáriocooldown: Previne oscilação rápida entre scale-up e scale-downmin_node_lifetime: Garante que nós burst fiquem ativos por tempo suficiente para justificar o custo de provisionamentomatch: anyno scale-up: Basta uma métrica ultrapassar o limite para escalar (mais responsivo)match: allno scale-down: Todas as métricas devem estar abaixo do limite para desescalar (mais conservador)
Passo 4: Configurando as Credenciais AWS (3 minutos)
O SwarmBurst precisa de acesso à AWS para provisionar instâncias EC2. Recomendamos criar uma IAM policy específica com permissões mínimas.
Criando a IAM Policy na AWS
No console da AWS, crie uma nova policy com o seguinte JSON:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:RunInstances",
"ec2:TerminateInstances",
"ec2:DescribeInstances",
"ec2:DescribeInstanceStatus",
"ec2:CreateTags",
"ec2:DescribeImages",
"ec2:DescribeSecurityGroups",
"ec2:DescribeSubnets",
"ec2:DescribeKeyPairs",
"ec2:RequestSpotInstances",
"ec2:CancelSpotInstanceRequests",
"ec2:DescribeSpotInstanceRequests"
],
"Resource": "*"
}
]
}
Crie um usuário IAM, atribua essa policy e gere as chaves de acesso.
Configurando o Provider AWS no SwarmBurst
Crie o arquivo de configuração do provider:
# /opt/swarmburst/config/provider.yml
provider:
type: aws
region: sa-east-1 # São Paulo
credentials:
access_key_id: "AKIAIOSFODNN7EXAMPLE"
secret_access_key: "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
instance:
type: c5.xlarge # 4 vCPU, 8GB RAM
ami: ami-0abcdef1234567890 # Amazon Linux 2 com Docker pré-instalado
key_pair: swarmburst-nodes
security_group: sg-swarmburst
subnet: subnet-abc123
# Usar instâncias Spot para economia máxima
use_spot: true
spot_max_price: "0.08" # Preço máximo por hora em USD
# Script de inicialização (já inclui Docker e join no Swarm)
user_data_template: default
# Tags aplicadas às instâncias burst
tags:
Environment: production
ManagedBy: swarmburst
Cluster: producao-principal
Importante sobre segurança: Em produção, recomendamos usar AWS Secrets Manager ou variáveis de ambiente em vez de colocar as credenciais diretamente no arquivo. O SwarmBurst suporta ambas as abordagens:
# Alternativa usando variáveis de ambiente
credentials:
access_key_id: "${AWS_ACCESS_KEY_ID}"
secret_access_key: "${AWS_SECRET_ACCESS_KEY}"
Passo 5: Configurando Limites de Custo (2 minutos)
Um diferencial importante do SwarmBurst é o controle de custos integrado. Configure limites para evitar surpresas na fatura:
# /opt/swarmburst/config/cost-limits.yml
cost_control:
# Limite máximo de gasto mensal com burst (em USD)
monthly_budget: 150.00
# Alerta quando atingir % do orçamento
alerts:
- threshold: 50
notify: ["email:devops@suaempresa.com"]
- threshold: 80
notify: ["email:devops@suaempresa.com", "slack:#infra-alerts"]
- threshold: 95
notify: ["email:devops@suaempresa.com", "email:cto@suaempresa.com", "slack:#infra-alerts"]
action: block_new_scaling # Bloqueia novos scale-ups
# Estimativa de custo em tempo real no dashboard
show_realtime_cost: true
# Preferir instâncias Spot sempre que possível
prefer_spot: true
# Encerrar nós burst se o custo mensal for atingido
hard_limit: true
Com essa configuração, você nunca gastará mais do que US$ 150/mês com burst, e será alertado conforme se aproxima do limite.
Passo 6: Aplicando as Configurações e Testando (2 minutos)
Com todos os arquivos de configuração criados, reinicie o agente para aplicar:
docker service update --force swarmburst_swarmburst-agent
Verifique se as configurações foram carregadas corretamente:
# Verificar logs do agente
docker service logs swarmburst_swarmburst-agent --tail 50
Você deve ver mensagens como:
[INFO] SwarmBurst Agent v2.4.1 starting...
[INFO] Cluster 'producao-principal' connected successfully
[INFO] Scaling policy loaded: scale_up (3 conditions, match=any), scale_down (2 conditions, match=all)
[INFO] AWS provider configured: region=sa-east-1, instance_type=c5.xlarge, spot=enabled
[INFO] Cost control active: monthly_budget=$150.00, hard_limit=true
[INFO] Monitoring started. Current nodes: 3 (0 burst)
[INFO] Current metrics: cpu=32%, memory=45%, rps=234
Teste manual de scaling
Para verificar que tudo funciona, você pode disparar um scale-up manual via API:
curl -X POST http://localhost:9090/api/v1/scale \
-H "Authorization: Bearer ${SWARMBURST_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"action": "up", "nodes": 1, "reason": "manual-test"}'
Acompanhe o provisionamento no dashboard do SwarmBurst (painel web acessível em https://app.swarmburst.io) ou pelos logs:
[INFO] Scale-up triggered: reason=manual-test
[INFO] Provisioning 1 Spot instance (c5.xlarge) in sa-east-1...
[INFO] Instance i-0abc123def456 launching...
[INFO] Instance i-0abc123def456 running (52s)
[INFO] Joining instance to Swarm cluster...
[INFO] Node 'burst-node-1' joined cluster successfully
[INFO] Current nodes: 4 (1 burst) | Estimated burst cost: $0.06/hr
Para remover o nó de teste:
curl -X POST http://localhost:9090/api/v1/scale \
-H "Authorization: Bearer ${SWARMBURST_API_KEY}" \
-H "Content-Type: application/json" \
-d '{"action": "down", "nodes": 1, "reason": "manual-test-cleanup"}'
Estrutura Final de Arquivos
Após completar todos os passos, sua estrutura deve estar assim:
/opt/swarmburst/
├── docker-compose.yml
└── config/
├── scaling-policy.yml
├── provider.yml
└── cost-limits.yml
Dashboard e Monitoramento
Após a configuração, acesse o dashboard do SwarmBurst em https://app.swarmburst.io para visualizar:
- Métricas em tempo real: CPU, memória e requisições de cada nó
- Histórico de scaling: Quando e por que cada scale-up/down aconteceu
- Custos acumulados: Quanto foi gasto com burst no mês atual
- Projeção de custos: Estimativa do gasto até o final do mês baseada no padrão atual
- Mapa do cluster: Visualização dos nós fixos e burst ativos
Referência: Veja o screenshot do dashboard em nossa documentação em docs.swarmburst.io/dashboard para uma visão completa da interface de monitoramento.
Dicas de Otimização
Depois que o SwarmBurst estiver rodando por alguns dias, considere estas otimizações:
Ajuste os thresholds baseado em dados reais
# Exemplo: se seu app é CPU-intensive, reduza o threshold de CPU
scale_up:
conditions:
- metric: cpu_percent
threshold: 65 # Mais agressivo para CPU
duration: 90s
Configure scaling por horário
# Scaling mais agressivo durante horário comercial
schedule:
business_hours:
cron: "0 8 * * 1-5" # Seg-Sex 8h
scale_up_threshold_cpu: 60
max_burst_nodes: 5
off_hours:
cron: "0 19 * * 1-5" # Seg-Sex 19h
scale_up_threshold_cpu: 85
max_burst_nodes: 2
Use instâncias diferentes para workloads específicos
# Nós compute-optimized para processamento
instance_profiles:
default:
type: c5.xlarge
use_spot: true
memory_intensive:
type: r5.xlarge
use_spot: true
trigger_label: "workload=memory"
Solução de Problemas
| Problema | Causa Provável | Solução |
|---|---|---|
| Agente não conecta ao cluster | Docker socket sem permissão | Verifique o volume mount do docker.sock |
| Instância AWS não entra no Swarm | Portas bloqueadas | Abra 2377, 7946, 4789 no Security Group |
| Scale-up muito lento | AMI sem Docker pré-instalado | Use a AMI recomendada do SwarmBurst |
| Custo acima do esperado | Instâncias Spot não disponíveis | Verifique a região e o spot_max_price |
| Nós burst não recebem tráfego | Rede overlay não configurada | Verifique se a rede overlay está acessível |
Próximos Passos
Com o cloud bursting configurado, você pode:
- Monitorar o comportamento por 1-2 semanas e ajustar thresholds
- Configurar alertas no Slack ou email para eventos de scaling
- Otimizar custos testando diferentes tipos de instância e regiões
- Configurar scaling preditivo para antecipar picos antes que aconteçam
Precisa de Ajuda?
Se encontrar dificuldades durante a configuração, temos várias formas de suporte:
- Documentação completa: docs.swarmburst.io
- Comunidade no Discord: discord.gg/swarmburst
- Suporte por email: suporte@swarmburst.io
- Suporte dedicado: Chat ao vivo no dashboard
Quer uma proposta personalizada? Fale com nosso time e receba um diagnóstico completo da sua infraestrutura.
Tutorial atualizado para SwarmBurst Agent v2.4.1. Se você está usando uma versão anterior, consulte o guia de migração em docs.swarmburst.io/upgrade.