Graceful shutdown em aplicações resilientes em ambientes kubernetes

Se você atua na área de DevOps, é fundamental estar familiarizado com o conceito de Graceful Shutdown. Este procedimento é crucial para encerrar operações de maneira eficiente, assegurando o encerramento adequado de conexões e a emissão do sinal de término do pod. 

O Graceful Shutdown desempenha um papel crucial na manutenção da integridade dos sistemas, contribuindo para evitar possíveis problemas decorrentes do encerramento abrupto de serviços. Ao adotar práticas adequadas de Graceful Shutdown, é possível garantir uma transição suave, minimizando impactos adversos em termos de disponibilidade e desempenho. 

Este conceito destaca-se como uma prática recomendada no contexto do DevOps, contribuindo para a estabilidade e confiabilidade dos ambientes de desenvolvimento e operações.

o SIGTERM é o mecanismo pelo qual um sistema avisa aos processos que é chegada a hora de fechar as cortinas. Esse sinal dá aos processos a oportunidade de concluir tarefas pendentes, finalizar conexões de maneira ordenada e, de uma forma geral, se despedir sem deixar nada pela metade.

Ao contrário de um encerramento abrupto, que seria como desligar a TV no meio do seu programa favorito, o SIGTERM permite que os processos executem seus “ato final” antes de sair de cena. Isso é especialmente importante em ambientes críticos, onde interrupções bruscas podem resultar em perda de dados, corrupção de informações ou outros problemas indesejados.

Então, da próxima vez que você estiver orquestrando um Graceful Shutdown, lembre-se do SIGTERM,  é uma forma de encerramento que traz harmonia ao mundo caótico dos processos, garantindo que todos possam se despedir com classe sem causar danos as aplicações

O Guia Essencial para transformar sua carreira!

Acesse um material completo, com teoria, prática, para te acompanhar sua trajetória na carreira devOps.

O SIGKILL é como o “fim da linha” nos sinais de terminação de processos em sistemas Unix e Unix-like. Diferentemente do SIGTERM, que é um sinal de término mais amigável, o SIGKILL é um sinal mais direto e, por vezes, considerado “brutal”.

Quando um processo recebe o sinal SIGKILL, ele não tem a oportunidade de se despedir ou realizar qualquer ação de encerramento ordenado. Em vez disso, é encerrado de imediato, sem chance de resistência. Isso pode ser útil em situações onde é vital interromper um processo rapidamente, mas também carrega o risco de deixar o sistema em um estado instável, uma vez que o processo não teve a oportunidade de liberar recursos adequadamente.

Em comparação com o SIGTERM, o uso do SIGKILL é muitas vezes considerado um último recurso, pois não permite que o processo execute quaisquer ações finais ou limpeza. Se possível, é preferível utilizar o SIGTERM primeiro, dando ao processo a chance de encerrar de maneira controlada. O SIGKILL é geralmente reservado para situações em que o processo não responde ao SIGTERM ou quando a interrupção imediata é crucial, mesmo que isso possa resultar em algumas consequências indesejadas, como perda de dados ou corrupção temporária.

O campo terminationGracePeriodSeconds é usado para especificar o período de tempo que o Kubernetes espera antes de forçar o encerramento de um contêiner em um pod durante uma atualização ou escala. Ele define o tempo máximo que o contêiner tem para encerrar após receber um sinal de término (como SIGTERM) antes de ser terminado à força (SIGKILL).

Por exemplo, ao definir terminationGracePeriodSeconds: 30, você está dando ao contêiner 30 segundos para realizar um encerramento limpo antes de ser terminado à força.

Neste exemplo, o campo terminationGracePeriodSeconds está definido como 30 segundos. Isso significa que, quando o pod é programado para encerrar ou escalar, o Kubernetes enviará um sinal SIGTERM para o contêiner e esperará até 30 segundos para que o contêiner finalize suas operações antes de enviar um sinal SIGKILL para encerrar o contêiner à força.

Quer saber mais sobre carreira devOps?

O Guia Essencial para transformar sua carreira!

Acesse um material completo, com teoria, prática, para te acompanhar sua trajetória na carreira devOps.