使用 Docker 配置 Consul KV

简介

HashiCorp的Consul是一个多功能工具,在现代DevOps环境中发挥着多种作用。它广泛用于服务发现、健康检查、负载均衡,值得一提的是,它还可以作为一个分布式键值(KV)存储。Consul中的KV存储非常适合以高可用性和一致性方式存储动态配置数据、特性标志、秘密和元数据,以便分布式系统中的服务可以动态访问。使用Docker配置Consul的KV存储可以实现快速设置和隔离环境,使其成为测试和开发理想的工具。

本教程将指导您使用Docker设置和配置Consul的KV存储。到头来,您将在Docker中运行一个完全功能的Consul实例,配置了可访问的KV对。这个设置对于分布式系统中的动态服务配置和状态管理至关重要。

先决条件

在开始之前,请确保您具备以下条件:

第1步 – 拉取Consul Docker镜像

让我们从Docker Hub拉取官方Consul镜像。这个镜像由HashiCorp维护,包括运行Consul所需的一切。

登录到您的Ubuntu Droplet的控制台并运行:

docker pull hashicorp/consul:latest
Output
latest: Pulling from hashicorp/consul c8bcd218a73d: Pull complete 5f1ac8227c2a: Pull complete c51fd79d429a: Pull complete 91eff479bde6: Pull complete 4dfcc18e51db: Pull complete 3e2a8bf39bf9: Pull complete bd9ddc54bea9: Pull complete 2054d291fb84: Pull complete Digest: sha256:e244c64df77ab3586f177f1692e98575086eb40343dc82a6320f5e79543490eb Status: Downloaded newer image for hashicorp/consul:latest docker.io/hashicorp/consul:latest

步骤2 — 运行Consul容器

既然已经下载了Consul镜像,现在可以启动一个新的Consul容器了。这个容器将作为您的Consul服务器,并允许您与KV存储交互。

要启动容器,请运行:

docker run -d --name=consul-server -e 
Output
CONSUL_BIND_INTERFACE
=eth0 -p 8500:8500 -p 8600:8600/udp hashicorp/consul c893b6707686bce8434213975a75c936b834cf25fc84d10b407a11c4fa8ca8ba

这个命令的作用如下:

  • -d以分离模式(后台)运行容器。
  • --name=consul-server为容器分配名称。
  • -e CONSUL_BIND_INTERFACE=eth0设置Consul应绑定的网络接口。这对于正常的网络通信是必要的。
  • -p 8500:8500将Consul网页UI和API端口映射到主机上。
  • -p 8600:8600/udp将DNS服务端口映射到服务发现上。

这一步非常关键,因为它设置了核心的Consul服务,您将使用它来配置KV存储。

步骤3 — 验证Consul安装

为了确保Consul正确运行,您需要验证容器状态并访问Consul UI。

首先,运行docker ps命令来列出所有运行中的容器,并验证Consul容器是否正在运行。

docker ps                                                                                                      
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                                                                                    NAMES
c893b6707686   hashicorp/consul   "docker-entrypoint.s…"   51 seconds ago   Up 50 seconds   8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp   consul-server

现在,检查Consul是否可以访问,打开网页浏览器,导航至http://localhost:8500。你应该能看到Consul的用户界面。

这一验证步骤很重要,用于在存储数据到KV存储(第5步)之前确认你的Consul实例没有问题。

第4步 — 配置防火墙(可选)

如果你的Consul实例需要被外部访问(例如,从一个集群中的其他节点),你必须调整防火墙设置以允许必要的端口上的流量。

例如,如果你在运行Consul的云实例上,你可能需要允许8500端口(HTTP API)和8600端口(DNS)上的入站流量。具体的命令将根据你的防火墙解决方案(UFW,iptables等)而有所不同。

这一步确保你的Consul实例可以从其他机器访问,这对于分布式配置至关重要。

第5步 — 存储键值对

当Consul运行时,您可以现在使用KV存储来存储配置数据。您可以使用Consul CLI或Web UI添加键值对。

通过CLI存储键值对的命令如下:

docker exec -it consul-server consul kv put config/db_host 
192.168.1.100
Success! Data written to: config/db_host
docker exec -it consul-server consul kv put config/db_port 3306         
Success! Data written to: config/db_port

这个命令的作用如下:

  • -it – 从本地系统启动交互式终端到容器。
  • consul kv put – kv put命令将数据写入给定的KV存储路径。
  • config/db_host – 存储值的路径。
  • 192.168.1.100 – 值。

