Docker Swarm 集群搭建实践

说明

Docker Swarm 是 Docker 的一个原生的集群管理工具,可以把多个Docker主机(节点)组织成一个集群,使得容器可以组成跨主机的子网网络,此外,Docker Swarm 还内置了部署和管理集群的API、服务发现和高可用等功能。

这里在 Windows10 环境下,先使用 Docker machine 命令工具创建多个虚拟机(3 个 manager 和 2 个 worker),并用 Docker swarm 来搭建一个集群。

添加一个虚拟交换机

关于如何在 Windows10 安装 docker,到官网下载 Docker for Window,按说明安装就是了(注意开启Hyper-V),这里略过。Docker for Window 已经内置了 docker-machine 工具,不用再另外安装。

Docker for Window 安装完成后。打开window菜单搜索‘hyper’,选择Hyper管理器打开:

Windows10 环境下使用 Docker Machine 模拟 Docker Swarm 集群搭建

点击右侧的虚拟交换机管理器,将会打开窗口:

Windows10 环境下使用 Docker Machine 模拟 Docker Swarm 集群搭建
点击新建虚拟网络交换机,在右侧窗口中选中外部,并点击创建虚拟交换机按钮。接下来在右侧新出的窗口中,填写名称,比如这里填写:Primary Virtual Switch,选择连接类型为外部网络,最后点击确定。一个虚拟交换机就创建完成了。

创建虚拟主机

boot2docker页面上下载boot2docker.iso文件,放置到C:\Users\<your-name>\.docker\machine\cache(注意 \<your-name> 替换为你的PC上的用户名称,当然也可以不用这一步,直接执行虚拟机创建命令,但这样速度较慢)。

接在创建一个虚拟机:

docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" manager1

命令行输出如下:

C:\WINDOWS\system32>docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" manager1
Running pre-create checks...
Creating machine...
(manager1) Unable to get the latest Boot2Docker ISO release version:  Get https://api.github.com/repos/boot2docker/boot2
docker/releases/latest: EOF
(manager1) Copying C:\Users\hugh\.docker\machine\cache\boot2docker.iso to C:\Users\<your-name>\.docker\machine\machines\manager1\boot2docker.iso...
(manager1) Creating SSH key...
(manager1) Creating VM...
(manager1) Using switch "Primary Virtual Switch"
(manager1) Creating VHD
(manager1) Starting VM...
(manager1) Waiting for host to start...
Waiting for machine to be running, this may take a few minutes...
Detecting operating system of created instance...
Waiting for SSH to be available...
Detecting the provisioner...
Provisioning with boot2docker...
Copying certs to the local machine directory...
Copying certs to the remote machine...
Setting Docker configuration on the remote daemon...
Checking connection to Docker...
Docker is up and running!
To see how to connect your Docker Client to the Docker Engine running on this virtual machine, run: docker-machine env manager1

大概1-2分钟就创建完成了。接着,以同样地方式创建其他的虚拟机,命令行依次执行:

docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" manager2
docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" manager3
docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" worker1
docker-machine create -d hyperv --hyperv-virtual-switch "Primary Virtual Switch" worker2

这样,我们就创建了5台虚拟主机。执行docker-machine ls查看创建的虚拟机,结果如下:

Windows10 环境下使用 Docker Machine 模拟 Docker Swarm 集群搭建
记住每个节点的IP地址,后面会有用。

查看 manager1 虚拟主机环境:

docker-machine env manager1

输出结果大概如下:

SET DOCKER_TLS_VERIFY=1
SET DOCKER_HOST=tcp://192.168.3.106:2376
SET DOCKER_CERT_PATH=C:\Users\hugh\.docker\machine\machines\manager1
SET DOCKER_MACHINE_NAME=manager1
SET COMPOSE_CONVERT_WINDOWS_PATHS=true
REM Run this command to configure your shell:
REM     @FOR /f "tokens=*" %i IN ('docker-machine env manager1') DO @%i

创建Swarm集群

初始化一个Swarm集群

我们可以使用 docker-machine 的 ssh 工具连接到虚拟机。需要登录哪个虚拟机执行命令,可以在命令行前面添加docker-machine ssh <host-name>,表示连接到哪个主机。所以可以这样执行命令初始化一个Swarm:

docker-machine ssh manager1 docker swarm init --advertise-addr 192.168.3.106:2377 --listen-addr 192.168.3.106:2377

--advertise-addr指定了其他节点连接到当前节点的IP和端口,--listen-addr指定监听地址,默认为TCP的2377端口(0.0.0.0:2377)。执行后输出结果如下:

Swarm initialized: current node (yxsk9zdj5n5u1k73rts861r03) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-cixvg4yoz9h7u4m8jgq5178il 192.168.3.106:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

查看刚刚创建的节点:

docker-machine ssh manager1 docker node ls

结果如下:

Windows10 环境下使用 Docker Machine 模拟 Docker Swarm 集群搭建
这是一个Leader管理者节点。

添加worker节点

  • 运行:docker-machine ssh manager1 docker swarm join-token worker,将会输出:

        To add a worker to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-cixvg4yoz9h7u4m8jgq5178il 192.168.3.106:2377

    结果中包含了一个token,这在后面添加worker节点时会用到。

  • 将 worker1 节点添加到集群,执行以下命令:

    docker-machine ssh worker1 docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-cixvg4yoz9h7u4m8jgq5178il 192.168.3.106:2377 --advertise-addr 192.168.3.109:2377 --listen-addr 192.168.3.109:2377

    --advertise-addr--listen-addr选项是可选的,但添上为佳。
    同理,添加 worker2 节点到集群(注意 worker2 节点的IP地址为:192.168.3.110)。

添加manager节点

与添加worker节点的过程基本一致。

  • 运行:docker-machine ssh manager1 docker swarm join-token manager生成token。输出结果如下:

    To add a manager to this swarm, run the following command:
    
        docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-66hrkcz0y8k8c5bpy8if6zzm6 192.168.3.106:2377
  • 添加剩下的两个管理者节点,分别执行:

    # 添加manager2
    docker-machine ssh manager2 docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-66hrkcz0y8k8c5bpy8if6zzm6 192.168.3.106:2377 --advertise-addr 192.168.3.107:2377 --listen-addr 192.168.3.107:2377
    
    # 添加manager3
    docker-machine ssh manager3 docker swarm join --token SWMTKN-1-574foig445ceah4d47ceh7gh6hd5676ivexmfuth8878q0sj4i-66hrkcz0y8k8c5bpy8if6zzm6 192.168.3.106:2377 --advertise-addr 192.168.3.108:2377 --listen-addr 192.168.3.108:2377

    至此,所有节点均创建完成。运行docker-machine ssh manager1 docker node ls查看创建成果:

Windows10 环境下使用 Docker Machine 模拟 Docker Swarm 集群搭建

参考资料

本作品采用《CC 协议》,转载必须注明作者和本文链接
Was mich nicht umbringt, macht mich stärker
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!