So aktivieren Sie die automatische Aktualisierung von Podman-Containern

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.autoupdateLabel 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:latestder oben angezeigte Link ist beabsichtigt, da nginx:latester 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. systemctlAnstelle 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-updateden Befehl auch als root aus:

$ sudo podman auto-update

In registrydiesem 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-updateden --dry-runFlag-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 pendingist 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-updateBefehl 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.autoupdatebeschrifteten 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-updatein 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-runregelmäß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

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert