www. On IT Road .com

在 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 负载均衡器来创建一个公共地址来访问任何节点上的服务。

在 CentOS 7 上搭建 Docker Swarm 集群

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, 2377TCP用于 Docker 守护进程加密通信
7946TCP、UDP用于容器网络发现
4789UDP用于容器入口网络

因此,在 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。

日期:2020-09-17 00:16:28 来源:oir作者:oir