Middle+
Por que fatores é alcançada a conclusão correta do nó dependendo da prioridade do pod?
sobes.tech IA
Resposta da IA
A conclusão correta de um nó é alcançada através dos seguintes fatores:
- Timeouts:
terminationGracePeriodSeconds: Define o tempo durante o qual o nó tentará encerrar corretamente os pods antes de destruí-los forçadamente. Por padrão, 30 segundos.pod.spec.terminationGracePeriodSeconds: Pode sobrescrever o timeout para um pod específico.
# Exemplo de manifesto de um pod com um timeout de encerramento aumentado apiVersion: v1 kind: Pod metadata: name: my-pod-with-grace-period spec: containers: - name: my-container image: my-image terminationGracePeriodSeconds: 60 # Timeout aumentado - Sinais:
- O Kubernetes envia o sinal
SIGTERMaos contêineres do pod. - A aplicação no contêiner deve ser capaz de capturar
SIGTERMe tratá-lo corretamente (por exemplo, fechar conexões atuais, salvar estado). - Se a aplicação não terminar após
SIGTERMemterminationGracePeriodSeconds, umSIGKILLé enviado.
- O Kubernetes envia o sinal
- Prioridade do pod (
priorityClassName):- Em caso de contenção (por exemplo, por falta de recursos ou evacuação do nó), os pods de prioridade inferior são terminados primeiro.
- Isso garante que os pods críticos (de alta prioridade) funcionem por mais tempo e tenham mais chances de se fechar corretamente se o nó ficar inacessível.
# Exemplo de manifesto de um pod com uma classe de prioridade apiVersion: v1 kind: Pod metadata: name: my-priority-pod spec: containers: - name: my-container image: my-image priorityClassName: high-priority # Uso da classe de prioridade - Hooks PreStop:
- Scripts adicionais ou chamadas que são executadas no contêiner imediatamente antes do envio de
SIGTERM. - Podem ser usados para realizar sincronizações, desinscrições de serviços ou outras tarefas necessárias para uma finalização correta.
# Exemplo de hook PreStop apiVersion: v1 kind: Pod metadata: name: my-pod-with-prestop spec: containers: - name: my-container image: my-image lifecycle: preStop: exec: command: ["/bin/sh", "-c", "echo 'Stopping container...' && sleep 5 && exit 0"] # Comando de exemplo - Scripts adicionais ou chamadas que são executadas no contêiner imediatamente antes do envio de
- Gestão de pontos finais (Endpoints):
- O Kubernetes remove o IP do pod do objeto Endpoints do Service ao iniciar a finalização, para que o novo tráfego não seja direcionado ao pod que está sendo encerrado.
- Isso permite que as conexões existentes sejam concluídas durante o período de grace.
No conjunto, esses mecanismos permitem que o Kubernetes gerencie o processo de encerramento dos pods no nó, levando em consideração sua prioridade, oferecendo-lhes a chance de se fecharem corretamente e evitando a destruição forçada sempre que possível.