Consul - 微服务实战



本章将了解微服务如何与Consul协同工作。我们还将学习以下组件如何影响Consul。

  • 使用Docker
  • 构建Registrator用于服务发现
  • 使用rkt和Nomad

现在让我们详细讨论每一个。

使用Docker

在开始之前,请勿在生产环境中使用此设置,因为它仅用于演示目的。Docker是一个基于容器的服务,我们可以轻松地部署我们的应用程序。为了使用Consul,我们将使用以下链接中的镜像 –0

https://hub.docker.com/r/progrium/consul/.

假设您的系统已安装并正确配置了Docker。让我们尝试从Docker Hub拉取镜像,运行以下命令:

$ docker pull progrium/consul

输出将如以下屏幕截图所示。

Pull Progrium

我们将以以下方式发布一些带有其端口的接口(在Docker上使用-p选项)。

  • 8400 (RPC)
  • 8500 (HTTP)
  • 8600 (DNS)

此外,根据拉取操作,我们将主机名设置为node1。您可以使用-h标志和您自己的主机名将其更改为您想要的任何名称,如下所示。

$ docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul
-server -bootstrap

输出将如以下屏幕截图所示。

Pull Made

您还可以使用以下命令启用Consul的UI模式:

$ docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul
-server -bootstrap -ui-dir /ui

您可以在https://127.0.0.1:8500上查看基于UI的输出。以下屏幕截图可以让您更好地了解基于UI的输出。

UI based

为了在不同节点上的各种Docker容器上使用Consul,我们可以在不同节点上运行以下命令:

在Node1上

$ docker run -d --name node1 -h node1 progrium/consul -server -bootstrap-expect 3

其中,-bootstrap-expect 3表示Consul服务器将在有3个对等节点连接之前等待,然后才能自我引导并成为一个工作的集群。

在继续之前,我们需要通过检查容器来获取容器的内部IP。对于我们的用例,我们将声明$JOIN_IP

$ JOIN_IP = "$(docker inspect -f '{{.NetworkSettings.IPAddress}}' node1)"

在Node2上

因此,让我们启动Node2并告诉它使用上面程序中声明的变量加入Node1。

$docker run -d --name node2 -h node2 progrium/consul -server -join $JOIN_IP

在Node3上

$ docker run -d --name node3 -h node3 progrium/consul -server -join $JOIN_IP

构建Registrator用于服务发现

Registrator通过检查容器上线情况自动注册和注销任何Docker容器的服务。我们即将使用的Registrator目前支持可插拔的服务注册中心,目前包括Consul、EtcdSkyDNS2。当我们在网络上与不同的服务交互时,强烈建议使用Registrator。

$ docker pull gliderlabs/registrator:latest

输出将如以下屏幕截图所示。

gliderlabs

$ docker run -d \
--name = registrator \
--net = host \
--volume = /var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
 consul://127.0.0.1:8500

输出将如以下屏幕截图所示。

gliderlabs

您收到的输出是您刚刚启动的Docker容器的ID。您可以使用以下命令检查容器是否正在运行:

$ docker ps -a

输出将如以下屏幕截图所示。

docker ps

您还可以使用以下命令查看Registrator的日志。

$ docker logs registrator

使用rkt和Nomad

rkt是另一个基于容器的服务,您可以在您的环境中使用它。它由CoreOS构建。构建rkt的主要原因是提高安全性,这是Docker在2013-14年开发时面临的危机问题之一。

至于Consul,我们可以使用Rkt Registrator来处理与Consul的服务发现。这个针对rkt的Registrator项目正在开发中,不建议用于生产环境

您可以通过转到其路径并运行以下命令来检查rkt是否已安装。

$ ./rkt

您可以检查输出以查看它是否已正确安装,如以下屏幕截图所示。

Rkt Registrator

要尝试rkt和Consul,请查看:https://github.com/r3boot/rkt-registrator

Nomad工具

最常用和最受欢迎的选项之一是Nomad工具。Nomad是一个用于管理机器集群并在其上运行应用程序的工具。它类似于MesosKubernetes。默认情况下,Nomad在其自身内部包含Docker和rkt驱动程序。因此,如果您正在寻找使用Consul进行大规模容器部署,Nomad可能是一个不错的解决方案。请查看https://www.nomadproject.io/docs/drivers/rkt.html,了解更多关于Nomad的信息。

广告