在此文之前,务必先了解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 的全部内容了。

青山不到,思想不老