在此文之前,务必先了解docker
以及docker-compose
,接下来直接开始正文
docker swarm
Swarm是Docker公司推出的用来管理docker集群的平台, 它是将一群Docker宿主机变成一个单一的虚拟主机。
机器0.220(master),0.221(node)。
1. 在任意一台机执行init,当选master
[root@manager220 ~]# docker swarm init --advertise-addr=192.168.0.220
Swarm initialized: current node (19ynl4t2arpk5hobtp) is now a manager.
To add a worker to this swarm, run the following command:
# 这就是其他节点加入此集群的命令
docker swarm join --token SWMTKN-1-1uxf7dc6a219ynl4t2arpk5hobtpsfzepcfmhzzyf3j7kmf4rx-a6z25bwo3h8sx2ttla8qi7zz8 192.168.0.220:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
2. 其他机器加入集群
接下来我们在0.221机器上执行join的命令
docker swarm join --token SWMTKN-1-1uxf7dc6a219ynl4t2arpk5hobtpsfzepcfmhzzyf3j7kmf4rx-a6z25bwo3h8sx2ttla8qi7zz8 192.168.0.220:2377
如果想要将其他更多的节点添加到这个swarm集群中,加入方法如上一致
3.再回到master节点上查看节点,可以正常看到
[root@manager220 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
19ynl4t2arpk5hobtp * manager220 Ready Active Leader 18.06.0-ce
3h8sx2ttla8qi7z node221 Ready Active 18.06.1-ce
4.创建overlay网络,可以跨机器使用别名
docker network create -d overlay test_net
#查看网络
docker network | grep test_net
5. 启动一个nginx集群
docker service create --replicas 2 --network test_net --name nginx01 -p 80:80 nginx
这样就创建了一个nginx集群,其中--replicas
参数指定集群的节点数
6.查看服务
docker service ps nginx01
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
yzonphtt9ds5 nginx01.1 nginx:latest manager220 Running Running about an hour ago
mlprsx0zu7km nginx01.2 nginx:latest node221 Running Running 47 seconds ago
可以看到,nginx01.1实例创建在了manager220上,但是nginx01.2实例创建在了node221上。
接下来访问,两个节点任何一个节点的IP:80都可以访问的到。
7.常用命令
#初始化集群master节点
docker swarm init --advertise-addr 192.168.xx.xx
#节点加入集群
docker swarm join --token xxx 192.168.xx.xx:2377
#离开集群
docker swarm leave -f
#查看集群几点信息
docker node ls
#master查看正在运行服务的列表
docker service ls
#swarm 服务中的详细信息 --pretty 输出更详细信息
docker service inspect --pretty nginx01
#查看某个当前节点运行的服务
docker service ps nginx01
#动态扩容节点数到3个
docker service scale nginx01=3
8.节点状态
swarm集群中node的状态有Active和Drain两种状态。
Active状态下,表示可以接受来自manager节点的任务分配。
Drain状态下,node节点会结束任务,且不再接受任务分配。(下线)
可以通过命令使某个节点下线(在master机器执行):
#修改node221节点为下线状态
docker node update --availability drain node221
#如果需要删除
docker node rm --force node221
以上只是单独的对一个nginx服务进行集群部署,接下来我们部署一下多个服务。
多服务Swarm服务部署
机器0.220(master),0.221(node),服务nginx,tomcat
1.docker-compose.yaml文件
version: "3"
services:
nginx01:
image: nginx
ports:
- 80:80
deploy:
mode: replicated
replocas: 2
tomcat01:
image: tomcat
ports:
- "8080:8080"
deploy:
replicas: 2
placement:
constraints: [node.role == manager]
2.使用yaml文件部署服务
#启动服务
[root@manager220 ~]#docker stack deploy -c docker-compose.yml deploy_test
Creating network deploy_test_default
Creating service deploy_test_tomcat01
Creating service deploy_test_nginx01
# 查看创建服务
[root@manager220 ~]# docker service ls
ID NAME MODE REPLICAS IMAGE PORTS
r47ff17ax3nm deploy_test_nginx01 replicated 2/2 nginx:latest *:80->80/tcp
xj2f1t57x1ir deploy_test_tomcat01 replicated 2/2 tomcat *:8080->8080/tcp
接下来尝试访问master或者node节点的80或者8080端口,可以正常访问。
以上就是 多机神器 – docker swarm 的全部内容了。
青山不到,思想不老