¿Por qué mi pod de Amazon EKS está atascado en el estado ContainerCreating y aparece el error «failed to create pod sandbox»?

7 minutos de lectura
0

Mi pod de Amazon Elastic Kubernetes Service (Amazon EKS) está atascado en el estado ContainerCreating y aparece el error «failed to create pod sandbox».

Resolución

Este error aparece cuando hay un problema de red o una configuración incorrecta del límite de recursos del sistema.

Si aparece este error y los pods están en el estado ContainerCreating, inspeccione primero el estado del pod. A continuación, ejecute el siguiente comando para obtener más información. Sustituya podname por el nombre de su pod:

kubectl describe pod podname

Según el resultado, consulte las siguientes secciones para conocer los pasos de solución de problemas.

Respuesta de error «Resource temporarily unavailable»

Si tiene un problema con los recursos, aparece un mensaje de error similar al siguiente:

"kubelet, ip-##-##-##-##.##-#####-#.compute.internal Failed to create pod sandbox: rpc error: code = Unknown desc = failed to start sandbox container for pod "example_pod": Error response from daemon: failed to start shim: fork/exec /usr/bin/containerd-shim: resource temporarily unavailable: unknown"

Esta respuesta de error se produce cuando la configuración del kernel definida para el PID máximo o el número máximo de archivos provoca una limitación del sistema operativo.

Para resolver el problema de forma temporal, reinicie el nodo.

Para solucionar el problema, realice las siguientes tareas:

  • Reúna los registros de los nodos.
  • Revise los registros de Docker para la respuesta del error «dockerd[4597]: runtime/cgo: pthread_create failed: Resource temporarily unavailable».
  • Revise el registro de Kubelet para determinar si están presentes las siguientes respuestas de error:
    «kubelet[5267]: runtime: failed to create new OS thread (have 2 already; errno=11)»
    «kubelet[5267]: runtime: may need to increase max user processes (ulimit -u)».
  • Ejecute el comando ps para identificar los procesos zombis. Todos los procesos que se enumeran con el estado Z en la salida son procesos zombis.

Respuesta de error «Network plugin cni failed to set up pod network»

Si tiene un problema de red, aparece un mensaje de error similar al siguiente:

«Network plugin cni failed to set up pod network: add cmd: failed to assign an IP address to container»

Esta respuesta de error significa que la interfaz de red de contenedores (CNI) no puede asignar una dirección IP al pod recién creado.

Una instancia que usó el máximo de direcciones IP e interfaces de red elásticas permitidas puede provocar esta respuesta de error. También puede recibir esta respuesta de error cuando las subredes de Amazon Virtual Private Cloud (Amazon VPC) tienen un recuento de direcciones IP de cero.

A continuación se muestra un ejemplo del número máximo de direcciones IP de la interfaz de red:

Instance type    Maximum network interfaces    Private IPv4 addresses per interface    IPv6 addresses per interfacet3.medium        3                             6                                       6

En el ejemplo anterior, la instancia t3.medium tiene un máximo de tres interfaces de red y cada interfaz de red tiene un máximo de seis direcciones IP. La primera dirección IP se usa para el nodo y no puede asignarla. Esta interfaz de red tiene entonces 17 direcciones IP que puede asignar.

Cuando la interfaz de red se queda sin direcciones IP, los registros del daemon local de administración de direcciones IP (ipamD) muestran el siguiente mensaje:

«ipamd/ipamd.go:1285»,«msg»:«Número total de interfaces encontradas: 3 »«AssignIPv4Address: Estadísticas del conjunto de direcciones IP: total: 17, asignados 17» «AssignPodIPv4Address: eni-abc123 does not have available addresses»

Observe el siguiente ejemplo de salida:

Warning FailedCreatePodSandBox 23m (x2203 over 113m) kubelet, ip-##-##-##-##.##-#####-#.compute.internal (combined from similar events): Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "provisioning-XXXXXXXXXXXXXXX": networkPlugin cni failed to set up pod "provisioning-XXXXXXXXXXXXXXX" network: add cmd: failed to assign an IP address to container

Revise la subred para determinar si la subred se quedó sin direcciones IP libres. Puede ver las direcciones IP disponibles para cada subred en la consola de Amazon VPC, en la sección Subredes.

Subnet: ##########IPv4 CIDR Block 10.2.1.0/24   Number of allocated ips 254  ; Free address count 0

Para resolver este problema, utilice las siguientes soluciones:

Respuesta de error «Error while dialing»

Si tiene problemas con el marcado, aparece un error similar al siguiente:

«Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused»

Este error indica que el pod aws-node no se pudo comunicar con IPAM porque el pod aws-node no se pudo poner en marcha en el nodo.

Para solucionar este problema, asegúrese de poner en marcha la versión correcta del complemento CNI de VPC para la versión de clúster.

Es posible que los pods estén en estado Pendiente debido a errores en las sondas de disponibilidad y preparación. Asegúrese de tener la versión más reciente del complemento CNI de VPC.

El problema también puede producirse porque el punto de montaje de Dockershim (hasta la versión 1.23 de EKS) no se monta. El siguiente mensaje de ejemplo indica que el pod no montó var/run/dockershim.sock:

Getting running pod sandboxes from \"unix:///var/run/dockershim.sock\Not able to get local pod sandboxes yet (attempt 1/5): rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or director

Para resolver este problema, complete estas tareas:

  • Reinicie el pod aws-node para reasignar el punto de montaje.
  • Acordone el nodo y escale los nodos del grupo de nodos.
  • Actualice la interfaz de red de Amazon VPC a la versión de clúster más reciente compatible.

Si ha agregado el CNI como complemento administrado en la consola de administración de AWS, el aws-node no superará las pruebas. Los complementos administrados sobrescriben la cuenta de servicio. Sin embargo, la cuenta de servicio no está configurada con el rol seleccionado. Para resolver este problema, desactive el complemento desde la consola de administración de AWS y cree la cuenta de servicio con un archivo de manifiesto. Alternativamente, edite la cuenta de servicio actual de aws-node para agregar la función que se usa en el complemento administrado.

Respuesta de error «Pod does not have label»

Si tiene un problema con la etiqueta, aparece un error similar al siguiente:

«Failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address» o «Pod does not have label vpc.amazonaws.com/PrivateIPv4Address»

Este problema se produce cuando un pod no tiene un nodeSelector programado en un nodo de Windows.

Para resolver el problema, asegúrese de incluir las siguientes etiquetas en el PodSpec del nodeSelector:

  • **kubernetes.io/os:**windows
  • kubernetes.io/arch: amd64

Error en el grupo de seguridad

Si tiene un problema con un grupo de seguridad, aparece un error similar al siguiente:

«Plugin type="aws-cni" name="aws-cni" failed (add): add cmd: failed to assign an IP address to container
Vpc-resource-controller failed to allocate branch ENI to pod: creating network interface, NoCredentialProviders: no valid providers in chain. Deprecated.»

Esta respuesta de error puede indicar un problema con el plano de control de health.kubernetes. Para resolver este problema, póngase en contacto con AWS Support.

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 3 meses