Come abilitare l’aggiornamento automatico dei contenitori Podman

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.autoupdateun’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:latestil collegamento mostrato sopra è intenzionale in nginx:latestquanto 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 systemctli 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 sudoper seguire l’esempio sopra; in tal caso, esegui auto-updateil comando anche come root:

$ sudo podman auto-update

In registryquesto 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-updateil --dry-runcomando 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 pendinghanno 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-updatecomando.

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 edite modificando il valore del OnCalendarcampo :

$ 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.autoupdatecontenitori 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-updateall’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-runnell’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

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *