在 CentOS 7 上配置 Docker Swarm 集群
从那以后,我们已经安装并配置了三个 Docker 节点。
现在,是时候使用它们来形成 Docker Swarm 集群了。
在管理器节点(即 docker-manager-01)上初始化 Docker Swarm 模式。
[root@docker-manager-01 ~]# docker swarm init --advertise-addr 192.168.1.100 Swarm initialized: current node (3b9wynaya1wu910nf01m5jeeq) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-1yn39o5d0aeiuvdiufp45rwbdbg5gxhrvbp3v38s5q6kcjh0q0-3m3vysmghac17vt3iz89mse9u 192.168.1.100:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
我们的 Docker Swarm 的管理器节点已经初始化。
Docker 为我们提供了将其他工作人员和管理人员加入我们的 Docker Swarm 集群的命令。
因此,我们在 docker-worker-01 节点上使用此命令将其加入 Docker Swarm 作为工作节点。
使用 ssh 作为 root 用户连接 docker-worker-01 并执行命令,如 Docker 在上一步中提供的。
[root@docker-worker-01 ~]# docker swarm join --token SWMTKN-1-1yn39o5d0aeiuvdiufp45rwbdbg5gxhrvbp3v38s5q6kcjh0q0-3m3vysmghac17vt3iz89mse9u 192.168.1.100:2377 This node joined a swarm as a worker.
在 docker-worker-02 上重复相同的步骤。
[root@docker-worker-02 ~]# docker swarm join --token SWMTKN-1-1yn39o5d0aeiuvdiufp45rwbdbg5gxhrvbp3v38s5q6kcjh0q0-3m3vysmghac17vt3iz89mse9u 192.168.1.100:2377 This node joined a swarm as a worker.
在任意节点上执行以下命令可以查看该节点的详细信息。
[root@docker-manager-01 ~]# docker info
检查 Docker Swarm 集群中节点的状态。
[root@docker-manager-01 ~]# docker node ls
我们的 Docker Swarm 集群配置成功。
在 Docker Swarm 上创建复制服务
为了演示 Docker Swarm 集群的使用,我们在其上创建了一个复制服务。
[root@docker-manager-01 ~]# docker service create --name web1 -p 80:80 --replicas 5 nginx
已经创建了一个具有 5 个副本的服务,并且各个容器在 Docker Swarm 集群中聚合。
要检查容器的创建和运行位置,请在 docker-manager-01 节点上使用以下命令。
[root@docker-manager-01 ~]# docker service ps web1
在这里,我们使用 nginx 镜像创建了一个服务,并将 web1 容器的 80 端口发布到主机的 80 端口。
因此,我们还需要允许宿主机防火墙中的服务端口 80 通过网络访问它。
在所有节点上执行以下命令,允许 Linux 防火墙中的 http 服务。
[root@docker-manager-01 ~]# firewall-cmd --permanent --add-service=http success [root@docker-manager-01 ~]# firewall-cmd --reload success
浏览任何 Docker Swarm 节点,我们将被路由到 nginx Web 服务器的默认网页。
[root@docker-manager-01 ~]# curl http://docker-manager-01 | grep title % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 612 100 612 0 0 100k 0 --:--:-- --:--:-- --:--:-- 119k <title>Welcome to nginx!</title> [root@docker-manager-01 ~]# curl http://docker-worker-01 | grep title % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 612 100 612 0 0 61937 0 --:--:-- --:--:-- --:--:-- 68000 <title>Welcome to nginx!</title> [root@docker-manager-01 ~]# curl http://docker-worker-02 | grep title % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 612 100 612 0 0 75958 0 --:--:-- --:--:-- --:--:-- 87428 <title>Welcome to nginx!</title>
我们的 Docker 服务配置成功。
目前,我们使用三个节点地址来浏览它。
但是,我们也可以配置一个 HTTP 负载均衡器来创建一个公共地址来访问任何节点上的服务。
Docker Swarm 是 Docker 容器的原生集群和调度工具。
当前版本的 Docker 包括用于本地管理 Docker 引擎集群的 Swarm 模式。
Docker Swarm 集群可以使用相同的 Docker-CLI 命令进行配置和管理。
在本文中,我们将在基于 CentOS 7 的服务器上配置 Docker Swarm 集群。
我们为 Docker Swarm 集群使用了三个节点。
一个节点作为 Manager 节点,另外两个作为 Worker 节点。
配置环境
docker管理服务器
主机名:docker-manager-01
IP地址:192.168.1.100/24
操作系统:CentOS 7.6
docker版本:Docker CE 18.09
docker 服务器1
主机名:docker-01
IP地址:192.168.1.101/24
操作系统:CentOS 7.6
docker版本:Docker CE 18.09
docker 服务器2
主机名:docker-02
IP地址:192.168.1.102/24
操作系统:CentOS 7.6
docker版本:Docker CE 18.09
在 CentOS 7 上安装 Docker Engine CE
要在 Swarm 模式下运行 Docker,我们需要在每个节点上安装 Docker Engine CE。
以 root 用户身份使用 ssh 连接 docker-manager-01.
执行以下命令来配置本地 DNS 解析器。
[root@docker-manager-01 ~]# cat >> /etc/hosts << EOF > 192.168.1.100 docker-manager-01.onitroad.com docker-manager-01 > 192.168.1.101 docker-worker-01.onitroad.com docker-worker-01 > 192.168.1.102 docker-worker-02.onitroad.com docker-worker-02 > EOF
安装 EPEL yum 存储库。
[root@docker-manager-01 ~]# yum install -y epel-release.noarch
为 CentOS 7 安装 Docker yum 存储库,如下所示:
[root@docker-manager-01 ~]# yum-config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
启用 Docker-CE (Nightly) yum 存储库。
[root@docker-manager-01 ~]# yum-config-manager --enable docker-ce-nightly
在使用 EPEL 和 Docker yum 存储库之前构建 yum 缓存。
[root@docker-manager-01 ~]# yum makecache fast
使用 yum 命令安装 Docker Engine CE。
[root@docker-manager-01 ~]# yum install -y docker-ce
启动并启用 Docker 服务。
[root@docker-manager-01 ~]# systemctl enable docker.service Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. [root@docker-manager-01 ~]# systemctl start docker.service
Docker 需要以下服务端口才能运行。
端口 | 协议 | 描述 |
---|---|---|
2376, 2377 | TCP | 用于 Docker 守护进程加密通信 |
7946 | TCP、UDP | 用于容器网络发现 |
4789 | UDP | 用于容器入口网络 |
因此,在 Linux 防火墙中允许上述服务端口。
[root@docker-manager-01 ~]# firewall-cmd --permanent --add-port={2376,2377,7946}/tcp success [root@docker-manager-01 ~]# firewall-cmd --permanent --add-port={7946,4789}/udp success [root@docker-manager-01 ~]# firewall-cmd --reload success
通过检查其版本来验证 docker 安装。
[root@docker-manager-01 ~]# docker version Client: Version: 18.09.3 API version: 1.39 Go version: go1.10.8 Git commit: 774a1f4 Built: Thu Nov 28 06:33:21 2019 OS/Arch: linux/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.3 API version: 1.39 (minimum version 1.12) Go version: go1.10.8 Git commit: 774a1f4 Built: Thu Nov 28 06:02:24 2019 OS/Arch: linux/amd64 Experimental: false
我们已经在 CentOS 7 服务器上安装了 Docker Engine CE。
在剩余的两个节点(即 docker-worker-01 和 docker-worker-02)上重复相同的步骤以在其上安装 Docker Engine CE。