Docker Swarm 集群

Swarm 是 Docker 公司推出的用来管理docker集群的平台,Swarm 是 Docker 官方容器编排项目,可以在多个服务器或主机上创建容器集群服务,Swarm 自己不运行容器,它只是接受 Docker 客户端发来的请求,调度适合的节点来运行容器,

Swarm 是典型的master-slave结构,通过发现服务来选举manager。manager是中心管理节点,各个node上运行agent接受manager的统一管理,集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持,
避免了单点的瓶颈问题,同时也内置了DNS的负载均衡和对外部负载均衡机制的集成支持

2、概念
swarm:集群管理和编排
node:节点,一个节点就是docker集群中的一个实例,我们可以在单台服务器上运行一个或多个节点。
service:应用编排,一个服务是任务的定义,管理机或工作节点上执行。
task:应用实例,任务是在docekr容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点

# 使用方法
docker swarm:集群管理,子命令有init, join, leave, update。(docker swarm --help查看帮助)
docker service:服务创建,子命令有create, inspect, update, remove, tasks。(docker service--help查看帮助)
docker node:节点管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm。(docker node --help查看帮助)

node是加入到swarm集群中的一个docker引擎实体,可以在一台物理机上运行多个node,node分为:
manager nodes,管理节点
worker nodes,工作节点
*
1)manager node管理节点:执行集群的管理功能,维护集群的状态,选举一个leader节点去执行调度任务。
2)worker node工作节点:接收和执行任务。参与容器集群负载调度,仅用于承载task。
3)service服务:一个服务是工作节点上执行任务的定义。创建一个服务,指定了容器所使用的镜像和容器运行的命令。
   service是运行在worker nodes上的task的描述,service的描述包括使用哪个docker 镜像,以及在使用该镜像的容器中执行什么命令。
4)task任务:一个任务包含了一个容器及其运行的命令。task是service的执行实体,task启动docker容器并在容器中执行任务。
*
3、Swarm的调度策略
swarm在调度(scheduler)节点(leader节点)运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread,binpack,random
*
1)Random
随机选择一个Node来运行容器,一般用作调试用,spread和binpack策略会根据各个节点的可用的CPU, RAM以及正在运
行的容器的数量来计算应该运行容器的节点。
*
2)Spread
在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点。
使用Spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。
*
3)Binpack
Binpack策略最大化的避免容器碎片化,就是说binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在
一个节点上面。
*
*
Swarm Manager:
● API:接受命令并创建 service 对象(创建对象)
● orchestrator:为 service 对象创建的 task 进行编排工作(服务编排)
● allocater:为各个 task 分配 IP 地址(分配 IP)
● dispatcher:将 task 分发到 nodes(分发任务)
● scheduler:安排一个 worker 节点运行 task(运行任务)

Worker Node:
● worker:连接到调度器,检查分配的 task(检查任务)
● executor:执行分配给 worker 节点的 task(执行任务)

4、Docker Swarm集群部署
机器环境(三台机器,centos系统)
IP:192.168.31.43 主机名:manager43 担任角色:swarm manager
IP:192.168.31.188 主机名:node188 担任角色:swarm node
IP:192.168.31.139 主机名:node139 担任角色:swarm node

修改主机名,关闭防火墙

#修改主机名
hostnamectl set-hostname manager43
hostnamectl set-hostname node188
hostnamectl set-hostname node139

#关闭三台服务器上的防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service

创建 Swarm 集群

# Step 1: 在 192.168.31.43 主服务器上创建 Swarm 集群
docker swarm init --advertise-addr 192.168.31.43

     # 这就是添加节点的方式(要保存初始化后token,因为在节点加入时要使用token作为通讯的密钥)
     docker swarm join --token SWMTKN-1-4kdb7ysckerhxc6gxc3bpltkxtm8o45yq1ikyv1kie825zibhh-bhwazb9y8i3s92v8mpv5c06so 192.168.31.43:2377
     # 可能会遇到一个小小的问题:提示This node is already part of a swarm. Use "docker swarm leave" to leave this swarm and join another one.
     # 解决方法,这里的leave就是在集群中删除节点,-f参数强制删除,执行完在重新执行OK
     docker swarm leave -f
     docker swarm init --advertise-addr 192.168.31.43

# Step 2: 查看集群相关信息
docker info

# Step 3: 查看集群节点信息,集群中的机器
docker node ls

# Step 4: 添加节点主机到Swarm集群
# 在 192.168.31.188 主机上执行
docker swarm join --token SWMTKN-1-2lefzq18zohy9yr1vskutf1sfb2a590xz9d0mjj2m15zu9eprw-2938j5f50t35ycut0vbj2sx0s 192.168.31.43:2377
# 在 192.168.31.139 主机上执行
docker swarm join --token SWMTKN-1-2lefzq18zohy9yr1vskutf1sfb2a590xz9d0mjj2m15zu9eprw-2938j5f50t35ycut0vbj2sx0s 192.168.31.43:2377
# 查看集群节点信息,集群中的机器
docker node ls
# 参数说明
active状态下,node可以接受来自manager节点的任务分派;
drain状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)

# Step 5: 在Swarm中部署服务(nginx为例)
# 创建网络
docker network create -d overlay nginx_net
docker network ls | grep nginx_net

# 部署服务
# 创建一个具有一个副本(--replicas 1 )的nginx服务,使用镜像nginx
docker service create --replicas 1 --network nginx_net --name my_nginx -p 80:80 nginx
# 参数说明
--replicas 参数指定服务由几个实例组成

# 查看正在运行服务的列表
docker service ls

# 查询Swarm中服务的信息
docker service inspect --pretty my_nginx

# 查询到哪个节点正在运行该服务
docker service ps my_nginx

# 在Swarm中动态扩展服务(scale)
docker service scale my_nginx=4
docker service ps my_nginx

*
*
*

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值