通过Web UI,

  1. 访问Consul UI(http://localhost:8500)。
  2. 点击“键/值”标签页。
  3. 点击“创建”创建新键。
  4. 输入键(例如,config/db_host)和值(例如,192.168.1.100)。

这些命令和行动存储了关键的配置数据,您的服务可以在运行时动态地访问这些数据。

步骤6 – 检索键值对

一旦您存储了一些KV对,您将想要检索它们以确保它们已经被正确存储。

通过CLI,使用以下命令检索值:

docker exec -it consul-server consul kv get config/db_host     
192.168.1.100

通过Web UI,

  1. 在Consul UI中,转到“键/值”标签页。
  2. 找到您创建的键,点击它以查看存储的值。

检索KV对是验证您的数据是否正确存储和可访问的必要步骤。

第7步 — 使用Docker卷持久化数据

默认情况下,Docker容器是临时的,这意味着存储在其中的任何数据如果容器被移除将会丢失。为了持久化您的Consul KV数据,您应该使用Docker卷。

  1. 停止并移除当前的Consul容器:
docker stop consul-server 
docker rm consul-server 

现在,检查容器,您应该注意到Consul容器已经不再运行。

docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

2. 运行一个新的Consul容器并附上一个Docker卷:

docker run -d --name=consul-server -e 
Output
CONSUL_BIND_INTERFACE
=eth0 -p 8500:8500 -p 8600:8600/udp -v consul_data:/consul/data hashicorp/consul 2d2a7d3ff1911c2283e70506d68391a5cbf9c935a2ae447bfb8fa21481989ef1
docker ps 
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2d2a7d3ff191 hashicorp/consul "docker-entrypoint.s…" 5 seconds ago Up 4 seconds 8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp consul-server

选项 -v consul_data:/consul/data 将一个Docker卷挂载到容器上,确保您的KV存储在容器重启后仍然持久存在。

第8步 — 自动化Consul启动(可选)

在生产环境中部署时,您可能希望使用 Docker Compose 自动化 Consul 容器的启动。Docker Compose 可以简化多容器 Docker 应用程序的管理,并使服务管理变得容易。

创建一个名为 docker-compose.yml 的文件,内容如下:

docker-compose,yml
services:
  consul:
    image: hashicorp/consul:latest
    environment:
      - CONSUL_BIND_INTERFACE=eth0
    volumes:
      - consul_data:/consul/data 
    ports:
      - "8500:8500"
      - "8600:8600/udp"
    restart: always
volumes:
  consul_data:

然后运行:

docker-compose up -d
Output
[+] Running 2/2 ✔ Network work_default Created 0.0s ✔ Container consul-server Started 0.1s
docker ps
Output
WARN[0000] /Users/anandhkumar/work/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS work-consul-1 hashicorp/consul:latest "docker-entrypoint.s…" consul 40 seconds ago Up 11 seconds 8300-8302/tcp, 8600/tcp, 8301-8302/udp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8600->8600/udp

此命令会自动启动 Consul,并在失败时确保其重新启动,使其更适合生产环境使用。

步骤 9 — 清理

一旦您完成了对 Consul 实例的工作,您应该清理 Docker 环境以释放资源。

让我们停止并删除 Consul 容器:

docker stop consul-server   
docker rm consul-server
docker ps
output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

如果您完成了 Consul 的工作,您还可以删除 Docker 镜像:

docker rmi hashicorp/consul  
output
hashicorp/consul@sha256:e244c64df77ab3586f177f1692e98575086eb40343dc82a6320f5e79543490eb Deleted: sha256:eff8ccb509560987755a70df8d6c0b9410538d503d99498ae1ea9f48066b0439 Deleted: sha256:b5e6402bbb78eb061d538505a30300ef7f612104eaf0f11b17839a9b29bc5603 Deleted: sha256:1c61ada2ad8074615120d13bd805260d766ae8424cafbda4bded529d6a204d6f Deleted: sha256:9b36da670e2a59f1d81c6e3c9d55906c576b384df51272977e5a9caea7131e74 Deleted: sha256:8c6e52c441c246f60ca146b71204b7d6511df75fa87a0dc0a0f91141964e8fd9 Deleted: sha256:1fce18208235de2be3c419764ec1d469229af5387447d21649c841632c653cef Deleted: sha256:68e0a114c9c35b9aa8cac31fa32b27f886361bc85fcc63f34e882e9128f33a14 Deleted: sha256:3da5b888208a9b19694bfeaf8c74a432b50f44542d717c9e1f3ab273e505855a Deleted: sha256:dea73e9287e6e2f3b7f9fcac4f20767d7badeefa24e52f990f1674e98abfa1a3 Deleted: sha256:201fa22d1f4c7d6e7ec43135c63b2260f303f4864f5eb43569faaa1731628799

清理有助于保持整洁的开发环境,并确保不必要的占用 Docker 资源。

结论

在本教程中,您学会了如何使用Docker设置和配置Consul的KV存储。您已经了解了Docker的安装,运行Consul容器,配置KV存储,使用Docker卷持久化数据以及清理您的环境。完成这些步骤后,您现在可以使用Consul动态管理分布式系统中的配置数据,充分利用Docker易于部署和管理的优势。

Source:
https://www.digitalocean.com/community/tutorials/how-to-configure-consul-kv-using-docker