Consul 与微服务合作
在这一章中,我们将了解微服务与Consul的合作方式。我们还将学习以下组件对Consul的影响。
- 使用Docker
- 构建Service Discovery的Registrator
- 使用rkt和Nomad
现在让我们逐个详细讨论这些内容。
使用Docker
在开始之前,请注意,此设置仅用于演示目的,请不要在生产环境中使用。Docker是一个基于容器的服务,我们可以轻松部署我们的应用程序。为了使用Consul,我们将使用以下链接中的镜像-0
https://hub.docker.com/r/progrium/consul/.
假设您的系统已安装和正确配置了Docker。让我们尝试通过运行以下命令从Docker Hub上拉取该镜像-
$ docker pull progrium/consul
输出结果如下所示:
我们将以以下方式发布一些带有端口的接口(在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
输出结果如下屏幕截图所示。
您还可以使用以下命令启用Consul的UI模式:
$ docker run -p 8400:8400 -p 8500:8500 -p 8600:53/udp -h node1 progrium/consul
-server -bootstrap -ui-dir /ui
您可以在以下网址上检查基于UI的输出: http://localhost:8500 。以下屏幕截图可以更好地了解基于UI的输出。
要在不同节点上的各个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、Etcd 和 SkyDNS2 。当我们在网络上与不同的服务进行交互时,强烈建议使用Registrator。
$ docker pull gliderlabs/registrator:latest
输出结果如下所示。
$ docker run -d \
--name = registrator \
--net = host \
--volume = /var/run/docker.sock:/tmp/docker.sock \
gliderlabs/registrator:latest \
consul://localhost:8500
输出的结果如下图所示。
您收到的输出是您刚刚启动的Docker容器的ID。您可以使用以下命令检查容器是否正在运行:
$ docker ps -a
输出结果如下所示:
您还可以使用以下命令查看 Registrator 的日志。
$ docker logs registrator
使用 rkt 和 Nomad
rkt 是另一种基于容器的服务,你可以在你的环境中使用它。它是由 CoreOS 开发的。构建 rkt 的主要原因是为了改善安全性,这是 Docker 在 2013-14 年开发初期面临的一个危机问题。
至于 Consul,我们可以使用 Rkt Registrator 来在 Consul 上进行服务发现。这个特定的 Registrator 项目正在开发中,并且 不推荐用于生产级别使用 。
你可以通过转到 rkt 的路径并运行以下命令来检查 rkt 是否已安装。
$ ./rkt
您可以查看输出,以检查是否已正确安装,如以下屏幕截图所示。
为了尝试rkt和Consul,请查看- https://github.com/r3boot/rkt-registrator 。
Nomad工具
最常用且最受欢迎的选项之一是Nomad工具。Nomad是一种用于管理机器集群并在其上运行应用程序的工具。它类似于 Mesos 或 Kubernetes 。默认情况下,Nomad包含了Docker和rkt驱动程序。因此,如果您正在寻找具有Consul的大规模容器部署解决方案,Nomad可能是一个很好的选择。请访问- https://www.nomadproject.io/docs/drivers/rkt.html 了解更多关于Nomad的信息。