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 segundosShutdownGracePeriodCriticalPods
: 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.