Sobes.tech
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:

  1. 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
    
  2. Sinais:
    • O Kubernetes envia o sinal SIGTERM aos contêineres do pod.
    • A aplicação no contêiner deve ser capaz de capturar SIGTERM e tratá-lo corretamente (por exemplo, fechar conexões atuais, salvar estado).
    • Se a aplicação não terminar após SIGTERM em terminationGracePeriodSeconds, um SIGKILL é enviado.
  3. 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
    
  4. 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
    
  5. 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.