promovaweb-devops-docker-swarm

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Skill de Docker Swarm

Docker Swarm技能

Domine o Docker Swarm para orquestração de containers, gerenciamento de cluster e implantações (deployments) em produção.
掌握Docker Swarm以进行容器编排、集群管理和生产环境部署(deployments)。

Propósito

用途

Configurar e gerenciar clusters Docker Swarm para alta disponibilidade, escalonamento de serviços e orquestração em produção.
配置和管理Docker Swarm集群,实现高可用性、服务扩缩容和生产环境编排。

Parâmetros

参数

ParâmetroTipoObrigatórioPadrãoDescrição
managersnumberNão3Número de nós (nodes) managers
workersnumberNão-Número de nós (nodes) workers
encryptedbooleanNotrueCriptografar redes overlay
参数类型必填默认值描述
managersnumber3manager节点数量
workersnumber-worker节点数量
encryptedbooleantrue加密overlay网络

Configuração do Cluster

集群配置

Inicializar Swarm

初始化Swarm

bash
undefined
bash
undefined

Inicializar no primeiro manager

Inicializar no primeiro manager

docker swarm init --advertise-addr <MANAGER_IP>
docker swarm init --advertise-addr <MANAGER_IP>

Obter tokens de adesão

Obter tokens de adesão

docker swarm join-token worker docker swarm join-token manager
docker swarm join-token worker docker swarm join-token manager

Entrar como worker

Entrar como worker

docker swarm join --token <WORKER_TOKEN> <MANAGER_IP>:2377
docker swarm join --token <WORKER_TOKEN> <MANAGER_IP>:2377

Entrar como manager

Entrar como manager

docker swarm join --token <MANAGER_TOKEN> <MANAGER_IP>:2377
undefined
docker swarm join --token <MANAGER_TOKEN> <MANAGER_IP>:2377
undefined

Alta Disponibilidade (3 ou 5 managers)

高可用性(3或5个manager节点)

bash
undefined
bash
undefined

Quorum do Manager: N/2 + 1

Quorum do Manager: N/2 + 1

3 managers = tolera 1 falha

3 managers = tolera 1 falha

5 managers = tolera 2 falhas

5 managers = tolera 2 falhas

undefined
undefined

Implantação de Serviço (Service Deployment)

服务部署(Service Deployment)

Serviço Básico

基础服务

bash
undefined
bash
undefined

Criar serviço

Criar serviço

docker service create
--name webapp
--replicas 3
--publish 80:80
nginx:alpine
docker service create
--name webapp
--replicas 3
--publish 80:80
nginx:alpine

Escalar

Escalar

docker service scale webapp=5
docker service scale webapp=5

Atualizar imagem

Atualizar imagem

docker service update --image nginx:1.25-alpine webapp
docker service update --image nginx:1.25-alpine webapp

Rollback

Rollback

docker service rollback webapp
undefined
docker service rollback webapp
undefined

Configuração Completa de Serviço

完整服务配置

bash
docker service create \
  --name api \
  --replicas 3 \
  --network backend \
  --publish 8080:3000 \
  --mount type=volume,source=data,target=/data \
  --secret db_password \
  --env NODE_ENV=production \
  --limit-cpu 0.5 \
  --limit-memory 512M \
  --update-delay 10s \
  --update-parallelism 1 \
  --update-failure-action rollback \
  --health-cmd "curl -f http://localhost:3000/health" \
  --health-interval 30s \
  myapp:latest
bash
docker service create \
  --name api \
  --replicas 3 \
  --network backend \
  --publish 8080:3000 \
  --mount type=volume,source=data,target=/data \
  --secret db_password \
  --env NODE_ENV=production \
  --limit-cpu 0.5 \
  --limit-memory 512M \
  --update-delay 10s \
  --update-parallelism 1 \
  --update-failure-action rollback \
  --health-cmd "curl -f http://localhost:3000/health" \
  --health-interval 30s \
  myapp:latest

Implantação de Stack (Stack Deployment)

Stack部署(Stack Deployment)

Stack de Produção

生产环境Stack

yaml
undefined
yaml
undefined

stack.yaml

stack.yaml

services: frontend: image: frontend:${VERSION:-latest} deploy: replicas: 3 placement: constraints: - node.role == worker update_config: parallelism: 1 delay: 10s failure_action: rollback resources: limits: cpus: '0.5' memory: 256M ports: - "80:80" networks: - frontend healthcheck: test: ["CMD", "curl", "-f", "http://localhost/health"] interval: 30s
backend: image: backend:${VERSION:-latest} deploy: replicas: 3 secrets: - db_password networks: - frontend - backend
networks: frontend: driver: overlay backend: driver: overlay internal: true
secrets: db_password: external: true

