Swarm集群管理
概念:
- 管理节点(manager):负责集群的管理工作,包括集群配置,服务管理等
- 工作节点(work node):负责执行具体的任务
- 节点(Node)
- 服务(Service)
- 任务(Task)
亮点:
- Docker Engine集成集群管理
- 去中心化设计
- 扩容缩容
- 期望状态协调
- 多主机网络
- 服务发现
- 负载均衡
- 安全传输
- 滚动更新
使用:
- docker swarm init 初始化swarm集群
- docker swarm join --token {TOKEN} {IP}:{PORT} 加入集群
- docker swarm join-token worker/manager 查看加入节点token
- docker node ls 查看集群节点
- docker info 查看集群信息
- docker service create --replicas 1 --name {NAME} {IMAGE} {CMD} 创建一个服务
- docker service ls 查看服务列表
- docker service ps {SERVICE_NAME}查看服务
- docker service inspect --pretty {SERVICE_NAME} 查看部署信息
- docker service scale {SERVICE_NAME}=2 将服务扩展到两个节点
- docker service rm {SERVICE_NAME} 删除服务
- docker service update --image {IMAGE:VERSION} {CMD} 滚动升级服务
- docker service rollback {SSERVICE_NAME} 服务回滚
- docker node update --availability drain {NODE} 停止节点
- docker node update --availability active {NODE} 重新激活节点
数据挂载:
- volume
- bind
NFS(网络文件系统):
Network File System 用于在集群中,不同服务器之间共享文件
基于nfs和rpc
创建nfs挂载命令:mount -t nfs {SERVICE_NAME}:/var/ /mnt/var/
取消挂载:umount /mnt/var
创建服务
创建 docker service create --name redis redis:3.0.6
docker service ls
docker service create --name --replicas=5 redis:3.0.6 期望的任务数
docker service create --replicas 10 \
–name redis
–update-delay 10s
–update-parallelism 2 \调度器同时更新最大2个任务,间隔更新时间为10s
redis:3.0.6
docker service create --name redis_2 --replicas 5 --env MYENV=foo redis:3.0.6 设置环境变量
–label 设置metadata
–bind-mounts 挂载文件
–volumes 挂载数据卷容器
–mode global 指定服务模式
–constraint 指定服务约束
Swarm调度策略
Swarm在schedule节点运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread, binpack, random.
Random顾名思义,就是随机选择一个Node来运行容器,一般用作调试用,spread和binpack策略会根据各个节点的可用的CPU, RAM以及正在运行的容器的数量来计算应该运行容器的节点。
在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点(The binpack strategy causes Swarm to optimize for the container which is most packed.)。
使用Spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。
Binpack策略最大化的避免容器碎片化,就是说binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面。
资料: