当前位置: 首页>>技术教程>>正文


如何在Ubuntu 18.04上配置具有多个Docker节点的Docker Swarm

, ,
Docker Swarm是用于管理Docker主机的容器编排和集群工具,并且是Docker Engine的一部分。这是Docker提供的本机集群工具,可为您的应用程序提供high-availability和high-performance。

Docker Swarm的主要目标是将多个Docker主机分组为一个逻辑虚拟服务器-通过将应用程序分布在多个Docker主机(而不是一个)上,从而确保应用程序的可用性和高性能。

在本教程中,您将学习:

  • 什么是Docker Swarm
  • 如何配置主机
  • 如何安装和运行Docker服务
  • 如何配置管理器节点以进行群集集群初始化
  • 如何配置工作节点加入Swarm集群
  • 如何验证群群集
  • 如何在Swarm群集上部署新服务
Docker Swarm Services

Docker Swarm服务。

使用的软件要求和约定

软件要求和Linux命令行约定
类别 使用的要求,约定或软件版本
系统 Ubuntu 18.04
软件 Docker-CE 18.09
其他 以root身份或通过Linux特权访问Linux系统sudo命令。
约定 -要求linux命令可以直接以root用户身份或通过使用root特权以root特权执行sudo命令$-要求linux命令以普通非特权用户身份执行

群概念详细

Docker Engine中嵌入的集群管理和编排功能是使用swarmkit构建的。

一个群集由多个Docker主机组成,这些Docker主机以群集模式运行,并充当管理器(管理成员资格和委派)和工作人员(运行群集服务)。给定的Docker主机可以是管理员,工作人员或同时担任这两个角色。创建服务时,您要定义其最佳状态,例如副本数,可用的网络和存储资源,将服务公开给外界的端口等。如果工作节点不可用,则Docker会将该节点的任务安排在其他节点上。任务是一个正在运行的容器,它是群集服务的一部分,由群集管理器管理。




(adsbygoogle = window.adsbygoogle || [])。push({});


与独立容器相比,群集服务的主要优势之一是,您可以修改服务的配置,包括它所连接的网络和卷,而无需手动重新启动服务。 Docker将更新配置,使用过期的配置停止服务任务,并创建与所需配置匹配的新任务。

当Docker以群体模式运行时,您仍然可以运行独立的容器在参与集群的任何Docker主机以及集群服务上。独立容器和群集服务之间的主要区别在于,只有群集管理器可以管理群集,而独立容器可以在任何守护程序上启动。 Docker守护程序可以以管理人员,工作人员或两者兼有的形式参与。

配置Docker主机

在为swarm集群安装必要的Docker软件包之前,我们将在所有Ubuntu节点上配置hosts文件。


Manager Node – 192.168.1.103 (hostname - dockermanager)
Worker Node1 – 192.168.1.107 (hostname – dockerworker1)
Worker Node2 – 192.168.1.108 (hostname - dockerworker2)

编辑/etc/hosts通过三个文件跨所有节点gedit要么vim并进行以下更改:

192.168.1.103  dockermanager
192.168.1.107  dockerworker1
192.168.1.108  dockerworker2

在hosts文件中使用上述详细信息进行修改后,请使用ping在所有节点之间。

从Docker Manager主机


# ping dockerworker1
# ping 192.168.1.107

# ping dockerworker2
# ping 192.168.1.108

从Docker Worker节点1


# ping dockermanager
# ping 192.168.1.103

从Docker Worker节点2


# ping dockermanager
# ping 192.168.1.103

安装并运行Docker服务

要创建群集集群,我们需要在所有服务器节点上安装docker。我们将在所有三台Ubuntu计算机上安装docker-ce,即Docker Community Edition。

在新主机上首次安装Docker CE之前,需要设置Docker存储库。之后,您可以从存储库安装和更新Docker。在所有三个Ubuntu节点上执行以下所有步骤。

更新apt包索引:


# apt-get update

安装软件包以允许通过HTTPS使用存储库:


# apt-get install apt-transport-https ca-certificates curl software-properties-common -y


(adsbygoogle = window.adsbygoogle || [])。push({});


添加Docker的官方GPG密钥:


curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

使用以下命令设置稳定的存储库:


# add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

再次更新apt软件包:


# apt-get update

安装最新版本的Docker CE:

apt-get install docker-ce

安装完成后,启动docker服务,并使其在每次系统引导时启动。


