¿Cómo soluciono los problemas de programación de pods con el escalador automático de clústeres en Amazon EKS?
Tengo problemas con la programación de pods cuando uso el escalador automático de clústeres en Amazon Elastic Kubernetes Service (Amazon EKS). Mi pod está bloqueado en estado Pendiente o recibo una notificación sobre un evento de programación fallido.
Resolución
Si has activado el escalador automático de clústeres y tu pod está bloqueado en estado pendiente, es posible que el escalador automático de clústeres no agregue nuevos nodos a los pods no programados.
Comprobación del estado del pod
Para comprobar el estado de tu pod, ejecuta el siguiente comando kubectl get pods:
kubectl get pods -n kube-system -l app=cluster-autoscaler
Si el pod está en estado pendiente o si el contenedor de tu pod está en estado de espera, soluciona el problema del estado del pod.
Si tu pod está en estado CrashLoopBackOff, ejecuta el siguiente comando kubectl describe pod:
kubectl describe pod cluster-autoscaler-####-#### -n kube-system
Nota: Sustituye cluster-autoscaler-####-#### por el pod del escalador automático de clústeres.
Si el resultado del comando muestra «OOMKilled» con el código de salida 137, aumenta los límites de recursos de memoria y las solicitudes para el despliegue del escalador automático de clústeres. Para obtener más información, consulta Specify a memory request and a memory limit (Especificación de una solicitud de memoria y un límite de memoria) en el sitio web de Kubernetes.
Para comprobar los registros del pod, ejecuta el siguiente comando kubectl logs:
kubectl logs -f -n kube-system -l app=cluster-autoscaler
Los registros pueden proporcionar información sobre la solución de problemas. Por ejemplo, el registro del pod puede mostrar el siguiente mensaje de error «AccessDenied»:
«Failed to create AWS Manager: AccessDenied: User: arn:aws:sts::444455556666:assumed-role/your-role is not authorized to perform: your-action because no identity-based policy allows the your-action action»
Para resolver los problemas de permisos de AWS Identity and Access Management (IAM), adjunta la política de IAM correcta al pod. Para obtener más información, consulta IAM policy (Política de IAM) en el sitio web de GitHub.
O bien, el registro puede mostrar el siguiente mensaje de error:
«Failed to create AWS Manager: cannot autodiscover ASGs: WebIdentityErr: failed to retrieve credentials caused by: RequestError: send request failed caused by: Post https://sts.region.amazonaws.com/: : dial tcp: i/o timeout»
Si tienes problemas de conectividad de red, comprueba que la subred de tu nodo de trabajo tenga una ruta a los siguientes puntos de enlace de servicio de AWS:
- ec2.region.amazonaws.com
- autoscaling.region.amazonaws.com
- sts.region.amazonaws.com
Además, comprueba que la lista de control de acceso de la red (ACL de la red) o el grupo de seguridad del nodo de trabajo de la subred no bloqueen el tráfico a los puntos de enlace anteriores.
Si tu clúster es privado, realiza las siguientes acciones:
- Agrega los puntos de enlace anteriores a tu nube virtual privada (VPC).
- Configura el grupo de seguridad de los puntos de enlace para permitir el tráfico en el puerto 443 desde un grupo de seguridad de nodos de trabajo.
Identificación de los motivos por los que el escalador automático de clústeres no puede escalar horizontalmente el grupo de escalamiento automático
Para comprobar si tu pod contiene una regla de programación, como afinidad o antiafinidad, ejecuta el siguiente comando kubectl describe pod:
kubectl describe pod pending-pod-name -n pending-pod-namespace
Nota: Sustituye pending-pod-name por el nombre de tu pod pendiente y pending-pod-namespace por el espacio de nombres de tu pod pendiente. Para obtener más información, consulta Affinity and anti-affinity (Afinidad y antiafinidad) en el sitio web de Kubernetes.
En el resultado del comando, consulta la sección Eventos para determinar por qué tu pod está bloqueado en el estado Pendiente. Por ejemplo, puedes identificar un problema con las etiquetas de tus grupos de nodos.
Para asegurarte de que tus grupos de nodos funcionan, realiza las siguientes acciones:
- Configura tus grupos de nodos con etiquetas que coincidan con la configuración de nodeSelector y requiredDuringSchedulingIgnoredDuringExecution en la especificación de nodeAffinity del pod. Para obtener más información, consulta Node labels (Etiquetas del nodo) en el sitio web de Kubernetes. Las etiquetas correctas permiten que el escalador automático de clústeres identifique los nodos aptos para las operaciones de escalamiento.
- Asegúrate de haber definido correctamente las reglas de programación de los pods. Para obtener más información, consulta Assigning Pods to nodes (Asignación de pods a nodos) en el sitio web de Kubernetes. Cuando los pods usan nodeSelector o requiredDuringSchedulingIgnoredDuringExecution, el escalador automático de clústeres solo considera escalar los grupos de nodos que cumplen con los requisitos de programación de estos ajustes.
Para comprobar la configuración del escalador automático de clústeres, ejecuta el siguiente comando kubectl get deployment:
kubectl get deployment cluster-autoscaler -n kube-system -o yaml
Si el escalador automático de clústeres tiene el argumento correcto de node-group-auto-discovery, el resultado del comando muestra la siguiente configuración:
command: - ./cluster-autoscaler - --v=4 - --stderrthreshold=info - --cloud-provider=aws - --skip-nodes-with-local-storage=false - --expander=least-waste - --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/your-cluster-name
Comprueba si el grupo de escalamiento automático tiene las etiquetas correctas.
El escalador automático de clústeres requiere las siguientes etiquetas para averiguar qué grupo de escalamiento automático está asociado al grupo de nodos:
Tag 1: key: k8s.io/cluster-autoscaler/your-cluster-name value: owned Tag 2: key: k8s.io/cluster-autoscaler/enabled value: true
Para comprobar si el grupo de nodos ha alcanzado el número máximo de nodos, ejecuta el siguiente comando describe-nodegroup:
aws eks describe-nodegroup --cluster-name your-cluster-name --nodegroup-name your-nodegroup-name
Nota: Sustituye your-cluster-name por el nombre de tu clúster y your-nodegroup-name por el nombre de tu grupo de nodos.
Si el grupo de nodos alcanzó el número máximo de nodos, actualiza el grupo de nodos para aumentar el número máximo de nodos. A continuación, los nuevos nodos pueden programar los nuevos pods.
Comprueba si la instancia de Amazon Elastic Compute Cloud (Amazon EC2) que inición tu grupo de escalamiento automático puede unirse a tu clúster. Si la instancia no puede unirse a tu clúster, soluciona los problemas de tus nodos de trabajo.
Para comprobar la solicitud de recursos del pod, ejecuta el siguiente comando kubectl get pod:
kubectl get pod pending-pod-name -n pending-pod-namespace -o yaml | grep resources -A6
Nota: Sustituye pending-pod-name por el nombre de tu pod pendiente y pending-pod-namespace por el nombre del espacio de nombres de tu pod pendiente.
Comprueba si el tipo de instancia de nodo actual cumple con la solicitud de recursos del pod y modifica la solicitud de recursos del pod si es necesario. O bien, crea un nuevo grupo de nodos con un tipo de instancia modificado. Para obtener más información sobre las solicitudes de recursos de pods, consulta Resource management for Pods and containers (Administración de recursos para pods y contenedores) en el sitio web de Kubernetes.
Para ver los taints de un nodo, ejecuta el siguiente comando kubectl describe node:
kubectl describe node your-node-name
Nota: Sustituye your-node-name por el nombre de tu nodo.
Asegúrate de que tus pods toleran los taints que has agregado al nodo. Si el nodo no necesita los taints, elimínalas del nodo. Para obtener más información, consulta Taints and tolerations (Taints y tolerancias) en el sitio web de Kubernetes.
Información relacionada
Frequently asked questions (Preguntas frecuentes) en el sitio web de GitHub
- Temas
- Containers
- Etiquetas
- Amazon Elastic Kubernetes Service
- Idioma
- Español

Contenido relevante
- preguntada hace 6 días
- preguntada hace 7 meses
- preguntada hace 7 meses
- preguntada hace 7 meses
OFICIAL DE AWSActualizada hace 10 meses