创建 swarm 创建一个 swarm
随意选择一个主机作为管理节点,在上面初始化一个 swarm:
[root@swarm_manager ~]# docker swarm init --advertise-addr 192.168.33.160
Swarm initialized: current node (7ik7wqhe5wcag8k5tp816c7ck) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join \ --token SWMTKN-1-0p0p5f96e1w4xblhw2eeookrv46spwf4yx7qmve2srxe9wec5g-ellbnyt4cwwvvdkssaj0cbtus \
192.168.33.160:2377 --advertise-addr 标志配置了管理节点的 IP 地址。如果你的机器只有一个 IP 地址,可以省略--adbertise-addr选项,docker 会自动选择正确的 IP。上输出信息说明了怎样加入新的工作节点。也说明了执行docker swarm join-token manager 可以查询怎样加入新的管理节点。 执行docker info命令查看swarm的当前状态
[root@swarm_manager ~]# docker info
...
Swarm: active
NodeID: 7ik7wqhe5wcag8k5tp816c7ck
Is Manager: true
ClusterID: 2scd04fv8c9mua1jiaq6n0370
Managers: 1
Nodes: 1
...
执行 docker node ls 命令查看节点信息
[root@swarm_manager ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
9e21bk67ey1abzje69lmpvbe1 * swarm_manager Ready Active Leader 节点 id 后面的*表示你当前连接到了该节点。 添加节点到 swarm 添加两个工作节点到swarm
在第二台主机上,执行前面创建 swarm 时 docker swarm init 输出信息中命令创建工作节点并加入到 swarm
[root@node1 ~]# docker swarm join \
--token SWMTKN-1-0p0p5f96e1w4xblhw2eeookrv46spwf4yx7qmve2srxe9wec5g-ellbnyt4cwwvvdkssaj0cbtus \
192.168.33.160:2377
This node joined a swarm as a worker. 输出信息表示当前节点已是 swarm 中的一个工作节点了。如果你忘记了该命令,可以在管理节点上执行 docker swarm join-token worker 查询怎么加入。
[root@swarm_manager ~]# docker swarm join-token worker
To add a worker to this swarm, run the following command:
docker swarm join \ --token SWMTKN-1-3wi7tszkolocsbc7vopv1tfx2r2h1owtqegwevdqqdk3fj195u-ejpeq0afjvfmujlvzboux9zjs \
192.168.33.160:2377 到第三台主机上,继续讲第三台主机加入到 swarm 中
[root@node1 ~]# docker swarm join \
--token SWMTKN-1-0p0p5f96e1w4xblhw2eeookrv46spwf4yx7qmve2srxe9wec5g-ellbnyt4cwwvvdkssaj0cbtus \
192.168.59.128:2377
This node joined a swarm as a worker.查看所有节点的状态
在管理节点上
[root@swarm_manager ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
622ih8ji5t428lazjx233pvks node2 Ready Active
9e21bk67ey1abzje69lmpvbe1 * swarm_manager Ready Active Leader
f3wzagmtgsn8qyqzidxtw98d3 node1 Ready Active
输出信息第二行 id 后面的*表示当前连接到了该节点。HOSTNAME 栏输出节点的 hostname。MANAGER 用于指示 swarm中的管理节点,该栏值为 Leader 表示为管理节点,空值表示为工作节点。 部署一个服务到 swarm 创建服务
在管理节点上创建一个服务,每隔三秒输出一个 “hello world”:
[root@swarm_manager ~]# docker service create --replicas 1 --name helloworld busybox:1.25.1-musl /bin/sh -c "while true; do echo hello world; sleep 3; done"
04a3iqg8zlhba84kpi2tatssf
查看服务列表
还是在管理节点上
[root@swarm_manager ~]# docker service ls
ID NAME REPLICAS IMAGE COMMAND
c3hvgwhyim4n helloworld 1/1 busybox:1.25.1-musl /bin/sh -c while true; do echo hello world; sleep 3; done查看服务的详细信息 查看服务的详细信息
在管理节点上。
[root@swarm_manager ~]# docker service inspect --pretty helloworld
ID: c3hvgwhyim4nllg1qqix7kli6
Name: helloworld
Mode: Replicated
Replicas: 1
Placement:
UpdateConfig:
Parallelism: 1
On failure: pause
ContainerSpec:
Image: busybox:1.25.1-musl
Args: /bin/sh -c while true; do echo hello world; sleep 3; done
Resources: 参数--pretty表示以可读性良好的格式输出。如果想输出详细的 json 格式信息,去掉--pretty参数即可。
查看哪个节点在运行该服务
还是在管理节点上:
[root@swarm_manager ~]# docker service ps helloworld
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
556c2lpvr4489yrclo52cjlo5 helloworld.1 busybox:1.25.1-musl node2 Running Running 3 minutes ago 输出信息表明,helloworld 服务的一个实例在 node2 节点上执行。这是因为,默认情况下管理节点是工作节点。
DESIRED STATE和CURRENT STATE表示服务的期望状态和当前状态,你可以对比它们,判断服务是否想期望的那样运行。这里的Running和Running 3 minutes ago说明服务运行正常。 在执行任务的节点上使用docker ps命令查看相关容器的详细信息
[root@node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
964ddb3220b6 busybox:1.25.1-musl "/bin/sh -c 'while tr" 5 minutes ago Up 5 minutes helloworld.1.556c2lpvr4489yrclo52cjlo5伸缩服务 伸缩服务的任务数量
在管理节点上
[root@node2 ~]# docker service scale helloworld=5
helloworld scaled to 5
我们将服务的数量伸缩到5。查看服务列表
在管理节点上:
[root@swarm_manager ~]# docker service ps helloworld
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
556c2lpvr4489yrclo52cjlo5 helloworld.1 busybox:1.25.1-musl node2 Running Running 10 minutes ago
e2tw7i9bkjb32jrr3sdztskwe helloworld.2 busybox:1.25.1-musl swarm_manager Running Running 24 seconds ago
d5plppbjvtr1rany4tzb88czc helloworld.3 busybox:1.25.1-musl node2 Running Running 28 seconds ago
a0hs8ik837jl7mlgeaowws1i3 helloworld.4 busybox:1.25.1-musl node1 Running Running 18 seconds ago
bo27jnf7n59hqzl9m9jnpwbks helloworld.5 busybox:1.25.1-musl swarm_manager Running Running 24 seconds ago在各节点上查看服务
首先是管理节点:
[root@swarm_manager ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
46aa83031ad7 busybox:1.25.1-musl "/bin/sh -c 'while tr" About a minute ago Up About a minute helloworld.2.e2tw7i9bkjb32jrr3sdztskwe
e1cb3bd1bfb0 busybox:1.25.1-musl "/bin/sh -c 'while tr" About a minute ago Up About a minute helloworld.5.bo27jnf7n59hqzl9m9jnpwbks 再是工作节点1
[root@node1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1c200722ace5 busybox:1.25.1-musl "/bin/sh -c 'while tr" About a minute ago Up About a minute helloworld.4.a0hs8ik837jl7mlgeaowws1i3 再是工作节点2
[root@node2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2dba702ccd68 busybox:1.25.1-musl "/bin/sh -c 'while tr" About a minute ago Up About a minute helloworld.3.d5plppbjvtr1rany4tzb88czc
964ddb3220b6 busybox:1.25.1-musl "/bin/sh -c 'while tr" 11 minutes ago Up 11 minutes helloworld.1.556c2lpvr4489yrclo52cjlo5 可以看到:管理节点上运行了两个任务,工作节点1运行了两个任务,工作节点2运行了1个任务。 删除 swarm 上运行的服务 删除
在管理节点上
[root@swarm_manager ~]# docker service rm helloworld
helloworld 确认
在管理节点上
[root@swarm_manager ~]# docker service ls
ID NAME REPLICAS IMAGE COMMAND
[root@swarm_manager ~]#