¿Cómo se pueden solucionar los problemas de los pods de Amazon EKS en AWS Fargate que están atascados en el estado Pendiente?
Los pods de Amazon Elastic Kubernetes Service (Amazon EKS) que se ejecutan en instancias de AWS Fargate están atascados en el estado Pendiente. ¿Cómo puedo lograr que estos pods se ejecuten?
Descripción corta
Estos son algunos escenarios comunes que causan que los pods permanezcan atascados en el estado Pendiente en Amazon Elastic Kubernetes Service (Amazon EKS) al utilizar AWS Fargate:
- Hay un error de capacidad porque una combinación particular de vCPU y memoria no está disponible.
- Los pods de CoreDNS se crearon con una anotación predeterminada que los asigna al tipo de computación de Amazon Elastic Compute Cloud (Amazon EC2). Es necesario eliminar la instancia de EC2 para programarlos en un nodo de Fargate.
- El pod no coincidía con ningún perfil de Fargate cuando se creó y no está asignado al programador de Fargate. Si un pod no coincide en el momento de su creación, no se reprograma de forma automática en los nodos de Fargate, aunque se cree un perfil que coincida posteriormente. En este caso, el pod se asigna al programador predeterminado.
- Si el pod está asignado al programador de Fargate pero permanece en estado Pendiente, es posible que se requiera una solución de problemas adicional.
Antes de solucionar el problema, tenga en cuenta las siguientes reglas del pod de Fargate:
- Debe configurar el espacio de nombres y las etiquetas de coincidencia correspondientes a los selectores del pod. El flujo de trabajo de Fargate hace coincidir los pods con un perfil de Fargate únicamente si ambas condiciones coinciden con la especificación del pod.
- Si especifica varios selectores de pods dentro de un mismo perfil de Fargate, el programador de Fargate programa 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 programa según un perfil de Fargate aleatorio. Para evitar esto, puede utilizar la anotación eks.amazonaws.com/fargate-profile: dentro de la especificación del pod.
Resolución
Importante: Los siguientes pasos únicamente se aplican 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? (¿Cómo se puede solucionar el estado de los pods en Amazon EKS?)
Averiguar el estado del 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 la salida del comando describe para evaluar cuál de las siguientes soluciones le ayudará a resolver su problema.
Resolver el error de capacidad
Si los pods tienen un problema de capacidad, la salida del comando describe será similar a la siguiente:
Fargate capacity is unavailable at this time. Please try again later or in a different availability zone
Esto significa que Fargate no puede aprovisionar capacidad de computación, según la combinación de vCPU y memoria que seleccionó.
Para resolver el error:
- Vuelva a crear el pod después de 15 o 20 minutos. Dado que el error se basa en la capacidad, la cantidad exacta de tiempo puede variar.
- Modifique la solicitud (CPU/memoria) dentro de la especificación del pod. Posteriormente, el flujo de trabajo de Fargate aprovisiona una nueva combinación de vCPU y memoria.
Nota: Se factura en función de una de las combinaciones. Consulte Memoria y CPU de los pods para obtener más información sobre cómo se finaliza la combinación en función de la especificación del pod. Si ejecuta un comando kubectl describe node desde el terminal o el entorno de desarrollo integrado (IDE), puede obtener un valor de combinación de vCPU y memoria mucho mayor. Fargate no siempre tiene capacidad disponible en función de las solicitudes y aprovisiona los recursos de un grupo de capacidad conforme al mejor esfuerzo. Sin embargo, únicamente se le facturará por el uso del pod y la combinación equivalente de vCPU y memoria.
Resolución de los pods de CoreDNS en estado Pendiente
Si los pods de CoreDNS están en estado Pendiente:
kubectl get pods -n kube-system<br>NAME READY STATUS RESTARTS AGE coredns-6548845887-qk9vf 0/1 Pending 0 157m
Esto puede deberse a que la implementación de CoreDNS tiene la siguiente anotación predeterminada: eks.amazonaws.com/compute-type : ec2.
Para resolver esto y reasignar los pods al programador de Fargate, consulte Actualice CoreDNS.
Solucionar los problemas de los pods asignados al programador de Fargate
Las razones por las que los pods asignados al programador de Fargate pueden quedarse atascados en el estado Pendiente son múltiples, desde una mala configuración de la anotación del pod hasta problemas de red. Si los pods permanecen en estado Pendiente, la salida del comando describe es similar a la siguiente:
Events: Type Reason Age From ---- ------ ---- ---- Warning FailedScheduling 2m25s (x301 over 5h3m) fargate-scheduler
Para solucionar este error:
- Elimine y vuelva a crear los pods.
- Confirme que lo siguiente no está establecido en el formato YAML de la especificación del pod:
selector de nodos
<>nombre del nodo
schedulerName
Estas especificaciones hacen que el programador de Fargate omita el pod. - Confirme que las subredes seleccionadas en el 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 gateway NAT está configurada en una subred pública, así como que dispone de una IP elástica asociada.
- Confirme que los conjuntos de opciones DHCP asociados a la VPC cuentan con un AmazonProvidedDNS o un nombre de alojamiento de servidor DNS válido para domain-name-servers.
- Confirme que los nombres de alojamiento DNS y la resolución DNS están activados para la VPC.
- Si los pods de Fargate utilizan subredes privadas con solo puntos de conexión de VPC configurados para la comunicación del servicio, debe permitir estos puntos de conexión con nombres 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 la VPC permite la comunicación entre Fargate y el servidor de la API. El grupo de seguridad del punto de conexión de la VPC debe permitir la entrada del puerto 443 desde el CIDR de la VPC del clúster. El acceso a puntos de conexión privados también debe estar activado para su clúster.
Resolver los pods asignados al programador predeterminado
Para determinar el programador al que están asignados los pods, ejecute el siguiente comando:
kubectl get pods -o yaml -n <namespace> <pod-name> | grep schedulerName.
En la salida, confirme que el valor de schedulerName es default-scheduler. Si aparece como default-scheduler, entonces el programador de Fargate omitió este pod. Para solucionar este problema, compruebe la configuración del pod para las anotaciones de tipo de computación y consulte las consideraciones de AWS Fargate.

Contenido relevante
- OFICIAL DE AWSActualizada hace un mes
- OFICIAL DE AWSActualizada hace 3 meses
- OFICIAL DE AWSActualizada hace 24 días
- OFICIAL DE AWSActualizada hace 7 meses