Wie man Consul KV mit Docker einrichtet

Einleitung

Consul von HashiCorp ist ein vielseitiges Werkzeug, das in modernen DevOps-Umgebungen mehrere Funktionen erfüllt. Es wird häufig für Dienstentdeckung, Gesundheitsüberprüfungen, Lastverteilung und insbesondere als verteiltes Key-Value-(KV)-Speicher verwendet. Der KV-Speicher in Consul ist perfekt für die Speicherung dynamischer Konfigurationsdaten, Feature-Flags, geheimer Daten und Metadaten in einer hochverfügbar und konsistenten Art und Weise über Ihre Infrastruktur, sodass diese dynamisch von Diensten in einem verteilten System aufgerufen werden können. Die Verwendung von Docker zur Konfiguration des KV-Speichers in Consul ermöglicht eine schnelle Einrichtung und isolierte Umgebungen, was ihn zu idealeren Werkzeugen für Testen und Entwicklung macht.

Dieses Tutorial wird Ihnen Schritt für Schritt durch den Prozess geführt, um Consuls KV-Speicher mit Docker zu konfigurieren. Am Ende werden Sie einen vollständig funktionsfähigen Consul-Instanz mit eingestelltem KV-Paar in Docker haben, auf das zugegriffen werden kann. Diese Einrichtung ist wichtig für die dynamische Dienstkonfiguration und -verwaltung in verteilten Systemen.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie die folgenden gehabt haben:

  • Ein DigitalOcean Cloud-Konto..
  • Ein Server, der Ubuntu ausführt und ein nicht-root-Benutzer mit sudo-Rechten sowie eine aktive Firewall. Wenn Sie Informationen darüber benötigen, wie Sie dies einrichten, wählen Sie Ihre Distribution von dieser Liste und folgen Sie unserem Leitfaden für die Einrichtung Ihres Servers. Stellen Sie sicher, dass Sie mit einer unterstützten Version von Ubuntu arbeiten.
  • Docker installiert auf Ihrem Ubuntu-Droplet. Folgen Sie diesem Tutorial auf Wie man Docker auf Ubuntu installiert und verwendet.
  • Vertrautheit mit der Linux-Kommandozeile. Wenn Sie sich eine Einführung oder ein Update in die Kommandozeile machen möchten, können Sie diese Anleitung auf Primer zu der Linux-Kommandozeile besuchen.
  • Grundkenntnisse der Docker-Befehle und Containermanagement.

Schritt 1 — Herunterladen des Consul-Docker-Images

Lassen Sie uns das offizielle Consul-Image von Docker Hub herunterladen. Dieses Image wird von HashiCorp verwaltet und enthält alles, was Sie bentigen, um Consul zu betreiben.

Loggen Sie sich in die Konsole Ihres Ubuntu-Droplets ein und führen Sie Folgendes aus:

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

Schritt 2 — Der Consul-Container wird ausgeführt

Nachdem die Consul-Image heruntergeladen wurde, kann ein neuer Consul-Container gestartet werden. Dieser Container wird als Ihr Consul-Server dienen und Ihnen Zugriff auf die KV-Datenbank ermöglichen.

Um den Container zu starten, führen Sie die folgende Befehlsausführung aus:

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

Hier ist was dieser Befehl tut:

  • -d führt den Container in abgekoppelter Modus (im Hintergrund) aus.
  • --name=consul-server gibt dem Container einen Namen.
  • -e CONSUL_BIND_INTERFACE=eth0 setzt die Netzwerkkarte, auf die Consul sich binden soll. Dies ist notwendig für eine korrekte Netzwerkkommunikation.
  • -p 8500:8500 verknüpft den Consul-Web-UI- und API-Port mit dem Host.
  • -p 8600:8600/udp verknüpft den DNS-Dienstport für den Dienstentdecker.

Dieser Schritt ist entscheidend, da er die Kerndienstleistung von Consul einrichtet, die Sie zum Konfigurieren der KV-Datenbank verwenden werden.

Schritt 3 — Überprüfung der Consul-Installation

Um sicherzustellen, dass Consul richtig läuft, müssen Sie den Containerstatus überprüfen und auf die Consul-Oberfläche zugreifen.

Zunächst starten Sie docker ps, um alle laufenden Container aufzulisten und zu überprüfen, ob der Consul-Container läuft.

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

Jetzt prüfen Sie, ob Consul zugänglich ist, öffnen Sie einen Webbrowser und navigieren Sie zu http://localhost:8500. Sie sollten die Consul-UI sehen.

Dieser Überprüfungsschritt ist wichtig, um zu bestätigen, dass Ihre Consul-Instanz ohne Probleme läuft, bevor Sie Daten im KV-Speicher (Schritt 5) ablegen.

Schritt 4 — Firewallkonfiguration (optional)

Wenn Ihre Consul-Instanz extern zugegriffen werden muss (z.B. von anderen Knoten in einem Cluster), müssen Sie Ihre Firewall-Einstellungen anpassen, um auf die notwendigen Ports zu erlauben.

