Por que os pods falham repetidamente ao reiniciar ou são removidos inesperadamente?

Resolva problemas em pods que falham repetidamente ao reiniciar, ficam presos em um loop de “ CrashLoopBackOff ” ou são removidos inesperadamente do seu cluster.

Nuvem Privada Virtual Infraestrutura Clássica

Sua pod estava funcional, mas inesperadamente é removido ou fica preso em um loop de reinicialização. Às vezes, os contêineres mostram um status CrashLoopBackOff.

Seus contêineres podem exceder seus limites de recurso ou seus pods podem ser substituídos por pods de prioridade mais alta. Quando um contêiner do Kubernetes não consegue iniciar repetidamente, ele entra no estado “ CrashLoopBackOff ”, indicando um ciclo de reinicialização contínuo dentro de um pod. Esse erro geralmente ocorre devido a vários problemas que impedem que o contêiner seja iniciado corretamente. As causas comuns podem incluir memória insuficiente, sobrecarga de recursos, erros de implantação, problemas de serviços de terceiros, como erros de DNS, dependências ausentes ou falhas de contêineres devido a conflitos de portas.

Consulte as seções a seguir:

Corrigindo os limites de recurso de contêiner

  1. Obtenha o nome de seu pod. Se você usou um rótulo, será possível incluí-lo para filtrar seus resultados.
    kubectl get pods --selector='app=wasliberty'
    
  2. Descreva o pod e procure a Contagem de reinicializações.
    kubectl describe pod
    
  3. Se o pod reiniciou muitas vezes em um curto período de tempo, busque seu status.
    kubectl get pod <pod_name> -n <namespace> -o go-template='{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}'
    
  4. Revise o motivo. Por exemplo, “ OOM Killed ” significa “falta de memória”, indicando que o contêiner está travando devido a um limite de recursos.
  5. Aumente a capacidade do seu cluster, por exemplo, redimensionando os conjuntos de workers, para que os recursos necessários possam ser atendidos. Para obter mais informações, consulte Redimensionar seu conjunto de trabalhadores clássicos ou Redimensionar seu conjunto de trabalhadores de VPC

Corrigindo a substituição de pod por pods de prioridade mais alta

Para ver se seu pod está sendo substituído por pods de prioridade mais alta:

  1. Obtenha o nome de seu pod.

    kubectl get pods
    
  2. Descreva seu pod YAML.

    kubectl get pod <pod_name> -o yaml
    
  3. Verifique o campo priorityClassName .

    1. Se não houver nenhum valor de campo priorityClassName, seu pod terá a classe de prioridade globalDefault. Se seu administrador de cluster não configurou uma classe de prioridade globalDefault, o padrão será zero (0) ou a prioridade mais baixa. Qualquer pod com uma classe de prioridade mais alta pode priorizar ou remover seu pod.

    2. Se houver um valor de campo priorityClassName, obtenha a classe de prioridade.

        kubectl get priorityclass <priority_class_name> -o yaml
        ```
    3. Anote o campo `value` para verificar a prioridade de seu pod.
    
    
  4. Liste as classes de prioridade existentes no cluster.

    kubectl get priorityclasses
    
  5. Para cada classe de prioridade, obtenha o arquivo YAML e anote o campo value.

    kubectl get priorityclass <priority_class_name> -o yaml
    
  6. Compare o valor da classe de prioridade de seu pod com os outros valores de classe de prioridade para ver se ele tem prioridade mais alta ou mais baixa.

  7. Repita as etapas 1 a 3 para outros pods no cluster, para verificar qual classe de prioridade eles estão usando. Se a classe de prioridade desses outros pods for maior que aquela de seu pod, seu pod não será provisionado a menos que haja recursos suficientes para ele e todos os pods com prioridade mais alta.

  8. Entre em contato com o administrador do seu cluster para aumentar a capacidade do cluster e confirmar se as classes de prioridade corretas estão atribuídas.