首页 理论教育 Swarm集群上服务部署实战

Swarm集群上服务部署实战

时间:2023-11-05 理论教育 版权反馈
【摘要】:现在只讨论在Swarm集群内有效部署服务所需的内容。当我们设置集群时,默认会创建一个名为ingress的网络。第3章将深入讨论Swarm网络。首先在集群中的某个地方部署mongo容器。现在我们将跳过它,并告诉Swarm将其部署到集群中的任何位置:请注意,我们没有指定Mongo监听27017的端口。在此之前,我只给你一个提示:你需要一个能够使用新版Swarm网络的反向代理。图2-7通过go-demo SDN通信的Docker Swarm集群容器如果想扩展其中一个容器,会发生什么?

Swarm集群上服务部署实战

在部署演示服务之前,我们应该创建一个新的网络,以便构成服务的所有容器都可以相互通信,而不用关心它们部署在哪个节点上:

第3章将更详细地探讨网络。现在只讨论在Swarm集群内有效部署服务所需的内容。

可以使用以下命令检查所有网络的状态:

network ls命令的输出如下所示:

正如你所看到的,我们有两个swarm范围内的网络。当我们设置集群时,默认会创建一个名为ingress的网络。第二个go-demo网络是使用network create命令创建的,我们会把构成go-demo服务的所有容器分配给该网络。

第3章将深入讨论Swarm网络。现在只需要知道属于同一网络的所有服务都可以自由通信就够了。

go-demo应用程序需要两个容器,数据将存储在MongoDB容器中,使用该DB的后端被定义为vfarcic/go-demo容器。

首先在集群中的某个地方部署mongo容器。通常,我们使用约束来指定容器的需求(例如,HD类型、内存和CPU的数量等)。现在我们将跳过它,并告诉Swarm将其部署到集群中的任何位置:

请注意,我们没有指定Mongo监听27017的端口。这意味着除了属于同一个go-demo网络的其他服务以外,任何人都无法访问该数据库

正如你所看到的,使用服务创建的方式类似于你已经习惯的Docker run命令。

我们可以列出所有正在运行的服务:

你会看到REPLICAS列的值为0或1,这取决于service create命令和service ls命令之间经过时间的长短。创建服务后这个值应为0/1,这意味着有0个副本正在运行,而期望是有1个。一旦mongo镜像被拉取到且容器正在运行,值应该就变为1/1。

service ls命令的最终输出应如下所示(为简洁起见,删除了ID):

如果需要更多关于go-demo-db服务的信息,则可以运行service inspect命令:

现在数据库正在运行,我们可以部署go-demo容器:

这个命令没有什么新鲜之处,该服务将被添加到go-demo网络,环境变量DB是go-demo服务的内部需求,它告诉代码数据库的地址

此时,我们有两个容器(mongo和go-demo)在集群内部运行,并通过go-demo网络相互通信。请注意,它们都不能从这个网络之外访问。此时,你的用户无法访问服务API。我们很快会更详细地讨论这个问题。在此之前,我只给你一个提示:你需要一个能够使用新版Swarm网络的反向代理。

让我们再次运行service ls命令:(www.xing528.com)

在go-demo服务被拉到目标节点之后的结果应该如下(为简洁起见,删除了ID):

如你所见,这两种服务都以单个副本的形式运行,如图2-7所示。

图2-7 通过go-demo SDN通信的Docker Swarm集群容器

如果想扩展其中一个容器,会发生什么?如何扩展我们的服务?

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