Zum Beispiel müssen Sie bei der Ausführung von Consul auf einem Cloud-Dienst inbound-Traffic auf Port 8500 (HTTP API) und 8600 (DNS) zulassen. Die spezifischen Befehle variieren je nach Firewalllösung (UFW, iptables usw.).

Dieser Schritt stellt sicher, dass Ihre Consul-Instanz von anderen Maschinen aus zugegriffen werden kann, was für verteilte Konfigurationen wichtig ist.

Schritt 5 — Speichern von Key-Value-Paaren

Mit dem Betrieb von Consul können Sie nun das KV-Speicher verwenden, um Konfigurationsdaten abzuspeichern. Sie können Schlüssel-Wert-Paare mithilfe der Consul-Befehlszeile oder der Web-Oberfläche hinzufügen.

Um ein Schlüssel-Wert-Paar via CLI abzuspeichern, führen Sie den folgenden Befehl aus:

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

Hier ist, was dieser Befehl tut:

  • -it – Startet den interaktiven Terminal vom lokalen System in das Container-System.
  • consul kv put – Der Befehl kv put schreibt die Daten in den angegebenen Pfad des KV-Speichers.
  • config/db_host – Der Pfad, um den Wert abzuspeichern.
  • 192.168.1.100 – Der Wert.

Mit der Web-Oberfläche,

  1. Navigieren Sie zu der Consul-Oberfläche (http://localhost:8500).
  2. Klicken Sie auf den Tab “Schlüssel/Wert”.
  3. Erstellen Sie einen neuen Schlüssel, indem Sie auf “Erstellen” klicken.
  4. Geben Sie den Schlüssel (z.B., config/db_host) und den Wert (z.B., 192.168.1.100) ein.

Diese Befehle und Aktionen speichern kritische Konfigurationsdaten, die Ihre Dienste dynamisch zur Laufzeit abrufen können.

Schritt 6 — Abrufen von Schlüssel-Wert-Paaren

Sobald Sie einige KV-Paare gespeichert haben, möchten Sie sie abrufen, um sicherzustellen, dass sie korrekt gespeichert wurden.

Mit der CLI können Sie einen Wert mithilfe des folgenden Befehls abrufen:

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

Mit der Web-Oberfläche,

  1. Gehe zur Registerkarte “Key/Value” im Consul-UI.
  2. Finde die von dir erstellte Schluessel und klicke darauf, um den gespeicherten Wert zu sehen.

Das Abrufen der KV-Paare ist ein notwendiger Schritt, um zu verifizieren, dass deine Daten korrekt gespeichert und zugänglich sind.

Schritt 7 — Persistieren von Daten mit Docker-Volumes

Standardmäßig sind Docker-Container ephemeral, was bedeutet, dass jegliche innerhalb ihnes gespeicherten Daten verloren gehen werden, wenn der Container entfernt wird. Um deine Consul-KV-Daten persistent zu halten, solltest du Docker-Volumes verwenden.

  1. Stoppe und entferne den aktuellen Consul-Container:
docker stop consul-server 
docker rm consul-server 

Bitte überprüfe nun die Container und du solltest erkennen, dass der Consul-Container nicht mehr laufend ist.

docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

2.Führe einen neuen Consul-Container mit einem angehängten Docker-Volume aus:

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

Die Option -v consul_data:/consul/data mountet ein Docker-Volume am Container, das sicherstellt, dass dein KV-Speicher zwischen Container-Neustarts bestehen bleibt.

Schritt 8 — Automatisierung des Consul-Startvorganges (als Option)

Für Produktionsdeployment könnten Sie den Start Ihres Consul-Containers mithilfe von Docker Compose automatisieren. Docker Compose vereinfacht die Verwaltung von mehreren Containern in Docker-Anwendungen und erleichtert den Service-Management.

Erstellen Sie eine Datei mit dem Namen docker-compose.yml und fügen Sie folgender Inhalt hinzu:

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:

Dann führen Sie den folgenden Befehl aus:

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

Dieser Befehl startet Consul automatisch und sorgt dafür, dass es bei einem Fehler neu gestartet wird, was es für Produktionszwecke robuster macht.

Schritt 9 — Bereinigung

Sobald Sie mit Ihrer Consul-Instanz fertig sind, sollten Sie Ihren Docker-Aufruf freischalten, um Ressourcen freizugeben.

Lassen Sie uns den Consul-Container stoppen und entfernen:

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

Wenn Sie mit Consul fertig sind, können Sie auch das Docker-Image entfernen:

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

Ein sauberer Arbeitsplatz hilft bei der Bewirtschaftung von Docker-Ressourcen.

Fazit

In diesem Tutorial haben Sie erfahren, wie Sie den Consul-KV-Speicher mit Docker einrichten und konfigurieren können. Sie haben die Installation von Docker, den Betrieb des Consul-Containers, die Konfiguration des KV-Speichers, die Datenspeicherung mit Docker-Volumes und die Reinigung Ihrer Umgebung abgedeckt. Mit diesen Schritten können Sie nun Consul verwenden, um in Ihren verteilten Systemen dynamisch Konfigurationsdaten zu verwalten und die Leistung von Docker für die einfache Deployment und Verwaltung auszuschlagen.

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