¿Cómo se pueden solucionar los problemas de los pods de Amazon EKS en AWS Fargate que están atascados en el estado Pendiente?

Última actualización: 20 de diciembre de 2021

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 breve

Estas son algunas situaciones comunes que impiden que los pods se ejecuten en Amazon Elastic Kubernetes Service (Amazon EKS) mediante AWS Fargate.

  • Se presenta un error de capacidad porque una combinación particular de vCPU y memoria no está disponible.
  • Los pods CoreDNS fueron creados con una anotación predeterminada que se debe eliminar para programarlos en un nodo Fargate.
  • El pod no coincidió 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 la creación, este no se reprograma automáticamente en los nodos de Fargate, incluso si posteriormente se crea un perfil coincidente. 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 pod será programado por el programador de Fargate si coincide con alguno de los selectores.
  • Si la especificación de un pod coincide con varios perfiles Fargate, el pod se programa según un perfil Fargate aleatorio. Para evitarlo, puede utilizar la anotación eks.amazonaws.com/fargate-profile:<fp_name> 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 ¿Cómo se puede solucionar el estado de los pods en Amazon EKS?

Averigüe 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 de descripción:

kubectl describe pod YOUR_POD_NAME -n <namespace>

Según la salida del comando de descripción, consulte las siguientes resoluciones.

Resolver el error de capacidad

Si los pods tienen un problema de capacidad, la salida de la descripción será similar a la siguiente:

Fargate capacity is unavailable at this time. Please try again later or in a different availability zone

Para resolver el error:

  • Intente volver a utilizar el pod después de 15-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/memoria.
    Nota: Se factura en función de una de las combinaciones. Consulte CPU y memoria del pod 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/entorno de desarrollo integrado (IDE) puede obtener un valor de combinación vCPU/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.

Resolver los pods CoreDNS en estado pendiente

Si los pods son CoreDNS, el nombre del pod en la salida de la descripción es similar al siguiente:

NAME                                     READY   STATUS     RESTARTS      AGE
coredns-6548845887-qk9vf                 0/1     Pending    0             157m

Para resolver esto y reasignar los pods al programador de Fargate: revise la implementación de CoreDNS para eliminar la siguiente anotación predeterminada: eks.amazonaws.com/compute-type : ec2.

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 nombre del programador schedulerName sea default-scheduler (el programador predeterminado), actualice la especificación del pod y vuelva a crear los pods.

Si el nombre del programador schedulerName es fargate-scheduler (el programador de Fargate) y aún así se producen errores, confirme que el pod sigue todas las reglas y consideraciones de Fargate. Consulte la siguiente sección para conocer más pasos para solucionar problemas.

Solucionar los problemas de los pods asignados al programador de Fargate

Si los pods están asignados al programador de Fargate pero permanecen en estado Pendiente, la salida de la descripción 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 utiliza subredes privadas para los pods de Fargate con sólo puntos de conexión de la VPC configurados para la comunicación de servicios, confirme que tiene los siguientes puntos de conexión con nombres DNS permitidos:
    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.

¿Le resultó útil este artículo?


¿Necesita asistencia técnica o con la facturación?