```bash
services: frontend: image: frontend:${VERSION:-latest} deploy: replicas: 3 placement: constraints: - node.role == worker update_config: parallelism: 1 delay: 10s failure_action: rollback resources: limits: cpus: '0.5' memory: 256M ports: - "80:80" networks: - frontend healthcheck: test: ["CMD", "curl", "-f", "http://localhost/health"] interval: 30s
backend: image: backend:${VERSION:-latest} deploy: replicas: 3 secrets: - db_password networks: - frontend - backend
networks: frontend: driver: overlay backend: driver: overlay internal: true
secrets: db_password: external: true

```bash

Implantar stack

Implantar stack

docker stack deploy -c stack.yaml myapp
docker stack deploy -c stack.yaml myapp

Listar serviços

Listar serviços

docker stack services myapp
docker stack services myapp

Remover stack

Remover stack

docker stack rm myapp
undefined
docker stack rm myapp
undefined

Secrets & Configs

密钥与配置(Secrets & Configs)

Secrets

Secrets

bash
undefined
bash
undefined

Criar secret

Criar secret

echo "password" | docker secret create db_password -
echo "password" | docker secret create db_password -

Usar no serviço

Usar no serviço

docker service update --secret-add db_password myservice
docker service update --secret-add db_password myservice

Rotacionar secret

Rotacionar secret

echo "newpassword" | docker secret create db_password_v2 - docker service update
--secret-rm db_password
--secret-add source=db_password_v2,target=db_password
myservice
undefined
echo "newpassword" | docker secret create db_password_v2 - docker service update
--secret-rm db_password
--secret-add source=db_password_v2,target=db_password
myservice
undefined

Configs

Configs

bash
undefined
bash
undefined

Criar config

Criar config

docker config create nginx_config ./nginx.conf
docker config create nginx_config ./nginx.conf

Usar no serviço

Usar no serviço

docker service create
--config source=nginx_config,target=/etc/nginx/nginx.conf
nginx
undefined
docker service create
--config source=nginx_config,target=/etc/nginx/nginx.conf
nginx
undefined

Gerenciamento de Nós (Node Management)

节点管理(Node Management)

bash
undefined
bash
undefined

Listar nós

Listar nós

docker node ls
docker node ls

Drenar nó (manutenção)

Drenar nó (manutenção)

docker node update --availability drain <node>
docker node update --availability drain <node>

Ativar nó

Ativar nó

docker node update --availability active <node>
docker node update --availability active <node>

Adicionar label

Adicionar label

docker node update --label-add role=database <node>
docker node update --label-add role=database <node>

Promover a manager

Promover a manager

docker node promote <node>
docker node promote <node>

Rebaixar de manager

Rebaixar de manager

docker node demote <node>
undefined
docker node demote <node>
undefined

Tratamento de Erros

错误处理

Erros Comuns

常见错误

ErroCausaSolução
no suitable node
Restrições não atendidasRelaxe ou adicione nós
not converging
Falha no health checkVerifique os logs do serviço
Raft: no leader
Quorum perdidoRestaure os managers
错误原因解决方案
no suitable node
未满足约束条件放宽约束或添加节点
not converging
健康检查失败查看服务日志
Raft: no leader
丢失法定人数恢复manager节点

Recuperação de Manager

Manager恢复

bash
undefined
bash
undefined

Se o quorum for perdido, force um novo cluster

Se o quorum for perdido, force um novo cluster

docker swarm init --force-new-cluster --advertise-addr <IP>
undefined
docker swarm init --force-new-cluster --advertise-addr <IP>
undefined

Solução de Problemas (Troubleshooting)

问题排查(Troubleshooting)

Checklist de Depuração

调试检查清单

  • Swarm ativo?
    docker info | grep Swarm
  • Nós saudáveis?
    docker node ls
  • Serviço rodando?
    docker service ls
  • Tasks alocadas?
    docker service ps <svc>
  • Swarm是否运行?
    docker info | grep Swarm
  • 节点是否健康?
    docker node ls
  • 服务是否运行?
    docker service ls
  • 任务是否已分配?
    docker service ps <svc>

Diagnósticos

诊断

bash
undefined
bash
undefined

Status do serviço

Status do serviço

docker service ls
docker service ls

Status da task

Status da task

docker service ps <service> --no-trunc
docker service ps <service> --no-trunc

Logs do serviço

Logs do serviço

docker service logs -f <service>
docker service logs -f <service>

Problemas no nó

Problemas no nó

docker node inspect <node> --pretty
undefined
docker node inspect <node> --pretty
undefined