Blog

Rolling Upgrade von Docker-Anwendungen mit CoreOS und Consul

Mark van Holsteijn

Mark van Holsteijn

Aktualisiert Oktober 22, 2025
4 Minuten

Im vorherigen Blogbeitrag haben wir Ihnen gezeigt, wie Sie mit CoreOS und Consul eine hochverfügbare Docker-Container-Anwendungsplattform einrichten. In diesem kurzen Blog-Beitrag zeigen wir Ihnen, wie einfach es ist, ein rollendes Upgrade einer bereitgestellten Anwendung durchzuführen. (Aktualisiert - 2. Juni 2015 - consul-http-loadbalancer-lb aus der Vagrant-Architektur entfernt)

Architektur

In diesem Blog-Beitrag werden wir dasselbe verwenden, aber für die Bereitstellung haben wir Vagrant anstelle von Amazon AWS verwendet, das etwas flotter zu bedienen ist :-).Architektur, die keinen Load Balancer enthält. Um Ihre eigene Container-Plattform als Service auf Vagrant zum Laufen zu bringen, klonen Sie das Repository und starten Ihren Cluster.

[bash]
git clone https://github.com/mvanholsteijn/coreos-container-platform-as-a-service.git
cd coreos-container-platform-as-a-service/vagrant
vagrant up
...
vagrant up
Bringing machine 'core-01' up with 'virtualbox' provider...
Bringing machine 'core-02' up with 'virtualbox' provider...
Bringing machine 'core-03' up with 'virtualbox' provider...
...
[/bash]

Überprüfen Sie den Cluster

Nachdem der Cluster gestartet ist, können Sie mit dem folgenden Befehl überprüfen, ob Ihr Cluster voll funktionsfähig ist. Sie sollten sehen, dass auf jedem Rechner 4 Einheiten laufen.

[bash]
for node in 1 2 3 ; do
vagrant ssh -c "systemctl | grep consul" core-0$node
done
...
consul-http-router.service loaded active running consul-http-router
consul-server-announcer.service loaded active running Consul Server Announcer
consul-server-registrator.service loaded active running Registrator
consul-server.service loaded active running Consul Server Agent
[/bash]

Einsetzen der Anwendung

Sobald der Cluster läuft, können Sie die paas-monitor Anwendung bereitstellen oder überwachen. Dies geschieht in zwei Schritten. Zunächst übermitteln Sie die Vorlage.

[bash]
fleetctl submit paas-monitor@.service
[/bash]

Dann laden und starten Sie die neuen Instanzen.

[bash]
fleetctl load paas-monitor@{1..6}.service
fleetctl start paas-monitor@{1..6}.service
fleetctl list-units | grep paas-monitor
[/bash]

Sie können nun den paas-monitor auf Ihrem Rechner in Betrieb sehen, indem Sie Pass Monitor Link öffnen und auf Start klicken. Sie sollten etwas wie in der Tabelle unten sehen. Lassen Sie dies laufen, während wir die Anwendung aktualisieren!

GastgeberfreigebenNachricht# Anzahl der AnrufeDurchschnittliche Reaktionszeitletzte Antwortzeit
47ea72be3817:1337v1Hallo Welt von v153811
cc4227a493d7:1337v1Hallo Welt von v159118
04a58012910c:1337v1Hallo Welt von v15476
090caf269f6a:1337v1Hallo Welt von v15877
096d01a63714:1337v1Hallo Welt von v15379
d43c0744622b:1337v1Hallo Welt von v15576

Aktualisieren der Anwendung

Jetzt werden wir Ihre Anwendung aktualisieren. Normalerweise würden wir erwarten, dass Sie in der Unit-Datei eine höhere Version des Docker-Images angeben. Aber anstatt die Version des auszuführenden Images zu ändern, ändern Sie den Wert der Umgebungsvariablen RELEASE in der Unit-Vorlagendatei paas-monitor@.service.

[bash]
sed -i -e 's/--env RELEASE=[^ ]*/--env RELEASE=v2/' paas-monitor@.service
[/bash]

Jetzt haben wir die Einheitenvorlagendatei geändert. Sie sollten die alte Einheitendatei vernichten und die neue Datei einreichen.

[bash]
fleetctl destroy paas-monitor@.service
fleetctl submit paas-monitor@.service
[/bash]

Jetzt haben Sie zwei Möglichkeiten, eine langsame und eine schnelle.

Langsam-Option

Die langsame Option besteht darin, die laufenden Instanzen zu durchlaufen, sie eine nach der anderen anzuhalten, sie zu zerstören und eine neue Instanz auf der Grundlage der neu eingereichten Vorlage zu starten. Da dies eine langweilige, sich wiederholende Arbeit ist, haben wir ein kleines Skript erstellt, das dies erledigt :-)

[bash]
./rolling-upgrade.sh paas-monitor@.service
[/bash]

Schnelle Option

Die schnelle Option ist, 6 neue zu starten und alle 6 alten zu stoppen, nachdem die neuen gelaufen sind.

[bash]
fleetctl load paas-monitor@1{1..6}.service
fleetctl start paas-monitor@1{1..6}.service
fleetctl list-units | grep 'paas-monitor@1[1-6].service' | grep running
fleetctl stop paas-monitor@{1..6}.service
fleetctl destroy paas-monitor@{1..6}.service
[/bash]

Wenn Sie Ihren Monitor beobachten, sollten Sie sehen, dass die neue Instanz nach und nach erscheint.

GastgeberfreigebenNachricht# Anzahl der AnrufeDurchschnittliche Reaktionszeitletzte Antwortzeit
47ea72be3817:1337v1Hallo Welt von v153811
cc4227a493d7:1337v1Hallo Welt von v159118
04a58012910c:1337v1Hallo Welt von v15476
090caf269f6a:1337v1Hallo Welt von v15877
096d01a63714:1337v1Hallo Welt von v15379
d43c0744622b:1337v1Hallo Welt von v15576
fee39f857479:1337v2Hallo Welt von v21879
99c1a5aa3b8b:1337v2Hallo Welt von v2279

Fazit

CoreOS und Consul bieten alle grundlegenden Funktionen, um Ihre Docker-Container zu verwalten und rollende Upgrades Ihrer Anwendung durchzuführen.

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.