¿Por qué los pods no se pueden reiniciar repetidamente o se eliminan inesperadamente?

Soluciona los problemas de los pods que no se reinician repetidamente, se quedan atascados en un CrashLoopBackOff bucle o se eliminan inesperadamente de tu clúster.

Nube privada virtual Infraestructura clásica

Su pod estaba en buen estado pero inesperadamente se ha eliminado o ha quedado atascado en un bucle de reinicio. A veces los contenedores muestran un estado CrashLoopBackOff.

Es posible que sus contenedores superen sus límites de recursos, o que sus pods hayan sido sustituidos por pods de prioridad más alta. Cuando un contenedor de Kubernetes no se inicia repetidamente, entra en un estado CrashLoopBackOff que indica un bucle de reinicio persistente dentro de un pod. Este error se produce a menudo debido a diversos problemas que impiden que el contenedor se inicie correctamente. Las causas más comunes pueden incluir memoria insuficiente, sobrecarga de recursos, errores de despliegue, problemas de servicios de terceros como errores DNS, dependencias que faltan o fallos de contenedores debido a conflictos de puertos.

Consulte las secciones siguientes:

Cómo arreglar los límites de recursos de contenedor

  1. Obtenga el nombre del pod. Si ha utilizado una etiqueta, puede incluirla para filtrar los resultados.
    kubectl get pods --selector='app=wasliberty'
    
  2. Describa el pod y busque el Recuento de reinicios.
    kubectl describe pod
    
  3. Si el pod se ha reiniciado muchas veces durante un breve periodo de tiempo, capte su estado.
    kubectl get pod <pod_name> -n <namespace> -o go-template='{{range.status.containerStatuses}}{{"Container Name: "}}{{.name}}{{"\r\nLastState: "}}{{.lastState}}{{end}}'
    
  4. Revise el motivo. Por ejemplo, OOM Killed significa sin memoria, lo que indica que el contenedor se está bloqueando debido a un límite de recursos.
  5. Aumente la capacidad de su clúster, por ejemplo, cambiando el tamaño de los grupos de trabajadores, para que se puedan satisfacer las necesidades de recursos. Para obtener más información, consulte Redimensionar la agrupación de nodos trabajadores clásica o Redimensionar la agrupación de nodos trabajadores de VPC.

Cómo arreglar la sustitución de pods por pods de más prioridad

Para ver si su pod ha sido sustituido por pods de prioridad más alta:

  1. Obtenga el nombre del pod.

    kubectl get pods
    
  2. Describa el YAML de su pod.

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

    1. Si no hay ningún valor del campo priorityClassName, significa que su pod tiene la clase de prioridad globalDefault. Si el administrador del clúster no ha establecido una clase de prioridad globalDefault, el valor predeterminado es cero (0) o la prioridad más baja. Cualquier pod con una clase de prioridad más alta tiene preferencia sobre su pod o puede eliminarlo.

    2. Si hay un valor para el campo priorityClassName, obtenga la clase de prioridad.

        kubectl get priorityclass <priority_class_name> -o yaml
        ```
    3. Observe el campo `value` para comprobar la prioridad del pod.
    
    
  4. Obtenga una lista de las clases de prioridad del clúster.

    kubectl get priorityclasses
    
  5. Para cada clase de prioridad, obtenga el archivo YAML y observe el campo value.

    kubectl get priorityclass <priority_class_name> -o yaml
    
  6. Compare el valor de la clase de prioridad de su pod con los otros valores de clase de prioridad para ver si la prioridad es más alta o más baja.

  7. Repita los pasos del 1 al 3 para los otros pods del clúster, para comprobar qué clase de prioridad están utilizando. Si la clase de prioridad de estos otros pods es más alta que la de su pod, su pod no se suministra a menos que haya recursos suficientes para su pod y para cada pod con prioridad más alta.

  8. Póngase en contacto con el administrador de su clúster para aumentar la capacidad del mismo y confirmar que se han asignado las clases de prioridad correctas.