¿Cómo puedo solucionar los problemas de los pods de Amazon EKS en AWS Fargate que están bloqueados en estado Pendiente?

6 minutos de lectura
0

Mis pods de Amazon Elastic Kubernetes Service (Amazon EKS) que se ejecutan en instancias de AWS Fargate están bloqueados en estado Pendiente.

Breve descripción

Los pods de Amazon EKS que utilizan AWS Fargate pueden quedarse bloqueados en el estado Pendiente por diversos motivos:

  • Hay un error de capacidad porque una combinación concreta de vCPU y memoria no está disponible.
  • Creó los pods de CoreDNS con una anotación predeterminada que los asigna al tipo de computación de Amazon Elastic Compute Cloud (Amazon EC2). Para programarlos en un nodo de Fargate, elimine el tipo de computación de Amazon EC2.
  • Cuando creó el pod y lo asignó a fargate-scheduler, el pod no coincidía con ningún perfil de Fargate. Si no existe ninguna coincidencia para un pod cuando se crea, no se reprogramará automáticamente para los nodos de Fargate. Ni siquiera si más tarde se crea un perfil que sí coincida. En este caso, el pod se asigna a default-scheduler.
  • Si el pod está asignado a fargate-scheduler, pero permanece en estado Pendiente, es posible que se deba a otros problemas, que deberán solucionarse.

Solución

Requisitos previos

  • Configure el espacio de nombres y (opcionalmente) especifique las etiquetas de Kubernetes para que coincidan con las etiquetas de los selectores de pods. El flujo de trabajo de Fargate establece coincidencias entre los pods y un perfil de Fargate solo si ambas condiciones coinciden con la especificación del pod.
  • Si especifica varios selectores de pod en un único perfil de Fargate, fargate-scheduler programará el pod si coincide con alguno de los selectores.
  • Si la especificación de un pod coincide con varios perfiles de Fargate, el pod se programará de acuerdo con un perfil de Fargate aleatorio. Para evitarlo, puede usar la anotación eks.amazonaws.com/fargate-profile:fp_name en la especificación del pod. Sustituya fp_name por el nombre de su perfil de Fargate.

Importante: Los siguientes pasos se aplican únicamente a los pods lanzados con AWS Fargate. Para obtener información sobre los pods lanzados en instancias de Amazon EC2, consulte How can I troubleshoot the pod status in Amazon EKS?

Consultar el estado de un pod

1. Ejecute el siguiente comando para comprobar el estado del pod:

kubectl get pods -n <namespace>

2. Para obtener más información sobre los errores relacionados con el pod, ejecute el siguiente comando describe:

kubectl describe pod YOUR\_POD\_NAME -n <namespace>

Consulte el resultado del comando describe para valorar qué pasos debe seguir para solucionar el problema.

Solucionar un error de capacidad

Si hay un problema con la capacidad de los pods, el resultado de describe será parecido al siguiente mensaje:

«No hay capacidad de Fargate disponible en estos momentos. Vuelva a intentarlo más tarde o en otra zona de disponibilidad».

Esto significa que Fargate no puede aprovisionar capacidad de computación a partir de la combinación de vCPU y memoria que ha seleccionado.

Para solucionar el error, siga estos pasos:

  • Intente volver a crear el pod al cabo de 20 minutos. Dado que el error guarda relación con la capacidad, la cantidad exacta de tiempo puede variar.
  • Cambie la solicitud (CPU y memoria) en su especificación del pod. Para obtener información sobre las especificaciones de los pods, consulte How Kubernetes applies resource requests and limits en el sitio web de Kubernetes. A continuación, el flujo de trabajo de Fargate aprovisionará una nueva combinación de vCPU y memoria.
    Nota: Se le facturará en función de una de sus combinaciones. Para obtener más información sobre cómo se completa la combinación según la especificación del pod, consulte CPU y memoria de pod. Ejecute el comando kubectl describe node desde su terminal o entorno de desarrollo integrado (IDE) para obtener un valor más alto de combinación de vCPU y memoria. Fargate no siempre tiene capacidad disponible para las solicitudes. Fargate gestiona lo mejor posible el aprovisionamiento de los recursos a partir de una reserva de capacidad. Solo se le facturará el uso del pod y la combinación equivalente de vCPU y memoria.

Solucionar pods de CoreDNS en estado Pendiente

Si los pods de CoreDNS están en estado Pendiente, verá un resultado similar al siguiente mensaje:

kubectl get pods -n kube-system
NAME                                     READY   STATUS     RESTARTS      AGE
coredns-6548845887-qk9vf                 0/1     Pending    0             157m

Esto puede deberse a que la anotación predeterminada del despliegue de CoreDNS es: eks.amazonaws.com/compute-type : ec2.

Para solucionar este problema y reasignar los pods al programador de Fargate, consulte Actualice CoreDNS.

Solucionar problemas con los pods asignados a fargate-scheduler

Los pods asignados a fargate-scheduler pueden bloquearse en el estado Pendiente por diversos motivos. Si los pods permanecen en estado Pendiente, el resultado de describe será parecido al siguiente mensaje:

Events:
Type       Reason              Age                     From
----       ------              ----                    ----
Warning    FailedScheduling    2m25s (x301 over 5h3m)  fargate-scheduler

Para solucionar el error, lleve a cabo estas tareas:

  • Elimine los pods y vuelva a crearlos.
  • Confirme que no se hayan definido las siguientes especificaciones en el archivo YAML de especificaciones del pod. Las especificaciones pueden hacer que fargate-scheduler omita el pod:
    node selector
    <>nombre del nodo
    schedulerName
  • Confirme si las subredes seleccionadas en su perfil de Fargate tienen suficientes direcciones IP libres para crear nuevos pods. Cada nodo de Fargate consume una dirección IP de la subred.
  • Confirme que la puerta de enlace de NAT esté definida en una subred pública y tenga una dirección IP elástica asociada.
  • Confirme que los conjuntos de opciones de DHCP asociados a su nube virtual privada (VPC) tengan un valor de AmazonProvidedDNS o un nombre de host de servidor de DNS válidos para domain-name-servers.
  • Confirme que los nombres de host de DNS y la resolución de DNS estén activados para su VPC.
  • Si sus pods de Fargate utilizan subredes privadas que solo tienen puntos de conexión de VPC configurados para la comunicación del servicio, deberá permitir estos puntos de conexión con nombres de DNS:
    ECR - API
    ECR - DKR
    Punto de conexión de la puerta de enlace de S3
  • Confirme que el grupo de seguridad asociado al punto de conexión de VPC permita la comunicación en ambas direcciones entre Fargate y el servidor de API. El grupo de seguridad del punto de conexión de VPC debe permitir la entrada al puerto 443 desde el CIDR de VPC del clúster. También debe activar el acceso a puntos de conexión privados para el clúster.

Solución de los pods asignados a default-scheduler

Para averiguar a qué programador se han asignado los pods, ejecute el siguiente comando:

kubectl get pods -o yaml -n <namespace> <pod-name> | grep schedulerName.

En el resultado, confirme que el valor de schedulerName sea fargate-scheduler. Si aparece como default-scheduler, fargate-scheduler omitió este pod. Para solucionar este problema, compruebe la configuración del pod para ver si hay anotaciones sobre el tipo de computación. Para obtener más información, consulte Consideraciones sobre AWS Fargate.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 8 meses