# systemctl start docker
# systemctl enable docker

要将docker配置为以普通用户或非root用户身份运行,请运行以下命令:


# usermod -aG docker <username>

# usermod -aG docker manager
# usermod -aG docker worker1
# usermod -aG docker worker2

现在,以指定用户身份登录并运行dockerhello-world核实。


# su - manager
$ docker run hello-world

成功运行后,将给出以下输出

Add New User for Hadoop

Docker安装检查Hello_World。

配置管理器节点以进行群集集群初始化

在这一步中,我们将创建节点的群集集群。要创建群集集群,我们需要在’dockermanager’节点上初始化群集模式,然后将’dockerworker1’和’dockerworker2’节点加入群集。

通过在’dockermanager’节点上运行以下docker命令来初始化Docker Swarm模式。



(adsbygoogle = window.adsbygoogle || [])。push({});



docker swarm init --advertise-addr <manager node IP address>


$ docker swarm init --advertise-addr 192.168.1.103
Swarm Cluster initialization

群集集群初始化。

‘dockermanager’已生成’join token’,将工作节点加入集群管理器将需要’dockermanager’。

配置工作节点加入Swarm集群

现在,要将工作程序节点加入集群,我们将在集群初始化步骤中收到的所有工作程序节点上运行docker swarm join命令:


$ docker swarm join --token SWMTKN-1-4htf3vnzmbhc88vxjyguipo91ihmutrxi2p1si2de4whaqylr6-3oed1hnttwkalur1ey7zkdp9l 192.168.1.103:2377
Worker Node 1 Joining the Swarm Cluster

工作节点1加入Swarm集群。

Worker Node 2 Joining the Swarm Cluster

工作节点2加入Swarm集群。

验证群群集

要查看节点状态,以便我们可以确定节点是否处于活动状态/可用状态等,请从管理器节点中列出群集中的所有节点:


$ docker node ls
Docker Swarm Cluster Verification

Docker Swarm集群验证。

如果您在任何时候丢失了联接令牌,可以通过在管理器节点上为管理者令牌运行以下命令来检索它:


$ docker swarm join-token manager -q

检索工作者令牌的相同方法在管理器节点上运行以下命令:


$ docker swarm join-token worker -q

在Swarm群集上部署新服务

在此步骤中,我们将创建第一个服务并将其部署到集群群集。新服务Nginx Web服务器将在默认的http端口80上运行,然后将其公开到主机上的端口8081。我们将使用2个副本创建此nginx服务,这意味着我们的集群中将运行2个容器。如果这些容器中的任何一个失败,它们将再次产生以具有我们在复制选项上设置的所需数量。


$ docker service create --name my-web1 --publish 8081:80 --replicas 2 nginx

成功部署服务后,您将看到以下输出:

Deploy Nginx Service on Swarm Cluster

在Swarm集群上部署Nginx服务。




(adsbygoogle = window.adsbygoogle || [])。push({});


使用以下docker service命令检查新创建的nginx服务。


$ docker service ls
List the newly deployed service on Swarm Cluster

列出Swarm群集上新部署的服务。


docker service ps <service name>


$ docker service ps my-web1
Lists the tasks running as part of specified services on Swarm Cluster

列出作为Swarm群集上的指定服务的一部分运行的任务。

如果需要检查nginx服务是否工作正常,可以使用curl命令,也可以在主机的浏览器中检查nginx Web服务器欢迎页面。


$ curl http://dockermanager:8081
Nginx Web service check via CURL

Nginx通过CURL进行Web服务检查。

在主机上的浏览器中,我们可以访问nginx的欢迎页面

Nginx service check via browser

通过浏览器检查Nginx服务。

现在,如果需要扩展Nginx服务,我们将制作3个副本,并在管理器节点上运行以下命令:


$ docker service scale my-web1=3
Service Scaling for the desired number of replicas

对所需数量的副本进行服务扩展。

要在缩放后检查输出,我们可以使用docker service ls要么docker service ps命令。

我们可以用docker service inspect命令以检查swarm上已部署服务的扩展详细信息。默认情况下,这会将所有结果呈现在JSON数组中。

结论

Docker已成为使用容器配置,保存和共享服务器环境的一种非常流行的方式。因此,安装应用程序甚至大型堆栈通常可以像运行docker pull或docker run一样简单。将应用程序功能分离到不同的容器中还提供了安全性和依赖性管理方面的优势。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/10992.html,未经允许,请勿转载。