Cómo depurar errores «ImagePullBackOff» de Kubernetes – CloudSavvy IT

Gráfico que muestra el logotipo de Kubernetes

Los clústeres de Kubernetes pueden encontrar varios problemas al intentar extraer las imágenes de su contenedor. Cuando ocurre un error, sus Pods ingresarán un ImagePullBackOff estado. A continuación, le mostramos cómo depurar este mensaje común pero críptico para que pueda obtener sus servicios en línea.

Cómo funcionan los tirones de imágenes

Kubernetes necesita obtener una imagen cuando crea una nueva implementación o actualiza una existente con una referencia de etiqueta diferente. La responsabilidad de extraer imágenes recae en el proceso de Kubelet en cada nodo trabajador. Todas las imágenes a las que hace referencia el manifiesto de un pod deben ser accesibles para todos los nodos del clúster para que cualquiera de ellos pueda cumplir con una solicitud de programación de contenedores.

La descarga podría fallar si la ruta de la imagen es incorrecta, está autenticado incorrectamente o la red se cae. Cuando esto sucede, Kubernetes «retrocede» y programa otro intento de descarga. El retraso antes del próximo tirón aumenta exponencialmente cada vez que falla un intento, hasta un límite de cinco minutos.

Si su Pod muestra el ImagePullBackOff estado, Kubernetes ha tenido varios fallos sucesivos de extracción de imágenes y ahora está esperando antes de volver a intentarlo. El contenedor no podrá iniciarse hasta que la imagen esté disponible.

Puede dejar el Pod en este estado si sabe que el problema se debe a las condiciones de la red u otro error transitorio. Kubernetes eventualmente completará otro reintento y adquirirá la imagen con éxito. Si ese no es el caso, aquí se explica cómo comenzar a depurar para que pueda activar su Pod.

Compruebe lo básico

En primer lugar, vale la pena revisar los conceptos básicos. ¿Su manifiesto de recursos hace referencia a una imagen válida que realmente existe? Verifique la ruta del registro y la etiqueta de la imagen para ver si hay errores tipográficos simples.

Puede inspeccionar el estado interno de Kubernetes con el describe pod comando en Kubectl. Esto le da más información que get pod y el panel de Kubernetes proporcionan.

kubectl describe pod my-pod --namespace my-namespace

Los cambios en el ciclo de vida del Pod se muestran bajo el encabezado «Eventos». El primer evento será Scheduled; debe ir seguido de un Pulling evento para el primer intento de extracción. Después de esto, verá un Failed o BackOff evento si el tirón no pudo tener éxito. Estos se repetirán más adelante en la lista si Kubernetes todavía está en un ciclo de retroceso y reintento.

Leer el Message asociado con estos eventos a menudo proporciona la causa raíz del problema. A manifest for image:tag not found mensaje significa que la imagen es válida pero que ha especificado una etiqueta no válida. Si tú ves does not exist or no pull access, compruebe que el registro y las rutas de la imagen sean correctas. Cuando esté seguro de que tienen razón, el problema estará relacionado con una autenticación incorrecta.

Administrar inicios de sesión del registro

Debe iniciar sesión antes de extraer imágenes privadas. En Kubernetes, es un mecanismo de dos pasos: cree un secreto que contenga credenciales y luego haga referencia a ese secreto en las definiciones de su Pod.

El campo Pod se llama imagePullSecrets. Debe indicar un secreto de Kubernetes que proporciona un token de inicio de sesión para el registro. Este secreto debe almacenar un valor JSON compatible con Docker.

apiVersion: v1
kind: Secret
type: kubernetes.io/dockerconfigjson
metadata:
  name: image-pull-secret
data:
  .dockerconfigjson: {{ "{"auths": {"registry.example.com": {"username": "demo-user", "password": "my-password"}}}" | b64enc }}

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: my-container
      image: registry.example.com/my-image:latest
  imagePullSecrets:
    - name: image-pull-secret

Este manifiesto muestra cómo crear un secreto que te registra en registry.example.com como demo-user con la contraseña my-password. El Pod hace referencia al secreto por su nombre. Los procesos de Kubelet en los nodos de su clúster incluirán el Docker config.json fragmento cuando extraen imágenes del registro.

El fragmento debe estar codificado en Base64 para ser un valor secreto válido de Kubernetes. Puede utilizar un valor precodificado o canalizar texto sin formato a través de YAML b64enc, como se muestra en el manifiesto anterior.

El tipo de credenciales que utilice dependerá de su registro. En muchos casos, password en realidad será un token de acceso personal o una clave API. Docker Hub requiere un token de acceso generado en la configuración de su cuenta si tiene habilitada la autenticación de dos factores en su cuenta.

Límites de tasa de registro

Si ha verificado la URL de su registro, el nombre de la etiqueta de la imagen y las credenciales de inicio de sesión, es posible que esté viendo ImagePullBackOff debido a los límites de la tasa de registro. Docker Hub ahora lo restringe a 100 contenedores extraídos cada seis horas. Esto aumenta a 200 extracciones cada seis horas si proporciona sus credenciales de inicio de sesión. Ese límite se podría alcanzar rápidamente en un clúster activo con muchos Pods implementados con frecuencia.

Un error de extracción debido a un límite de velocidad se manifestará de la misma manera que un problema de autenticación. Deberá esperar hasta que pase el tiempo suficiente para que expire el límite. A continuación, Kubernetes debería extraer correctamente la imagen y activar sus pods.

Para una mitigación a más largo plazo, considere ejecutar su propio registro o proxy en el clúster para almacenar en caché sus imágenes. Esto puede reducir significativamente la frecuencia con la que accedes a los servidores de Docker, lo que te ayuda a mantenerte dentro de los límites de velocidad.

Resumen

Los pods de Kubernetes ingresan ImagePullBackOff Estado cuando un nodo no puede extraer una imagen. Kubelet volverá a intentar la extracción periódicamente para que los errores transitorios no requieran ninguna intervención manual para solucionarlos.

Cuando estés seguro de que ImagePullBackOff no es solo un problema temporal, comience por asegurarse de que la ruta de la imagen del Pod sea válida. Si eso funciona, sospeche que las credenciales de inicio de sesión son incorrectas o una asignación de límite de tarifa agotada. Utilizando kubectl describe expondrá la secuencia de eventos que llevaron a la falla.

Como última opción, puede intentar extraer la imagen usted mismo de otra máquina para asegurarse de que el servidor de registro remoto esté realmente activo. Si puede extraer la imagen pero su clúster no puede, es posible que tenga problemas de red más generales que impidan que sus nodos lleguen al registro.

Deja un comentario

En esta web usamos cookies para personalizar tu experiencia de usuario.    Política de cookies
Privacidad