GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo depurar los errores "ImagePullBackOff" 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 Expresar. Aquí le mostramos cómo depurar este mensaje común pero críptico para que pueda obtener sus servicios en línea.

Cómo funcionan las extracciones 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. Cada imagen a la que hace referencia el manifiesto de un pod debe ser accesible 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, no se ha autenticado correctamente o la red se cae. Cuando esto sucede, Kubernetes "retrocede" y programa otro intento de descarga. El retraso antes de la próxima extracció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 varias fallas sucesivas 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 abrir su Pod.

Revisar los conceptos básicos

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? Compruebe la ruta del registro y la etiqueta de la imagen en busca de errores tipográficos simples.

Puede inspeccionar el estado interno de Kubernetes con el describe pod comando en Kubectl. Esto le brinda más información que get pod y el panel de control 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 Pulling evento para el primer intento de extracción. Después de esto, verá un Failed o BackOff evento si el tirón no pudiera tener éxito. Estos se repetirán más adelante en la lista si Kubernetes todavía está en un ciclo de retroceso y reintento.

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

Administración de 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, 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 proporcione 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 lo 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 Docker config.json fragmento cuando extraen imágenes del registro.

El fragmento debe estar codificado en Base64 para que sea un valor secreto de Kubernetes válido. Puede usar un valor precodificado o canalizar texto sin formato a través de b64enc de YAML. , 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 revisó la URL de su registro, el nombre de la etiqueta de la imagen y las credenciales de inicio de sesión, es posible que vea ImagePullBackOff debido a los límites de tasa de registro. Docker Hub ahora lo restringe a 100 extracciones de contenedores cada seis horas. Esto aumenta a 200 extracciones cada seis horas si proporciona sus credenciales de inicio de sesión. Ese límite podría alcanzarse rápidamente en un clúster activo con muchos pods implementados con frecuencia.

Una falla 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 transcurra el tiempo suficiente para que caduque el límite. Luego, Kubernetes debería extraer correctamente la imagen y mostrar 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 accede a los servidores de Docker, ayudándole a mantenerse dentro de los límites de velocidad.

Resumen

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

Cuando esté 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 se verifica, sospeche que las credenciales de inicio de sesión son incorrectas o que se ha agotado la asignación de límite de velocidad. Usando kubectl describe expondrá la secuencia de eventos que llevaron a la falla.

Como opción final, 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, es posible que tenga problemas de red más generales que impidan que sus nodos lleguen al registro.


Docker
  1. Cómo usar el proveedor Terraform Kubernetes

  2. ¿Cómo depurar un script Bash?

  3. ¿Cómo rotar una imagen en Gs?

  4. Cómo usar un Dockerfile para crear una imagen de Docker

  5. Cómo confirmar cambios en una imagen de Docker

Cómo implementar RabbitMQ en Kubernetes

Cómo implementar PostgreSQL en Kubernetes

Cómo crear un Deployment en Kubernetes

Cómo instalar Kubernetes en Ubuntu 20.04

Cómo habilitar la depuración de WordPress para la resolución de problemas de errores

Cómo reducir el tamaño de la imagen de Docker en los contenedores de Docker