docker swarm ls
查看集群状态。
1、准备工作
确认服务器环境:确保所有服务器都已安装Docker,并且Docker服务正在运行,可以通过在每台服务器上执行docker --version
和systemctl status docker
(对于使用systemd的系统)来检查。
配置主机名解析:编辑/etc/hosts
文件,将服务器的IP地址与易于记忆的主机名关联起来,如果有三台服务器,其IP地址分别为192.168.1.101、192.168.1.102和192.168.1.103,可以在每台服务器的/etc/hosts
文件中添加以下内容:
IP地址 | 主机名 | |
192.168.1.101 | manager1 | |
192.168.1.102 | worker1 | |
192.168.1.103 | worker2 |
关闭防火墙或配置端口开放:如果服务器启用了防火墙,需要确保Docker Swarm所需的端口开放,这些端口包括2377(用于集群管理通信)、7946(用于集群成员通信)和4789(用于覆盖网络通信),在某些Linux发行版中,可以使用firewall-cmd
命令来开放端口,
firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --zone=public --add-port=7946/tcp --permanent
firewall-cmd --zone=public --add-port=4789/udp --permanent
firewall-cmd --reload
2、初始化Swarm集群
选择一台服务器作为Manager节点:在服务器地址清单中选择一台服务器(例如IP地址为192.168.1.101的服务器),在该服务器上执行以下命令来初始化Swarm集群:
docker swarm init --advertise-addr <manager_ip>
(其中<manager_ip>
是该Manager节点的IP地址,如192.168.1.101)
记录Token和Manager加入命令:初始化成功后,Docker会输出一些重要信息,其中包括Worker节点加入集群所需的Token以及Manager节点加入集群的命令,这些信息非常重要,需要记录下来以便后续操作。
docker swarm join-token: SWMTKN-1-...-...
(这是一个示例Token,实际Token会不同)
docker swarm join --token SWMTKN-1-...-... 192.168.1.101:2377
3、添加Worker节点到集群
获取Worker加入Token:在其他需要作为Worker节点加入集群的服务器上,执行以下命令获取Worker加入Token:
docker swarm join-token worker -q
执行Worker加入命令:使用上一步获取到的Token和Manager节点的IP地址,在其他服务器上执行Worker加入命令,对于IP地址为192.168.1.102的服务器,执行以下命令:
docker swarm join --token SWMTKN-1-...-... 192.168.1.101:2377
重复上述步骤:按照同样的方法,将其他服务器作为Worker节点加入到Swarm集群中。
4、验证集群状态
查看节点列表:在所有节点上执行docker node ls
命令,查看集群中的节点列表,应该能够看到所有已加入的Manager和Worker节点,并且每个节点的状态显示为“Ready”。
ID | HOSTNAME | STATUS | AVAILABLE | MANAGER STATUS | ENGINE VERSION | |
node1 | manager1 | Ready | Active | Leader | 20.10.5 | |
node2 | worker1 | Ready | Active | 20.10.5 | ||
node3 | worker2 | Ready | Active | 20.10.5 |
检查服务和容器状态:可以部署一个简单的测试服务来验证集群是否正常工作,创建一个Nginx服务:
docker service create --name my_nginx --publish published=80,target=80 nginx
访问服务:通过浏览器或其他工具访问Manager或Worker节点的IP地址和端口(在本例中是80端口),如果能够正常访问Nginx欢迎页面,则说明Swarm集群工作正常。
以下是两个关于从服务器地址清单建Swarm集群的常见问题及解答:
1、如果初始化Swarm集群时没有指定--advertise-addr
参数会怎样?
如果不指定--advertise-addr
参数,Docker会自动检测并使用默认的网络接口IP地址作为广告地址,在一些复杂的网络环境中,自动检测可能无法正确识别适合的IP地址,导致其他节点无法正确连接到该Manager节点,建议明确指定一个可靠的IP地址,以确保集群的正常通信。
2、如何在已有的Swarm集群中添加新的节点?
要在已有的Swarm集群中添加新的节点,首先需要在新节点上获取当前集群的加入Token(可以通过在现有集群中的任何节点上执行docker swarm join-token worker -q
或docker swarm join-token manager -q
命令来获取),在新节点上执行docker swarm join --token <token> <manager_ip>:2377
命令(其中<token>
是获取到的Token,<manager_ip>
是集群中任意一个Manager节点的IP地址),这样,新节点就会被添加到现有的Swarm集群中。