Encerramento otimizado de nós no GKE na AWS

A partir da versão 1.26, o GKE na AWS ativa automaticamente o encerramento otimizado de nós. Esse recurso gerencia o encerramento otimizado de pods durante o encerramento de nós. O encerramento otimizado permite que os pods salvem o estado e liberem recursos antes que o nó seja encerrado. Esse método de encerramento de pods minimiza o risco de perda de dados. Isso também minimiza o risco de interrupções em outros pods e serviços que dependem ou interagem com os pods que estão sendo encerrados, melhorando a resiliência dos clusters.

Como funciona

Um evento como manutenção programada, escalonamento de nós ou problema de hardware aciona um encerramento de nó. O componente kubelet detecta o evento e inicia o processo de encerramento otimizado de nós, instruindo systemd a atrasar o encerramento do sistema por um período especificado. Esse atraso dá ao nó tempo para drenar e remover os pods em execução nele.

O objetivo do encerramento otimizado de nós é encerrar sem complicações os pods críticos e não relacionados ao sistema antes que o nó seja encerrado. As seguintes configurações padrão são usadas:

  • ShutdownGracePeriod: 30 segundos
  • ShutdownGracePeriodCriticalPods: 15 segundos

Essas configurações dão aos pods que não são do sistema 15 segundos para serem encerrados de maneira prática antes de serem interrompidos à força. Os pods críticos do sistema têm 15 segundos para serem encerrados após o encerramento dos pods que não são do sistema. No entanto, como o recurso opera com base no melhor esforço, há uma possibilidade de que um nó não consiga encerrar sem complicações dentro do período designado de 30 segundos.

Acionadores e limitações

Os eventos que acionam o encerramento sem complicações de nós incluem eventos planejados como estes:

  • Encerramento por comando do usuário
  • Encerramento de instâncias
  • Manutenção programada
  • Como escalonar verticalmente um cluster

Nesses cenários, kubelet detecta o evento de encerramento do nó e inicia o processo de encerramento otimizado do nó.

Por outro lado, o encerramento otimizado de nós não pode ser ativado quando o comando de encerramento não aciona o mecanismo de bloqueio de inibidores systemd que o componente kubelet depende. Confira exemplos desses tipos de situação:

  • Desconexões de rede
  • Falhas de hardware
  • Recursos insuficientes, como memória ou CPU
  • Faltas de energia inesperadas.

Nesses casos, o nó pode ser encerrado abruptamente, causando interrupções ou perda de dados.