So aktivieren Sie die automatische Aktualisierung von Podman-Containern
Podman ist eine OCI-konforme Containerisierungsplattform, die häufig anstelle von Docker verwendet wird. Sein Daemon-freies Modell und sein umfangreiches Feature-Set machen es zu einem guten Kandidaten für den Einsatz in der Entwicklung und Produktion.
In diesem Artikel zeigen wir Ihnen, wie Sie das automatische Update -System von Podman verwenden, um Ihre Container neu zu starten, wenn neue Images veröffentlicht werden. Podman kann so konfiguriert werden, dass regelmäßig nach Updates gesucht wird, das neueste Image abgerufen und betroffene Container mit ihren aktuellen Einstellungen neu generiert werden.
Warum Container automatisch aktualisieren?
Container sind oft kurzlebig, müssen aber trotzdem regelmäßig gewartet werden. Eine kritische Schwachstelle in einem Image könnte Angreifern Zugriff auf Ihre Anwendung verschaffen, die innerhalb weniger Stunden nach ihrer Entdeckung ausgenutzt wird.
Bei den meisten gängigen Containertechnologien müssen Sie Ihre Container manuell aktualisieren. Dies legt die Verantwortung auf die Betriebsteams, sich für Release-Ankündigungen anzumelden und Tools zu erstellen, die neue Änderungen implementieren.
Das integrierte Container-Update-System von Podman löst dieses Problem und hält die Workloads auf dem neuesten Stand. Container können schnell aktualisiert werden, nachdem neue Image-Versionen eingefügt wurden, wodurch sichergestellt wird, dass Ihre Bereitstellungen mit den neuesten Patches und Fehlerbehebungen auf dem neuesten Stand sind.
Automatische Updates aktivieren
Automatische Updates werden für einen Container aktiviert, indem bei seiner Erstellung ein io.containers.autoupdate
Label festgelegt wird.
$ podman run -d -p 8080:80 \
–name nginx-container\
–label io.containers.autoupdate=registrierung \
docker.io/library/nginx:latest
Das Label kann zwei mögliche Werte haben:
registry
– Bei der Suche nach Updates überprüft Podman die Image-Registrierung, um festzustellen, ob eine neue Version des von Ihrem Container verwendeten Tags verfügbar ist. In diesem Fall wird das Image extrahiert und Ihr Container wird neu gestartet. Registrierungsaktualisierungen funktionieren nur, wenn Sie den vollständigen Pfad der Registrierung verwenden –docker.io/library/nginx:latest
der oben angezeigte Link ist beabsichtigt, danginx:latest
er zu vage ist.local
– Diese Aktualisierungsmethode verhindert, dass Podman Container-Images anzeigt, die bereits im Dateisystem Ihres Hosts vorhanden sind. Der Container wird neu gestartet, wenn sich die lokale Version des Image-Tags von der Version unterscheidet, in der der Container ausgeführt wird. Dies kann nützlich sein, wenn Bilder während der Entwicklung neu erstellt werden.
Das Vorhandensein des Labels macht diesen Beispiel-NGINX-Container für automatische Updates geeignet. Es ist jedoch noch mehr Arbeit erforderlich, bevor die Updates tatsächlich angewendet werden können.
Erstellen eines Systemd-Dienstes
Der Aktualisierungsmechanismus von Podman erfordert, dass Ihre Container innerhalb von systemd-Diensten ausgeführt werden. Da Podman dämonlos ist, fehlt ihm ein zentraler Controller, der Ihre Container starten und stoppen kann. Sie in einen systemd-Dienst einzuschließen, bietet Lebenszyklusverwaltungsfunktionen und die Möglichkeit, als Reaktion auf bestimmte Ereignisse neu zu starten.
Die Podman-CLI enthält einen Befehl, der eine systemd-Moduldefinition aus einem Container erstellt:
$ podman generate systemd --name nginx-container > /etc/systemd/system/nginx-container.service
Die obigen Befehle erstellen einen neuen NGINX-Container mit einem systemd-Dienst am richtigen Speicherort.
Laden Sie dann systemd neu, um die Dienstdefinition zu registrieren, aktivieren und starten Sie dann den Dienst:
$ systemctl daemon-reload
$ systemctl aktiviert nginx-container.service
$ systemctl start nginx-container.service
Ihr NGINX-Container ist jetzt ein systemd-Dienst, der automatisch gestartet wird, wenn Ihr Host bootet. systemctl
Anstelle der Podman-CLI können Sie Befehle verwenden , um einen Container zu starten und zu stoppen:
$ systemctl start nginx-container.service
$ systemctl stop nginx-container.service
Um den Container zukünftig zu entfernen, müssen Sie die Dienstmoduldatei stoppen, deaktivieren und löschen. Starten Sie danach systemd neu, um die Änderungen vollständig zu übernehmen.
$ systemctl stop nginx-container.service
$ systemctl deaktiviert nginx-container.service
$ rm /etc/systemd/system/nginx-container.service
$ systemctl daemon-reload
Durchführen eines Updates
Nun ist alles für ein erfolgreiches automatisches Update des NGINX-Containers vorbereitet. Sie können eine On-Demand-Update-Prüfung mit dem Podman-Befehl ausführen auto-update
:
$ podman auto-update
Versuch, docker.io/library/nginx:latest… zu ziehen
Erhalten von Bildquellensignaturen
…
RICHTLINIEN FÜR EINHEITEN-CONTAINER-BILDER AKTUALISIERT
nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry true
Dadurch werden Container in systemd-Diensten aktualisiert, die dem Benutzer zur Verfügung stehen, der den Befehl ausführt. Möglicherweise müssen Sie verwenden sudo
, um dem obigen Beispiel zu folgen; Wenn ja, führen Sie auto-update
den Befehl auch als root aus:
$ sudo podman auto-update
In registry
diesem Beispiel wurde eine Aktualisierungsstrategie verwendet, sodass Podman eine Verbindung zur Image-Registrierung herstellt, auf Änderungen prüft und dann gegebenenfalls ein neues Image abruft. Die Befehlsausgabe zeigt, ob jeder Dienstcontainer aktualisiert wurde.
Da Container von systemd verwaltet werden, kann Podman feststellen, ob ein neuer Container erfolgreich gestartet wurde. Podman führt automatisch ein Rollback auf eine frühere Version des Images durch, wenn ein Upgrade-Fehler erkannt wird. Damit dies zuverlässig funktioniert, muss die Anwendung im Container systemd mitteilen , dass sie erfolgreich gestartet wurde. Dies kann durch Ausführen erfolgen systemd-notify --ready
.
nach Updates suchen
Manchmal möchten Sie vielleicht prüfen, ob Updates für Ihre Containerflotte verfügbar sind, ohne sie sofort anzuwenden. Verwenden Sie auto-update
den --dry-run
Flag-Befehl, um eine Liste der Dienste abzurufen, in denen das aktualisierte Image veröffentlicht wird:
$ podman auto-update --dry-run
…
RICHTLINIEN FÜR EINHEITEN-CONTAINER-BILDER AKTUALISIERT
nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry pending
Für die angezeigten Dienste pending
ist ein Update verfügbar.
Wenden Sie Updates nach einem Zeitplan an
Wir haben jetzt On-Demand-Container-Updates erfolgreich konfiguriert. Sie müssen keine neuen Images manuell abrufen oder Container neu starten. Der letzte Schritt besteht darin, einen Zeitplan einzurichten, damit Podman Updates regelmäßig anwendet, ohne einen auto-update
Befehl auszuführen.
Die meisten Podman-Distributionen enthalten zu diesem Zweck einen Systemtimer. Sie können den Timer aktivieren mit systemctl
:
$ systemctl enable podman-auto-update.timer
Der Timer ist so eingestellt, dass er jeden Tag nach Updates sucht. Sie können den Zeitplan anpassen, indem Sie die Timer-Datei mit öffnen und den Feldwertsystemctl edit
ändern :OnCalendar
$ systemctl edit podman-auto-update.timer
[Timer]
OnCalendar=Fri *-*-* 18:00
Der oben gezeigte Zeitausdruck führt die Aktualisierungsprüfung jeden Freitag um 18:00 Uhr durch. Die Syntax ist im systemd-Handbuch beschrieben .
Da der Timer nun aktiviert ist, können Sie mit der Bereitstellung Ihrer io.containers.autoupdate
beschrifteten Container beginnen. Sie werden regelmäßig aktualisiert und neu gestartet, wodurch Wartungsvorgänge automatisiert werden.
Sie müssen den System-Timer von Podman nicht verwenden, um Updates zu planen. Sie können podman auto-update
in Ihrem vorhandenen Toolkit oder einem anderen Aufgabenplaner wie z. B. cron
.
Zusammenfassung
Mit automatischen Podman-Updates können Sie Container auf neue Image-Versionen verschieben, ohne sie manuell neu zu starten oder externe Tools zu verwenden. Dies kann Ihnen helfen, Ihre Containerflotte zu warten, während die Images Fehlerkorrekturen und Sicherheitskorrekturen veröffentlichen.
Obwohl automatische Updates ein nützliches Werkzeug sind, sollten sie nicht ohne gebührende Sorgfalt verwendet werden. Das Zulassen automatischer Updates kann zu eigenen Problemen führen, wenn versehentlich ein beschädigtes Image veröffentlicht wird. Container, die von selbst neu gestartet werden, können auch Ausfallzeiten verursachen oder abhängige Dienste unterbrechen.
Daher sollten Sie die Eignung Ihrer eigenen Anwendung prüfen, bevor Sie diese Lösung implementieren. Ein Zwischenansatz besteht darin, auto-update --dry-run
regelmäßig auszuführen und die Ergebnisse an den Überwachungsdienst zu senden. Dadurch werden Sie über verfügbare Updates informiert, ohne dass diese Gefahr laufen, ohne Genehmigung angewendet zu werden.
Schreibe einen Kommentar