在本章中,我们将了解微服务如何与 Consul 协作。我们还将学习以下组件如何影响 Consul。
- 使用 Docker
- 构建 Registrator 进行服务发现
- 使用 rkt 和 Nomad
现在让我们详细讨论每一个。
使用 Docker
在开始之前,请不要在生产环境中使用此设置,因为它仅用于演示目的。Docker 是一种基于容器的服务,通过它我们可以轻松部署我们的应用程序。为了使用 Consul,我们将使用以下链接中的镜像——
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
您可以在 http://localhost:8500 上查看基于 UI 的输出。以下截图为您提供了有关基于 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 进行服务发现。此特定的 Registrator 项目目前正在开发中,不建议用于生产级别。
您可以通过进入其路径并运行以下命令来检查是否安装了 rkt。
$ ./rkt
您可以检查输出以确认是否正确安装,如下图所示。
要尝试使用 rkt 和 Consul,请查看——https://github.com/r3boot/rkt-registrator
Nomad 工具
Nomad 是一个用于管理机器集群并在其上运行应用程序的工具。它类似于 Mesos 或 Kubernetes。默认情况下,Nomad 在其内部包含 Docker 和 rkt 驱动程序。因此,如果您正在寻找使用 Consul 进行大规模容器部署,Nomad 可能是一个不错的解决方案。更多关于 Nomad 的信息,请查看——https://www.nomadproject.io/docs/drivers/rkt.html