Blog

Wie man zusammengesetzte Docker-Anwendungen mit Consul-Schlüsselwerten auf CoreOS bereitstellt

Mark van Holsteijn

Aktualisiert Oktober 22, 2025
6 Minuten

Die meisten Beispiele für die Bereitstellung von Docker-Anwendungen auf CoreOS verwenden eine einzige Docker-Anwendung. Aber sobald Sie eine Anwendung haben, die aus mehr als 1 Einheit besteht, wird die Anzahl der Befehle, die Sie eingeben müssen, schnell lästig. Bei Xebia haben wir eine Best Practice, die besagt "Three strikes and you automate", die besagt, dass Sie beim dritten Mal, wenn Sie etwas Ähnliches tun, automatisieren müssen. In diesem Blog zeige ich Ihnen die Handbuchseite des Dienstprogramms fleetappctl, mit dem Sie rollierende Upgrades durchführen und Consul Key-Wertepaare von Composite Applications auf CoreOS bereitstellen können, und zeige drei Beispiele für seine Verwendung.

fleetappctl ist ein Dienstprogramm, mit dem Sie eine Reihe von CoreOS Fleet-Unit-Dateien als eine einzige Anwendung verwalten können. Sie können die Anwendung starten, stoppen und bereitstellen. fleetappctl ist idempotent und führt rollende Upgrades für Vorlagendateien mit mehreren laufenden Instanzen durch. Es kann Platzhalter bei der Bereitstellung ersetzen und ist in der Lage, Consul-Schlüsselwertpaare als Teil Ihrer Anwendung bereitzustellen. Mit fleetappctl haben Sie alles, was Sie brauchen, um eine in sich geschlossene Bereitstellungseinheit Ihrer zusammengesetzten Anwendung zu erstellen und sie unter Versionskontrolle zu stellen. Die Befehlszeilenoptionen für fleetappctl sind unten aufgeführt:

fleetappctl [-d deployment-descriptor-file]
[-e platzhalter-wert-datei]
(generieren | Liste | starten | stoppen | zerstören)

Option -d

Die Deployment-Deskriptor-Datei beschreibt alle Fleet-Unit-Dateien und Consul-Schlüsselwertpaar-Dateien, aus denen die Anwendung besteht. Alle Dateien, auf die im Deployment-Deskriptor verwiesen wird, können Platzhalter für Einsatzzeitwerte enthalten. Diese Platzhalter sind in doppelten geschweiften Klammern {{ }} eingeschlossen.

Option -e

Die Datei enthält die Werte für die Platzhalter, die bei der Bereitstellung der Anwendung verwendet werden sollen. Die Datei hat ein einfaches Format:

<Name>=<Wert>

starten

startet alle Einheiten in der Reihenfolge, in der sie in der Bereitstellungsbeschreibung erscheinen. Wenn Sie eine Unit-Vorlagendatei haben, können Sie die Anzahl der Instanzen angeben, die Sie starten möchten. Start ist idempotent, d.h. Sie können start mehrfach aufrufen. Start bringt die Bereitstellung in Einklang mit Ihrem Deskriptor.Wenn sich die Unit-Datei im Vergleich zur bereitgestellten Unit-Datei geändert hat, werden die entsprechenden Instanzen angehalten und mit der neuen Unit-Datei neu gestartet. Wenn Sie eine Vorlagendatei haben, werden die Instanzen der Vorlagendatei nacheinander aktualisiert.Alle durch die consul.KeyValuePairs-Einträge definierten Consul-Schlüsselwertpaare werden in Consul erstellt. Vorhandene Werte werden nicht überschrieben.

erzeugen

generiert einen Deployment-Deskriptor (deployit-manifest.xml) auf der Grundlage aller in Ihrem Verzeichnis gefundenen Unit-Dateien. Wenn es sich bei einer Datei um eine Flotteneinheit-Vorlagendatei handelt, wird die Anzahl der zu startenden Instanzen auf 2 gesetzt, um rollierende Upgrades zu unterstützen.

stoppen

stoppt alle Einheiten in umgekehrter Reihenfolge ihres Erscheinens im Einsatzdeskriptor.

zerstören

zerstört alle Einheiten in umgekehrter Reihenfolge ihres Erscheinens in der Aufmarsch-Deskription.

Liste

listet den Laufzeitstatus der Einheiten auf, die im Bereitstellungsdeskriptor erscheinen.

fleetappctl installieren

um das Dienstprogramm fleetappctl zu installieren, geben Sie die folgenden Befehle ein:

curl -q -L https://github.com/mvanholsteijn/fleetappctl/archive/0.25.tar.gz | tar -xzf -
cd fleetappctl-0.25
./install.sh
brew install xmlstarlet
brew install fleetctl

Starten Sie die Plattform

Wenn Sie die Plattform noch nicht laufen haben, starten Sie sie zuerst.

cd ..
git clone https://github.com/mvanholsteijn/coreos-container-platform-as-a-service.git
cd coreos-container-platform-as-a-service
git checkout 029d3dd8e54a5d0b4c085a192c0ba98e7fc2838d
cd vagrant
vagabundieren
./is_platform_ready.sh

Beispiel - Webanwendung mit drei Komponenten

Das erste Beispiel ist eine Anwendung mit drei Komponenten. Sie besteht aus einem Mount, einem Redis-Datenbankdienst und einer Webanwendung. Wir erstellen den Bereitstellungsdeskriptor, geben an, dass wir das Mount nicht starten wollen, starten die Anwendung und ändern dann die Unit-Datei der Webanwendung, um den Namen des Dienstes in 'helloworld' zu ändern. Wir führen ein rollierendes Upgrade durch, indem wir start again. ausgeben. Schließlich listen wir die Anwendung auf, stoppen sie und zerstören sie.

