集群管理,子命令有init, join, leave, update
节点,一个节点就是docker集群中的一个实例,我们可以在单台服务器上运行一个或多个节点。
manager节点还执行维护所需群集状态所需的编排和集群管理功能,manager节点选择单个领导者来执行编排任务,worker节点接收并执行从管理器节点分派的任务。
docker node:节点管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm
一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。
创建服务时,你需要指定要使用的容器镜像。
docker service:服务创建,子命令有create, inspect, update, remove, tasks
任务是在docker容器中执行的命令,manager节点根据指定数量的任务副本分配任务给worker节点。
目前支持的策略有:random,spread,binpack
Random
顾名思义,就是随机选择一个Node来运行容器,一般用作调试用,spread和binpack策略会根据各个节点的可用的CPU, RAM以及正在运行的容器的数量来计算应该运行容器的节点。
Spread
在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点。
使用Spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。
Binpack
Binpack策略最大化的避免容器碎片化,就是说binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在一个节点上面。
1、获取ip
ip addr
2、初始化swarm
docker swarm init --advertise-addr ip
3、 获取加入节点的命令
加入manager
docker swarm join-token manager
生成如下命令
docker swarm join --token SWMTKN-1-4a7n09c71wl6rmz46h8f31ydz1vn1thwk2a068uxd39zv86xg0-2orp0xywg1vksi5bc3m9ekjg4 ip:2377
直接在对应的机器中执行生成的命令即可。
加入worker
docker swarm join-token worker
docker node ls
swarm集群中node的availability状态可以为 active或者drain,其中:
active状态下,node可以接受来自manager节点的任务分派
drain状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)
docker service scale nginx=2
docker service update --replicas 3 nginx
docker service update --replicas 3 nginx
docker service update --image nginx:latest nginx
docker service rm nginx