docker swarm 组件详细讲解

以下是 Docker Swarm 核心组件的详细解析,涵盖 Node、Service、Task 等关键概念及其相互关系:


一、Docker Swarm 核心架构图

 


二、组件深度解析

1. 节点(Node)

类型角色说明关键特性
Manager 集群大脑 - 运行 Raft 共识算法 维护集群状态
- 负责服务调度和API响应
- 推荐3/5/7个(奇数)
Worker 任务执行者 - 只运行容器任务
- 不能参与集群决策
- 可随时动态加入/退出

Manager 高可用原理:

 

2. 服务(Service)

定义:服务是 Swarm 的核心部署单元,声明了容器的 期望状态。

服务结构:

 
# docker-compose.yml 示例
services:
  web:
    image: nginx:alpine
    deploy:
      replicas: 3
      resources:
        limits:
          cpus: "0.5"
          memory: 256M
      restart_policy:
        condition: on-failure

服务类型:

类型特点适用场景
Replicated 固定副本数(默认) Web服务、API等
Global 每个Worker节点运行1个副本 监控代理、日志收集器等

3. 任务(Task)

定义:服务的最小执行单元,1个Task对应1个容器实例。

任务生命周期:

 

关键字段:

docker service inspect --format='{{.Spec.TaskTemplate}}' web
# 输出示例:
{
  "ContainerSpec": {
    "Image": "nginx:alpine@sha256:...",
    "Args": ["nginx", "-g", "daemon off;"]
  },
  "Resources": {
    "Limits": {"NanoCPUs": 500000000, "MemoryBytes": 268435456}
  }
}

4. 容器(Container)

与Task的关系:

  • Task 是 Swarm 的调度单元

  • Container 是 Task 的具体实现

  • 1个Task对应1个Container(但Task失败后可能重建新Container)


三、组件交互流程

1. 服务创建过程

2. 服务扩缩容流程

docker service scale web=5
  1. Manager 修改服务副本数

  2. Scheduler 计算需要新增/删除的Task

  3. Worker 执行容器启停操作

  4. 集群状态最终一致


四、关键数据结构

1. 服务定义(Service Spec)

type ServiceSpec struct {
    Annotations  Annotations
    TaskTemplate TaskSpec      // 任务模板
    Mode         ServiceMode   // Replicated/Global
    UpdateConfig *UpdateConfig // 更新策略
    Networks     []NetworkAttachmentConfig
    EndpointSpec *EndpointSpec // 暴露端口
}

2. 任务状态(Task Status)

docker service ps web

输出字段说明:

字段含义
CURRENT STATE Running/Preparing/Failed
ERROR 失败原因(如"no suitable node")
DESIRED STATE Shutdown/Running

五、生产级配置示例

1. 完整服务定义

docker service create \
  --name db \
  --replicas 3 \
  --network my-overlay \
  --mount type=volume,source=dbdata,target=/var/lib/postgresql \
  --constraint 'node.role==worker' \
  --restart-condition on-failure \
  --restart-delay 5s \
  --update-parallelism 2 \
  --update-delay 10s \
  --limit-cpu 2 \
  --limit-memory 1G \
  -e POSTGRES_PASSWORD_FILE=/run/secrets/dbpass \
  --secret dbpass \
  postgres:14

2. 组件关系验证

# 查看服务详情
docker service inspect --pretty db

# 查看任务列表
docker service ps db

# 查看容器详情
docker inspect $(docker ps -q --filter name=db)

六、常见问题排查

1. Task 持续失败

# 查看失败Task日志
docker logs $(docker ps -aq --filter name=db --filter status=exited)

# 检查调度约束
docker service inspect --format='{{.Spec.TaskTemplate.Placement.Constraints}}' db

2. 服务网络不通

# 测试容器间通信
docker exec -it web.1.xxx ping db

# 检查网络配置
docker network inspect my-overlay

通过理解这些核心组件的设计原理和交互机制,可以更高效地管理和排查 Swarm 集群问题。实际应用中建议结合 docker service/logs/inspect 等命令深入分析组件状态。

posted @ 2025-06-30 11:33  郭慕荣  阅读(68)  评论(0)    收藏  举报