Come abilitare l’aggiornamento automatico dei contenitori Podman
Podman è una piattaforma di containerizzazione conforme a OCI che viene spesso utilizzata al posto di Docker. Il suo modello privo di daemon e l’ampio set di funzionalità lo rendono un buon candidato per l’uso sia nello sviluppo che nella produzione.
In questo articolo, ti mostreremo come utilizzare il sistema di aggiornamento automatico di Podman per riavviare i tuoi container quando vengono rilasciate nuove immagini. Podman può essere configurato per verificare periodicamente la presenza di aggiornamenti, estrarre l’immagine più recente e rigenerare i contenitori interessati utilizzando le impostazioni correnti.
Perché aggiornare automaticamente i container?
I contenitori sono spesso di breve durata, ma necessitano comunque di una manutenzione regolare. Una vulnerabilità critica all’interno di un’immagine potrebbe consentire agli utenti malintenzionati di accedere alla tua applicazione, che verrà sfruttata entro poche ore dalla scoperta.
La maggior parte delle tecnologie di container più diffuse richiedono l’aggiornamento manuale dei container. Ciò pone ai team operativi l’onere di registrarsi per gli annunci di rilascio e di creare strumenti che implementino nuove modifiche.
Il sistema di aggiornamento dei container integrato di Podman risolve questo problema e mantiene aggiornati i carichi di lavoro. I container possono essere aggiornati rapidamente dopo il push di nuove versioni dell’immagine, assicurando che le tue distribuzioni siano aggiornate con le ultime patch e correzioni di bug.
Abilita Aggiornamenti automatici
Gli aggiornamenti automatici vengono abilitati per un contenitore impostando io.containers.autoupdate
un’etichetta al momento della creazione.
$ podman run -d -p 8080:80 \
–name contenitore-nginx\
–label io.containers.autoupdate=registro \
docker.io/library/nginx:latest
L’etichetta può avere due valori possibili:
registry
– Durante il controllo degli aggiornamenti, Podman verificherà con il registro delle immagini per vedere se è disponibile una nuova versione del tag utilizzato dal tuo contenitore. In questo caso, l’immagine verrà estratta e il tuo contenitore verrà riavviato. Gli aggiornamenti del registro funzionano solo se si utilizza il percorso completo del registro:docker.io/library/nginx:latest
il collegamento mostrato sopra è intenzionale innginx:latest
quanto troppo vago.local
– Questo metodo di aggiornamento impedisce a Podman di visualizzare le immagini del contenitore già esistenti nel file system dell’host. Il contenitore verrà riavviato se la versione locale del tag immagine è diversa dalla versione in cui è in esecuzione il contenitore. Questo può essere utile quando si ricostruiscono le immagini durante lo sviluppo.
La presenza dell’etichetta rende questo contenitore NGINX di esempio idoneo per gli aggiornamenti automatici. Tuttavia, è necessario più lavoro prima che gli aggiornamenti possano essere effettivamente applicati.
Creazione di un servizio Systemd
Il meccanismo di aggiornamento di Podman richiede che i tuoi contenitori vengano eseguiti all’interno dei servizi systemd. Poiché Podman è privo di demoni, non dispone di un controller centrale in grado di avviare e arrestare i tuoi container. Il loro inserimento in un servizio systemd fornisce funzionalità di gestione del ciclo di vita e la possibilità di riavviarsi in risposta a determinati eventi.
La Podman CLI include un comando che crea una definizione di modulo systemd da un container:
$ podman generate systemd --name nginx-container > /etc/systemd/system/nginx-container.service
I comandi precedenti creano un nuovo contenitore NGINX con un servizio systemd nella posizione corretta.
Quindi ricarica systemd per registrare la definizione del servizio, quindi abilita e avvia il servizio:
$ systemctl daemon-reload
$ systemctl abilita nginx-container.service
$ systemctl start nginx-container.service
Il tuo contenitore NGINX è ora un servizio systemd che si avvia automaticamente all’avvio del tuo host. È possibile utilizzare systemctl
i comandi per avviare e arrestare un container al posto della CLI Podman:
$ systemctl start nginx-container.service
$ systemctl stop nginx-container.service
Per rimuovere il contenitore in futuro, è necessario interrompere, disabilitare ed eliminare il file del modulo di servizio. Successivamente, riavvia systemd per applicare completamente le modifiche.
$ systemctl stop nginx-container.service
$ systemctl disabilita nginx-container.service
$ rm /etc/systemd/system/nginx-container.service
$ systemctl daemon-reload
Esecuzione di un aggiornamento
Ora tutto è pronto per un corretto aggiornamento automatico del container NGINX. Puoi eseguire un controllo di aggiornamento su richiesta utilizzando il comando Podman auto-update
:
$ podman auto-update
Cercando di estrarre docker.io/library/nginx:latest…
Ottenere firme di origine immagine
…
AGGIORNAMENTO DELLA POLITICA DELL’IMMAGINE DEL CONTENITORE DELL’UNITÀ
nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry true
Questo aggiorna i contenitori nei servizi systemd disponibili per l’utente che esegue il comando. Potrebbe essere necessario utilizzare sudo
per seguire l’esempio sopra; in tal caso, esegui auto-update
il comando anche come root:
$ sudo podman auto-update
In registry
questo esempio è stata utilizzata una strategia di aggiornamento, quindi Podman si connette al registro delle immagini, controlla le modifiche e quindi estrae una nuova immagine, se applicabile. L’output del comando mostra se ogni contenitore di servizi è stato aggiornato.
Poiché i container sono gestiti da systemd, Podman può determinare se un nuovo container è stato avviato correttamente. Podman tornerà automaticamente a una versione precedente dell’immagine se viene rilevato un errore di aggiornamento. Affinché ciò funzioni in modo affidabile, l’applicazione all’interno del contenitore deve notificare a systemd che è stata avviata correttamente. Questo può essere fatto eseguendo systemd-notify --ready
.
Verifica aggiornamenti
A volte potresti voler controllare se gli aggiornamenti sono disponibili per il tuo parco container senza applicarli immediatamente. Utilizzare auto-update
il --dry-run
comando flag per ottenere un elenco di servizi in cui è pubblicata l’immagine aggiornata:
$ podman auto-update --dry-run
…
AGGIORNAMENTO DELLA POLITICA DELL’IMMAGINE DEL CONTENITORE DELL’UNITÀ
nginx-container.service 2de4ba96b09 docker.io/library/nginx:latest registry pending
I servizi mostrati pending
hanno un aggiornamento disponibile.
Applicare gli aggiornamenti in base a una pianificazione
Ora abbiamo configurato correttamente gli aggiornamenti del contenitore su richiesta. Non è necessario estrarre manualmente nuove immagini o riavviare i contenitori. Il passaggio finale consiste nell’impostare una pianificazione in modo che Podman applichi periodicamente gli aggiornamenti senza eseguire un auto-update
comando.
La maggior parte delle distribuzioni Podman include un timer di sistema per questo scopo. Puoi attivare il timer usando systemctl
:
$ systemctl enable podman-auto-update.timer
Il timer è impostato per controllare gli aggiornamenti ogni giorno. È possibile personalizzare la pianificazione aprendo il file del timer utilizzando systemctl edit
e modificando il valore del OnCalendar
campo :
$ systemctl edit podman-auto-update.timer
[Timer]
OnCalendar=Fri *-*-* 18:00
L’espressione dell’ora mostrata sopra eseguirà il controllo dell’aggiornamento ogni venerdì alle 18:00. La sintassi è descritta nel manuale di systemd .
Ora che il timer è abilitato, puoi iniziare a distribuire i tuoi io.containers.autoupdate
contenitori etichettati. Saranno periodicamente aggiornati e riavviati, automatizzando le procedure di manutenzione.
Non è necessario utilizzare il timer di sistema di Podman per programmare gli aggiornamenti. Puoi eseguire podman auto-update
all’interno del tuo toolkit esistente o un altro utilità di pianificazione come cron
.
Riepilogo
Gli aggiornamenti automatici di Podman ti consentono di spostare i contenitori in nuove versioni di immagini senza riavviarli manualmente o utilizzare strumenti esterni. Questo può aiutarti a mantenere il tuo parco di container mentre le immagini rilasciano correzioni di bug e correzioni di sicurezza.
Sebbene gli aggiornamenti automatici siano uno strumento utile, non dovrebbero essere utilizzati senza la dovuta attenzione. Consentire gli aggiornamenti automatici può causare problemi se un’immagine danneggiata viene rilasciata accidentalmente. I container che si riavviano da soli possono anche causare tempi di inattività o interrompere i servizi dipendenti.
Pertanto, è necessario valutare l’idoneità della propria applicazione prima di implementare questa soluzione. Un approccio intermedio consiste auto-update --dry-run
nell’eseguire periodicamente e inviare i risultati al servizio di monitoraggio. Questo ti informa degli aggiornamenti disponibili senza metterli a rischio di essere applicati senza approvazione.
Lascia un commento