Что такое ImagePullBackOff?

Ошибка ImagePullBackOff возникает, когда Kubernetes не может загрузить Docker образ для контейнера.

Причины возникновения

  • Неправильное имя образа или тег
  • Проблемы с доступом к registry
  • Отсутствие image pull secrets
  • Образ не существует в registry
  • Проблемы с сетью

Как отладить ошибку

  1. Проверь имя образа - убедись в правильности имени и тега
  2. Проверь доступ к registry - тестируй загрузку образа вручную
  3. Проверь image pull secrets - убедись в правильности credentials
  4. Проверь сеть - убедись в доступности registry

Как исправить ошибку

1. Исправь имя образа

1# Неправильно
2image: my-app:latest
3
4# Правильно (с полным путем)
5image: registry.example.com/my-app:v1.0.0
6
7# Или для публичных образов
8image: nginx:1.21

2. Добавь image pull secrets

1# Создай secret для registry
2kubectl create secret docker-registry my-registry-secret \
3  --docker-server=registry.example.com \
4  --docker-username=username \
5  --docker-password=password \
6  --docker-email=email@example.com
 1# Используй secret в deployment
 2apiVersion: apps/v1
 3kind: Deployment
 4metadata:
 5  name: my-app
 6spec:
 7  template:
 8    spec:
 9      imagePullSecrets:
10      - name: my-registry-secret
11      containers:
12      - name: app
13        image: registry.example.com/my-app:v1.0.0

3. Проверь доступность образа

1# Проверь образ локально
2docker pull registry.example.com/my-app:v1.0.0
3
4# Проверь в кластере
5kubectl describe pod pod-name
6
7# Проверь события
8kubectl get events --sort-by='.lastTimestamp'

4. Используй публичные образы для тестирования

 1apiVersion: v1
 2kind: Pod
 3metadata:
 4  name: test-pod
 5spec:
 6  containers:
 7  - name: nginx
 8    image: nginx:1.21
 9    ports:
10    - containerPort: 80

Как мониторить подобные ошибки

  • Настрой алерты на ImagePullBackOff
  • Мониторь доступность registry
  • Проверяй квоты и лимиты registry
  • Логируй ошибки загрузки образов

FAQ

В: Как использовать приватный registry?

О: Создай Docker registry secret и укажи его в imagePullSecrets в spec контейнера.

В: Что делать, если образ большой и загружается медленно?

О: Используй multi-stage builds, оптимизируй размер образа, используй кэширование.

В: Как проверить права доступа к registry?

О: Попробуй загрузить образ вручную с теми же credentials, что использует кластер.

Лучшие практики

  • Используй конкретные теги вместо latest
  • Храни credentials в Kubernetes secrets
  • Оптимизируй размер Docker образов
  • Используй multi-stage builds
  • Тестируй образы перед деплоем