cd ../fleet-units/app
# einen Einsatzdeskriptor erzeugen
fleetappctl generieren
# mount nicht explizit starten
xml ed -u '//fleet.UnitConfigurationFile[@name="mnt-data"]/startUnit'  
-v false deployit-manifest.xml  > 
deployit-manifest.xml.new
mv deployit-manifest.xml{.new,}
# Starten Sie die App
fleetappctl starten
# Prüfen Sie, ob es funktioniert.
curl hellodb.127.0.0.1.xip.io:8080
curl hellodb.127.0.0.1.xip.io:8080
# Ändern Sie den Dienstnamen der Anwendung in der Unit-Datei.
sed -i -e 's/SERVICE_NAME=hellodb/SERVICE_NAME=helloworld/' app-hellodb@.service
# Rollendes Upgrade durchführen
fleetappctl starten
# Überprüfen Sie, ob er jetzt unter dem neuen Dienstnamen erreichbar ist.
curl helloworld.127.0.0.1.xip.io:8080
# Alle Einheiten dieser App anzeigen
fleetappctl Liste
# Alle Einheiten dieser Anwendung anhalten
fleetappctl stop
fleetappctl Liste
# Starten Sie es erneut
fleetappctl starten
# Zerstören Sie es
fleetappctl zerstören

Beispiel - Platzhalter-Referenzen

Dieses Beispiel zeigt die Verwendung einer Platzhalter-Referenz in der Unit-Datei der Anwendung paas-monitor. Die Anwendung benötigt zwei optionale Umgebungsvariablen: RELEASE und MESSAGE, mit denen Sie die resultierenden Antworten konfigurieren können. Die Variable RELEASE wird im Docker-Ausführungsbefehl in der Unit-Datei der Flotte über einen Platzhalter konfiguriert. Der tatsächliche Wert für die aktuelle Bereitstellung wird aus einer Platzhalterwertdatei übernommen.

cd ../fleetappctl-0.25/examples/paas-monitor
#Prüfen Sie die Platzhalter-Referenz
grep '{{' paas-monitor@.service
...
ExecStart=/bin/sh -c "/usr/bin/docker run --rm --name %p-%i  
<strong>--env RELEASE={{release}}</strong>  
...
# Prüfen Sie unsere Platzhalterwerte
cat dev.env
...
release=V2
# Starten Sie die App
fleetappctl -e dev.env start
# aktuelle Version im Status anzeigen
curl paas-monitor.127.0.0.1.xip.io:8080/status
# start ist idempotent (d.h. es passiert nichts)
fleetappctl -e dev.env start
# Aktualisieren Sie den Platzhalterwert und sehen Sie, dass ein rollendes Upgrade in Arbeit ist.
echo 'release=V3' > dev.env
fleetappctl -e dev.env start
curl paas-monitor.127.0.0.1.xip.io:8080/status
fleetappctl zerstören

Beispiel - Env Consul Key Value Pair Bereitstellungen

Das letzte Beispiel zeigt die Verwendung eines Consul-Schlüssel-Wert-Paares, die Verwendung von Platzhaltern und envconsul zur dynamischen Aktualisierung der Umgebungsvariablen einer laufenden Instanz. Die Umgebungsvariablen RELEASE und MESSAGE werden aus den Schlüsseln unter /paas-monitor in Consul übernommen. Der Anfangswert dieser Schlüssel wird wiederum beim ersten Laden geladen und mit Werten aus der Platzhalterdatei gesetzt.

cd ../fleetappctl-0.25/examples/envconsul
#Sehen Sie sich die Consul-Schlüssel-Wert-Paare an, und beachten Sie den Verweis auf Platzhalterwerte.
cat keys.consul
...
paas-monitor/release={{release}}
paas-monitor/message={{message}}
# Prüfen Sie unsere Platzhalterwerte
cat dev.env
...
release=V4
message=Hallo Leute
# Starten Sie die App
fleetappctl -e dev.env start
# Aktuelle Version und Nachricht im Status anzeigen
curl paas-monitor.127.0.0.1.xip.io:8080/status
# Ändern Sie die Nachricht in Consul.
fleetctl ssh paas-monitor@1  
curl -X PUT  
-und 'hallo Konsul'  
https://172.17.8.101:8500/v1/kv/paas-monitor/message
# Prüfen Sie die geänderte Nachricht
curl paas-monitor.127.0.0.1.xip.io:8080/status
# Start ändert die Werte nicht.
fleetappctl -e dev.env start

Fazit

CoreOS bietet alle grundlegenden Funktionen für eine Container Platform as a Service. Mit dem Dienstprogramm fleetappctl ist es einfach, zusammengesetzte Anwendungen zu starten, zu stoppen und zu aktualisieren. Das Skript ist für fleetctl überflüssig und unterbricht nicht andere Möglichkeiten, Ihre Anwendungen auf CoreOS bereitzustellen. Der Quellcode, die Handbuchseite und die Dokumentation von fleetappctl finden Sie auf GitHub - mvanholsteijn/fleetappctl.  

Verfasst von

Mark van Holsteijn

Mark van Holsteijn is a senior software systems architect at Xebia Cloud-native solutions. He is passionate about removing waste in the software delivery process and keeping things clear and simple.

Contact

Let’s discuss how we can support your journey.