AWS announces preview of AWS Interconnect - multicloud
AWS announces AWS Interconnect – multicloud (preview), providing simple, resilient, high-speed private connections to other cloud service providers. AWS Interconnect - multicloud is easy to configure and provides high-speed, resilient connectivity with dedicated bandwidth, enabling customers to interconnect AWS networking services such as AWS Transit Gateway, AWS Cloud WAN, and Amazon VPC to other cloud service providers with ease.
¿Cómo puedo solucionar los problemas al configurar el escalador automático de clústeres en un clúster de Amazon EKS?
Quiero solucionar problemas al iniciar el escalador automático de clústeres en mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS).
Solución
Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.
Los comandos de la siguiente resolución no utilizan el indicador --region porque utilizan la región de AWS predeterminada. Para comprobar su región predeterminada, ejecuta el siguiente comando configure de la AWS CLI:
aws configure
Para cambiar la región de AWS, usa el indicador --region.
Requisitos previos: Instala o actualiza eksctl a la versión más reciente. Para obtener instrucciones, consulta Installation (Instalación) en el sitio web de eksctl.
Realiza las siguientes acciones de solución de problemas en función del problema que encuentres. Para solucionar los problemas de los sondeos, consulta ¿Cómo soluciono los problemas en los sondeos de disponibilidad y preparación con mis clústeres de Amazon EKS?
El pod del escalador automático de clústeres está en un estado "CrashLoopBackOff"
Para solucionar los problemas relacionados con el estado "CrashLoopBackOff", sigue estos pasos:
-
Para comprobar el estado del pod del escalador automático de clústeres, ejecuta el siguiente comando:
kubectl get pods -n kube-system | grep cluster-autoscalerResultado de ejemplo:
NAME READY STATUS RESTARTS AGE cluster-autoscaler-abcd-abcd 0/1 CrashLoopBackOff 3 (20s ago) 99s -
Para obtener información detallada sobre el motivo por el que el pod está bloqueado en el estado "CrashLoopBackOff", ejecuta el siguiente comando:
kubectl describe pod cluster-autoscaler-abcd-abcde -n kube-systemNota: Sustituye cluster-autoscaler-abcd-abcde por el nombre del pod del escalador automático de clústeres.
En el resultado, comprueba el valor del motivo. Si ves un problema con OOMKilled, usa el comando kubectl edit para aumentar los valores de los límites y las solicitudes de los recursos de memoria en el despliegue del escalador automático de clústeres. Para obtener más información sobre kubectl edit, consulta kubectl edit en el sitio web de Kubernetes. Para ver los valores de memoria predeterminados del escalador automático de clústeres, consulta cluster-autoscaler-autodiscover.yaml en el sitio web de GitHub.
Resultado de ejemplo:Name: cluster-autoscaler-abcd-abcde Namespace: kube-system State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: OOMKilled Exit Code: 137 ... -
Para comprobar si hay problemas en los registros del pod del escalador automático de clústeres, ejecuta el siguiente comando:
kubectl logs -f -n kube-system -l app=cluster-autoscalerSi los registros muestran problemas con los permisos de AWS Identity and Access Management (IAM), continúa con El pod del escalador automático de clústeres tiene problemas con los permisos de IAM. Resultado de ejemplo:
Failed to create AWS Manager: cannot autodiscover ASGs: AccessDenied: User: abc is not authorized to perform: autoscaling: DescribeTags because no identity-based policy allows the autoscaling:DescribeTags action status code: 403, request id: abcdexyzSi los registros muestran problemas de red, como el tiempo de espera de E/S, ve a El pod del escalador automático de clústeres tiene problemas de red. Resultado de ejemplo:
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
El pod del escalador automático de clústeres tiene problemas con los permisos de IAM
Comprueba si has asociado un proveedor de OIDC al clúster
Asegúrate de haber creado un proveedor de OpenID Connect (OIDC) para tu clúster.
Comprobar si se ha anotado la cuenta de servicio del escalador automático de clústeres con el rol de IAM
Para comprobar las anotaciones de tu cuenta de servicio de AWS, ejecuta el siguiente comando:
kubectl get serviceaccount cluster-autoscaler -n kube-system -o yaml
Comprueba las anotaciones para asegurarte de que el resultado muestre tu rol de cuenta de servicio del escalador automático de clústeres. Resultado de ejemplo:
apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::012345678912:role/cluster_auto_scaler_iam_role name: cluster-autoscaler namespace: kube-system
Para solucionar problemas relacionados con el rol de tu cuenta de servicio, consulta ¿Cómo puedo solucionar los problemas de un proveedor de OIDC e IRSA en Amazon EKS?
Comprobación de la política de IAM
Asegúrate de adjuntar la política de IAM correcta al rol de cuenta de servicio del escalador automático de clústeres. Para ver un ejemplo de política y una lista de los permisos necesarios, consulta la política de IAM en el sitio web de GitHub.
Comprobar si se ha configurado correctamente la relación de confianza
Asegúrate de haber configurado correctamente la relación de confianza. Ejemplo de relación de confianza:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::example_awsaccountid:oidc-provider/oidc.eks.example_region.amazonaws.com/id/example_oidcid" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.example_region.amazonaws.com/id/example_oidcid:aud": "sts.amazonaws.com", "oidc.eks.example_region.amazonaws.com/id/example_oidcid:sub": "system:serviceaccount:kube-system:cluster-autoscaler" } } } ] }
Nota: Sustituye example_awsaccountid por el ID de tu cuenta de AWS, example_region por tu región y example_oidcid por tu ID de OIDC.
Cada vez que cambies el rol o la política de la cuenta de servicio, ejecuta el siguiente comando para reiniciar el módulo del escalador automático de clústeres:
kubectl rollout restart deployment cluster-autoscaler -n kube-system
El pod del escalador automático de clústeres tiene problemas de red
Asegúrate de configurar el clúster de Amazon EKS con la configuración de red requerida. Comprueba que la subred del nodo de trabajo tenga una tabla de enrutamiento que pueda enrutar el tráfico a los siguientes puntos de enlace:
- ec2.amazonaws.com para Amazon Elastic Compute Cloud (Amazon EC2)
- autoscaling.region.amazonaws.com para Amazon EC2 Auto Scaling
- sts.region.amazonaws.com para AWS Security Token Service (AWS STS)
Nota: Sustituye region por tu región.
Si el clúster de Amazon EKS es privado, debes crear un punto de enlace de Amazon Virtual Private Cloud (Amazon VPC) para los puntos de enlace anteriores.
Nota: El grupo de seguridad de cada punto de enlace de VPC debe permitir el grupo de seguridad del nodo de trabajo de Amazon EKS. Los grupos de seguridad también deben permitir el tráfico entrante al bloque CIDR de la VPC de Amazon EKS en el puerto 443.
Comprueba que la lista de control de acceso de la red (ACL de la red) de la subred y los grupos de seguridad de los nodos de trabajo no bloqueen el tráfico que se comunica con estos puntos de enlace.
El escalador automático de clústeres no escala ni desescala horizontalmente los nodos
Consulta de los registros del pod del escalador automático de clústeres para ver las reglas de programación
Para comprobar el estado de los pods, ejecuta el siguiente comando:
kubectl logs -f -n kube-system -l app=cluster-autoscaler
Para comprobar si el pod que está en estado pendiente contiene reglas de programación, como la regla de afinidad, ejecuta el siguiente comando:
kubectl describe pod example_podname -n example_namespace
Nota: Sustituye example_podname por el nombre del pod y example_namespace por tu espacio de nombres.
En el resultado, consulta la sección de eventos para obtener información sobre por qué el pod está en estado pendiente. Resultado de ejemplo:
$ kubectl describe pod cluster-autoscaler-abcde-abcd -n kube-system Name: cluster-autoscaler-5b6b675456-npf8p ... Status: Pending ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 12s (x4 over 2m) default-scheduler 0/4 nodes are available: 1 node(s) didn't match node selector, 3 node(s) didn't match pod affinity rules.
Nota: El escalador automático de clústeres respeta nodeSelector y requiredDuringSchedulingIgnoredDuringExecution en nodeAffinity. Asegúrate de etiquetar tus grupos de nodos con estos valores. Para etiquetar tus grupos de nodos, ejecuta el siguiente comando:
kubectl get nodes --show-labels
Si el escalador automático de clústeres no puede programar un pod con nodeSelector or requiredDuringSchedulingIgnoredDuringExecution, el escalador automático de clústeres solo usa grupos de nodos que cumplen con los requisitos de expansión. Para programar un pod en un nodo, debes modificar las reglas de programación definidas en los pods o nodos. Para obtener más información, consulta Affinity and anti-affinity (Afinidad y antiafinidad) en el sitio web de Kubernetes.
Comprobar el etiquetado de grupos de Amazon EC2 Auto Scaling para el escalador automático de clústeres
Para que el escalador automático de clústeres descubra un grupo de escalamiento automático, debes etiquetar el grupo de Amazon EC2 Auto Scaling del grupo de nodos con las siguientes etiquetas.
Para la etiqueta 1, configura los valores siguientes:
- En clave, introduce k8s.io/cluster-autoscaler/example-cluster.
- En valor, introduce propio.
Nota: Sustituye example-cluster por el nombre de tu clúster.
Para la etiqueta 2, configura los valores siguientes:
- En clave, introduce k8s.io/cluster-autoscaler/enabled.
- En valor, introduce true.
Comprobar la configuración del manifiesto de despliegue
Para abrir el manifiesto de despliegue, ejecuta el siguiente comando:
kubectl -n kube-system edit deployment.apps/cluster-autoscaler
En el resultado, para node-group-auto-discover, asegúrate de que el manifiesto incluya el nombre correcto del clúster o grupo de nodos. Resultado de ejemplo:
containers:- 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/example-cluster --balance-similar-node-groups --skip-nodes-with-system-pods=false
Asegúrate de no superar el número máximo de nodos
Para comprobar el número actual de nodos, ejecuta el siguiente comando describe-nodegroup:
aws eks describe-nodegroup --cluster-name example-cluster --nodegroup-name example-nodegroup
Nota: Sustituye example-cluster por el nombre de tu clúster y example-nodegroup por el nombrede tu grupo de nodos.
Si ha alcanzado el número mínimo o máximo de nodos, ejecuta el siguiente comando update-nodegroup-config para modificar los valores:
aws eks update-nodegroup-config \ --cluster-name cluster-name \ --nodegroup-name nodegroup-name \ --scaling-config minSize=minvalue,maxSize=maxvalue,desiredSize=desiredvalue \
Nota: Sustituye cluster-name por el nombre de tu clúster y nodegroup-name por el nombre de tu grupo de nodos. Además, sustituye minvalue por el número mínimo de nodos, maxvalue por el número máximo de nodos y desiredvalue por el valor deseado de nodos.
Asegúrate de que los nodos puedan unirse al clúster
Comprueba si las nuevas instancias que inicia el grupo de Amazon EC2 Auto Scaling pueden unirse al clúster de Amazon EKS. Si no pueden, consulta ¿Cómo puedo hacer que mis nodos de trabajo se unan a mi clúster de Amazon EKS?
Asegúrate de usar el tipo de instancia de nodo correcto
Para comprobar si el escalador automático de clústeres puede cumplir la solicitud de recursos del pod con los tipos de instancias de nodo actuales, ejecuta el siguiente comando:
kubectl -n example_namespace get pod example_podname -o yaml | grep resources -A6
Nota: Sustituye example-cluster por el nombre de tu clúster y example-podname por el nombre de tu pod.
Resultado de ejemplo:
containers: - image: registry.k8s.io/autoscaling/cluster-autoscaler:v1.32.1 name: cluster-autoscaler resources: limits: cpu: 100m memory: 600Mi requests: cpu: 100m memory: 600Mi
En el resultado, comprueba los valores de los límites y las solicitudes. Asegúrate de que los valores de la CPU y la memoria sean lo suficientemente altos para que el nodo pueda conservar el pod. Para ver los requisitos de tu pod, ejecuta el siguiente comando:
kubectl describe pod podname -n namespace,
Nota: Sustituye podname por el nombre de tu pod y namespace por tu espacio de nombres.
Si los requisitos del pod superan las capacidades del nodo, usa el comando kubectl edit para aumentar los valores de los límites y las solicitudes de los recursos de memoria en el despliegue del escalador automático de clústeres. O bien, crea un nuevo grupo de nodos con un tipo de instancia diferente que cumpla con los requisitos de recursos del pod. Para obtener más información sobre kubectl edit, consulta kubectl edit en el sitio web de Kubernetes.
Comprobación de la configuración del taint del nodo en el grupo de nodos
Para comprobar si has configurado los taints para el nodo y si el pod puede tolerarlos, ejecuta el siguiente comando:
kubectl describe node example_nodename | grep taint -A2
Nota: Sustituye example_nodename por el nombre de tu nodo.
Si has configurado los taints, elimina los taints definidos en el nodo. Para ver los pasos, consulta El estado del pod es Pendiente en ¿Cómo puedo solucionar los problemas relacionados con el estado de los pods en Amazon EKS? Si el pod no puede tolerar los taints, define la tolerancia en el pod. Para obtener más información, consulta Taints and tolerations (Taints y tolerancias) en el sitio web de Kubernetes.
Asegúrate de que el nodo no tenga desactivado el desescalamiento vertical
Para comprobar el estado de scale-down-disable en tu nodo, ejecuta el siguiente comando:
kubectl describe node example_nodename | grep scale-down-disable
Nota: Sustituye example_nodename por el nombre de tu nodo.
Resultado de ejemplo:
cluster-autoscaler.kubernetes.io/scale-down-disabled: true
Si scale-down-disable se establece en true, ejecuta el siguiente comando para eliminar la anotación del nodo y permitir que se desescale verticalmente:
kubectl annotate node example_nodename cluster-autoscaler.kubernetes.io/scale-down-disabled-
Nota: Sustituye example_nodename por el nombre de tu nodo.
Para obtener más información sobre los pasos para la solución de problemas del escalador automático de clústeres, consulta 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 un mes
- preguntada hace 8 meses
- preguntada hace 8 meses
- preguntada hace 5 meses