Aggiornamenti automatici e rollback manuali

Fedora CoreOS fornisce aggiornamenti atomici e rollback tramite distribuzioni OSTree.

Per impostazione predefinita, il sistema operativo esegue aggiornamenti automatici continui tramite due componenti:

  • rpm-ostree gestisce più distribuzioni OSTree su disco e può passare da una all’altra al momento dell’avvio.

  • Zincati controlla continuamente gli aggiornamenti del sistema operativo e li applica tramite rpm-ostree.

Diffidenza agli aggiornamenti

L’agente Zincati locale verifica periodicamente con un servizio remoto la disponibilità degli aggiornamenti. È possibile fornire un valore personalizzato di "diffidenza di rollout" (vedere documentazione) per consentire al server di sapere come desideroso, o quanto avverso al rischio, il nodo è nel ricevere aggiornamenti.

Il parametro rollout_wariness può essere impostato su un valore in virgola mobile compreso tra 0.0 (più entusiasta) e 1.0 (più conservativo). Per ricevere gli aggiornamenti molto presto nel ciclo di implementazione graduale, un nodo può essere configurato con un valore basso (ad esempio 0.001). Questa operazione può essere eseguita durante il provisioning utilizzando lo snippet di configurazione Butane mostrato di seguito:

Esempio: configurazione della cautela nell’implementazione di Zincati
variante: fcos
versione: 1.6.0
magazzinaggio:
  file:
    - percorso: /etc/zincati/config.d/51-rollout-wariness.toml
      contenuto:
        inline: |
          [identità]
          rollout_wariness = 0,001

Finalizzazione dell’aggiornamento del sistema operativo

Per finalizzare un aggiornamento del sistema operativo, la macchina deve riavviarsi. Poiché si tratta di un’azione invasiva che può causare l’interruzione del servizio, Zincati consente all’amministratore del cluster di controllare quando è consentito riavviare i nodi per la finalizzazione dell’aggiornamento.

Sono disponibili le seguenti strategie di finalizzazione:

  • Non appena l’aggiornamento viene scaricato e gestito localmente, riavviare immediatamente per applicare un aggiornamento.

  • Utilizza un gestore di blocchi esterno per coordinare il riavvio di una flotta di macchine.

  • Consenti riavvii solo entro finestre di manutenzione configurate, definite su una pianificazione UTC settimanale.

Su ciascun nodo è possibile configurare una strategia di finalizzazione specifica.

Lo snippet Butane riportato di seguito mostra come definire due finestre di manutenzione durante i giorni del fine settimana, a partire dalle 22:30 UTC e della durata di un’ora ciascuna:

Esempio: configurazione della strategia di aggiornamento di Zincati
variante: fcos
versione: 1.6.0
magazzinaggio:
  file:
    - percorso: /etc/zincati/config.d/55-updates-strategy.toml
      contenuto:
        in linea: |
          [aggiornamenti]
          strategia = "periodico"
          [[aggiornamenti.finestra.periodica]]
          giorni = ["Sabato", "Domenica"]
          ora_inizio = "22:30"
          lunghezza_minuti = 60

Per ulteriori dettagli sulla finalizzazione degli aggiornamenti, consultare la documentazione Zincati.

Manual Rollbacks

When an update is complete, the previous OS deployment remains on disk. If an update causes issues, you can use it as a fallback. This is a manual operation that requires human intervention and console access.

Temporary rollback

To temporarily boot the previous OS deployment, hold down Shift during the OS boot process. When the bootloader menu appears, select the relevant OS entry in the menu.

Permanent rollback

To permanently revert to the previous OS deployment, log into the target node and run the following commands:

# Stop the service that performs automatic updates
sudo systemctl stop zincati.service

# Mark the previous OS deployment as the default, and immediately reboots into it
sudo rpm-ostree rollback -r

Please note that Zincati will keep looking for updates and upgrade to any new available OS deployment, other than the one you just reverted.

If you prefer, you can temporarily turn off auto-updates. Later on, you can re-enable them in order to let the machine catch up with the usual flow of updates:

# Disable Zincati in order to opt-out from future auto-updates
sudo systemctl disable --now zincati.service

[...]

# At a later point, re-enable it to re-align with the tip of stream
sudo systemctl enable --now zincati.service