Encerramento controlado de nós no GKE no AWS

A partir da versão 1.26, o GKE no AWS ativa automaticamente o encerramento elegante de nós. Esta funcionalidade gere o encerramento correto dos pods durante os encerramentos de nós. A terminação elegante permite que os pods guardem o respetivo estado e libertem recursos antes de o nó ser encerrado. Este método de terminar os pods minimiza o risco de perda de dados. Também minimiza o risco de interrupções a outros pods e serviços que dependem ou interagem com os pods que estão a ser encerrados, melhorando assim a resiliência dos seus clusters.

Como funciona

Um evento, como a manutenção programada, o dimensionamento de nós ou um problema de hardware, aciona o encerramento de um nó. O componente kubelet deteta o evento e inicia o processo de encerramento do nó controlado, instruindo o systemd a atrasar o encerramento do sistema durante um período especificado. Este atraso dá ao nó tempo para esvaziar e despejar os pods em execução no mesmo.

O objetivo da terminação elegante de nós é terminar elegantemente os pods de sistema e não sistema críticos antes de o nó ser encerrado. São usadas as seguintes definições predefinidas:

  • ShutdownGracePeriod: 30 segundos
  • ShutdownGracePeriodCriticalPods: 15 segundos

Estas definições dão aos pods não pertencentes ao sistema 15 segundos para terminarem normalmente antes de serem parados à força. Os pods do sistema críticos têm 15 segundos para serem encerrados após o encerramento dos pods que não são do sistema. No entanto, uma vez que a funcionalidade opera com base no melhor esforço, existe a possibilidade de um nó não conseguir ser encerrado corretamente no período designado de 30 segundos.

Acionadores e limitações

Os eventos que acionam o encerramento normal do nó incluem eventos planeados, como os seguintes:

  • Encerramentos comandados pelo utilizador
  • Rescisão de instâncias
  • Manutenção agendada
  • Reduzir a escala de um cluster

Nestes cenários, o kubelet deteta o evento de encerramento do nó e inicia o processo de encerramento do nó controlado.

Por outro lado, não é possível ativar o encerramento elegante do nó quando o comando de encerramento não aciona o mecanismo de bloqueio do inibidor systemd do qual o componente kubelet depende. Seguem-se exemplos de situações deste tipo:

  • Desligamentos da rede
  • Avarias de hardware
  • Recursos insuficientes, como memória ou CPU
  • Cortes de energia inesperados.

Nestes casos, o nó pode ser encerrado abruptamente, o que pode causar interrupções ou perda de dados.