Docker swarm基本命令,更复杂的生产环境请仔细参阅文档。
创建Swarm
准备两台服务器A、B
给服务器安装docker
确保所有服务器的防火墙开启了以下端口
- TCP/2377
- TCP/7946
- UDP/7946
- UDP/4789
ssh到A上,执行docker swarm init
,A将作为manager,会输出类似下列的内容:
|
|
ssh到B上,执行上面提到的docker swarm join ...
指令,B将作为worker
执行docker node ls
,查看Swarm集群node
|
|
node管理
添加manager
生产环境中应该有多个manager来保证高可用,manager的数量应该是单数,比如1、3、5。
到manager机器上,执行docker swarm join-token manager
,得到以下输出:
|
|
到新机器上执行上述指令,添加manager
添加worker
到manager node上执行docker swarm join-token worker
,得到以下输出:
|
|
到新机器上执行上述指令,添加worker
更新节点AVAILABILITY
节点AVAILABILITY有三种状态:
ACTIVE
:可以安排新的工作负载到这个节点PAUSE
:不会安排新的工作负载到这个节点,但是已经存在的负载继续运行DRAIN
:不会安排新的工作负载到这个节点,已经存在的负载会被驱逐到其他node上
注意,上面提到的禁止安排、驱逐工作负载仅针对于docker service create ...
、docker stack deploy ...
创建的工作负载。对于docker run ...
、docker compose up ...
的工作负载不起作用。
运行以下命令更新节点的AVAILIBALITY:
|
|
比如:
|
|
禁止manager承担工作负载
默认情况下manager也承担工作负载,在生产环境中这样不太好,因为manager可能会因为工作负载过多而变得卡顿,导致无法工作。
解决办法很简单,将manager的AVAILIBALITY变成DRAIN
就行了
删除节点
到服务器上执行 docker swarm leave
如果是manager,则可能会报warning,你只需要这样docker swarm leave --force
清理swarm
删除所有manager和worker节点,swarm就被清理掉了。
评论