Atualizações automáticas e reversões manuais

O Fedora CoreOS fornece atualizações e reversões atômicas por meio de implantações OSTree.

Por padrão, o sistema operacional realiza atualizações automáticas contínuas por meio de dois componentes:

  • rpm-ostree lida com várias implantações OSTree em disco e pode alternar entre elas no momento da inicialização.

  • Zincati verifica continuamente se há atualizações do sistema operacional e as aplica via rpm-ostree.

Cuidado com as atualizações

O agente local do Zincati verifica periodicamente com um serviço remoto para ver quando as atualizações estão disponíveis. Um valor personalizado de "rollout wariness" (consulte a documentação) pode ser fornecido para permitir que o servidor saiba o quão ansioso ou avesso ao risco o nó está em receber atualizações.

O parâmetro rollout_wariness pode ser definido como um valor de ponto flutuante entre 0.0 (mais ansioso) e 1.0 (mais conservador). Para receber atualizações muito cedo no ciclo de implementação em fases, um nó pode ser configurado com um valor baixo (por exemplo, 0.001). Isso pode ser feito durante o provisionamento usando o trecho de código de configuração Butane mostrado abaixo:

Exemplo: configurando cautela de implementação do Zincati
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/zincati/config.d/51-rollout-wariness.toml
      contents:
        inline: |
          [identity]
          rollout_wariness = 0.001

Finalização da atualização do sistema operacional

Para finalizar uma atualização do sistema operacional, a máquina deve reiniciar. Como esta é uma ação invasiva que pode causar interrupção do serviço, o Zincati permite que o administrador do cluster controle quando os nós podem reiniciar para finalização da atualização.

As seguintes estratégias de finalização estão disponíveis:

  • Assim que a atualização for baixada e preparada localmente, reiniciar imediatamente para aplicar uma atualização.

  • Usar um gerenciador de bloqueio externo para coordenar a reinicialização de um conjunto de máquinas.

  • Permitir reinicializações apenas dentro das janelas de manutenção configuradas, definidas em uma programação UTC semanal.

Uma estratégia de finalização específica pode ser configurada em cada nó.

O trecho de código Butane abaixo mostra como definir duas janelas de manutenção durante os dias de fim de semana, começando às 22:30 UTC e durando uma hora cada:

Exemplo: configurando a estratégia de atualização do Zincati
variant: fcos
version: 1.4.0
storage:
  files:
    - path: /etc/zincati/config.d/55-updates-strategy.toml
      contents:
        inline: |
          [updates]
          strategy = "periodic"
          [[updates.periodic.window]]
          days = [ "Sat", "Sun" ]
          start_time = "22:30"
          length_minutes = 60

Para mais detalhes sobre a finalização das atualizações, consulte a documentação do Zincati.

Reversões manuais

Quando uma atualização é concluída, a implantação anterior do sistema operacional permanece no disco. Se uma atualização causar problemas, você pode usá-la como alternativa. Esta é uma operação manual que requer intervenção humana e acesso ao console.

Reversão temporária

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.

Reversão permanente

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