docker之swarm
一、swarm集群简介
-
目前涉及Docker集群的三个主要的技术:
Swarm、Kubernetes、Mesos
-
跟集群管理有关的任何操作,都是在
管理节点
上操作的 -
一个 Swarm 集群可以有多个管理节点,但只有
一个管理节点
可以成为 leader -
所有节点都是任务执行节点
,管理节点将服务 (service)下发至工作节点执行。 -
任务 (Task)是 Swarm 中的
最小的调度单位
,目前来说就是一个单一的容器。 -
服务 (Services) 是指
一组任务
的集合,服务定义了任务的属性。 -
服务有两种模式:
replicated services
按照一定规则在各个工作节点上运行指定个数的任务。
global services
每个工作节点上运行一个任务
两种模式通过 docker service create 的 --mode 参数指定。
二、实验环境
前提:已经安装docker,并关闭防火墙
IP hostname
192.168.199.201 node1
192.168.199.202 node2
192.168.199.203 node3
三、初始化swarm集群
在node1上操作,同时会成为管理节点
docker swarm init --advertise-addr 192.168.199.201
输出如下:
Swarm initialized: current node (z8a81qtm5iw57g5nfmhcpzs0u) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3t03fspt6n7tzj7hej66xbux3b0azb73k7f39agej0ptn8bcz4-57jkex3sbwcdgvtzg1pwnzjk2 192.168.199.201:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
解析:
1、创建唯一集群token。
2、命令的输出包含了其它节点如何加入集群的命令。
四、加入到集群中
node2 && node 3 执行下面的命令
此时是作为工作节点加入的
docker swarm join --token SWMTKN-1-3t03fspt6n7tzj7hej66xbux3b0azb73k7f39agej0ptn8bcz4-57jkex3sbwcdgvtzg1pwnzjk2 192.168.199.201:2377
五、查看集群情况
这个只能在管理节点上执行
[root@node1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
z8a81qtm5iw57g5nfmhcpzs0u * node1 Ready Active Leader 20.10.14
cukqso2qe8m66szbvi5mfuozj node2 Ready Active 20.10.14
ql6ifeccwi5475vr5f6p3sd21 node3 Ready Active 20.10.14
六、提升工作节点为管理节点,冗余
在node1管理节点上执行:
docker node promote node_ID
可参考图示:
此时node2 和 node3也变成了管理节点
再次查看集群状态,node2 和 node3 的集群状态变成了“Reachable”
七、新建服务(命令行 or yml文件)
7.1 命令行直接新建
建议每次新建容器都加上 --name
,好区分和查找
docker service create --replicas 1 --name my-nginx nginx
图示:
查看运行的服务:
# 此命令只能在容器运行的节点上看到
docker node ps --filter name=my-nginx
OR
docker service ls | grep my-nginx
OR
docker service ps my-nginx
扩充容器为3个实例
这里看出有名字比较好操作
docker service scale my-nginx=3
图示:
再次查看
docker service ls | grep nginx
7.2 YML文件新建服务
编写docker-compose.yml
然后在docker-compose.yml同目录下,创建服务
docker stack deploy -c docker-compose.yml ceshi_service
注意:
在有权限验证的docker私有Docker仓库,先要登录到私有仓库,
使用docker service创建容器还需要指定--with-registry-auth
参数,否则无法创建容器
八、常用命令
8.1 列出集群中所有节点上正在运行的容器:
docker node ps --filter "desired-state=running" $(docker node ls -q)
8.2 节点降级为工作节点
docker node demote node_ID
8.3 删除节点
只有工作节点才能被删除
docker node rm node_ID
8.4 离开集群
工作节点
docker swarm leave
管理节点先降级,然后离开,或者强制离开
docker swarm leave --force
8.5 添加新的节点
后续肯定忘记token,在管理节点上执行:
- 如果新节点作为管理节点加入:
docker swarm join-token manager
- 如果新节点作为工作节点加入:
docker swarm join-token worker
8.6 查看集群信息
docker info
8.7 停止某个服务并删除
docker service rm service_NAME
8.8 查看所有服务
docker service ls
8.9 查看某个服务运行状态
docker service ps service_NAME
9.0 帮助
docker service --help
9.1 节点降级为工作节点
docker node demote node_ID
9.2 节点升级为管理节点
docker node promote node_ID
9.3 新建swarm集群网络
docker network create --driver overlay network-name
9.4 更改节点的availablity状态
swarm集群中node的availability状态可以为active或者drain,
1.1:active状态下,node可以接受来自manager节点的任务分派;
1.2:drain状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)。
下线:(之前已经接受的任务也会转移到别的节点上)
docker node update --availability drain node_ID
上线:
docker node update --availability active node_ID