Что означает статус ImagePullBackOff в модуле Kubernetes?

Я пытаюсь запустить мой первый стручок kubernetes на местном уровне. Я выполнил следующую команду (отсюда):

export ARCH=amd64
docker run -d \
    --volume=/:/rootfs:ro \
    --volume=/sys:/sys:ro \
    --volume=/var/lib/docker/:/var/lib/docker:rw \
    --volume=/var/lib/kubelet/:/var/lib/kubelet:rw \
    --volume=/var/run:/var/run:rw \
    --net=host \
    --pid=host \
    --privileged \
    gcr.io/google_containers/hyperkube-${ARCH}:${K8S_VERSION} \
    /hyperkube kubelet \
        --containerized \
        --hostname-override=127.0.0.1 \
        --api-servers=http://localhost:8080 \
        --config=/etc/kubernetes/manifests \
        --cluster-dns=10.0.0.10 \
        --cluster-domain=cluster.local \
        --allow-privileged --v=2

Затем я пытаюсь запустить следующее:

kubectl create -f ./run-aii.yaml

вводного aii.yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: aii
spec:
  replicas: 2
  template:
    metadata:
      labels:
        run: aii
    spec:
      containers:
      - name: aii
        image: aii
        ports:
        - containerPort: 5144
        env:
        - name: KAFKA_IP
          value: kafka
        volumeMounts:
        - mountPath: /root/script
          name: scripts-data
          readOnly: true
        - mountPath: /home/aii/core
          name: core-aii
          readOnly: true
        - mountPath: /home/aii/genome
          name: genome-aii
          readOnly: true
        - mountPath: /home/aii/main
          name: main-aii
          readOnly: true
      - name: kafka
        image: kafkazoo
        volumeMounts:
        - mountPath: /root/script
          name: scripts-data
          readOnly: true
        - mountPath: /root/config
          name: config-data
          readOnly: true
      - name: ws
        image: ws
        ports:
        - containerPort: 3000
      volumes:
      - name: scripts-data
        hostPath:
          path: /home/aii/general/infra/script
      - name: config-data
        hostPath:
          path: /home/aii/general/infra/config
      - name: core-aii
        hostPath: 
          path: /home/aii/general/core
      - name: genome-aii
        hostPath: 
          path: /home/aii/general/genome
      - name: main-aii
        hostPath: 
          path: /home/aii/general/main

Теперь, когда я бегу: kubectl get pods я получаю:

NAME                    READY     STATUS             RESTARTS   AGE
aii-806125049-18ocr     0/3       ImagePullBackOff   0          52m
aii-806125049-6oi8o     0/3       ImagePullBackOff   0          52m
aii-pod                 0/3       ImagePullBackOff   0          23h
k8s-etcd-127.0.0.1      1/1       Running            0          2d
k8s-master-127.0.0.1    4/4       Running            0          2d
k8s-proxy-127.0.0.1     1/1       Running            0          2d
nginx-198147104-9kajo   1/1       Running            0          2d

КСТАТИ: возвращение docker images:

REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
ws                                         latest              fa7c5f6ef83a        7 days ago          706.8 MB
kafkazoo                                   latest              84c687b0bd74        9 days ago          697.7 MB
aii                                        latest              bd12c4acbbaf        9 days ago          1.421 GB
node                                       4.4                 1a93433cee73        11 days ago         647 MB
gcr.io/google_containers/hyperkube-amd64   v1.2.4              3c4f38def75b        11 days ago         316.7 MB
nginx                                      latest              3edcc5de5a79        2 weeks ago         182.7 MB
docker_kafka                               latest              e1d954a6a827        5 weeks ago         697.7 MB
spotify/kafka                              latest              30d3cef1fe8e        12 weeks ago        421.6 MB
wurstmeister/zookeeper                     latest              dc00f1198a44        3 months ago        468.7 MB
centos                                     latest              61b442687d68        4 months ago        196.6 MB
centos                                     centos7.2.1511      38ea04e19303        5 months ago        194.6 MB
gcr.io/google_containers/etcd              2.2.1               a6cd91debed1        6 months ago        28.19 MB
gcr.io/google_containers/pause             2.0                 2b58359142b0        7 months ago        350.2 kB
sequenceiq/hadoop-docker                   latest              5c3cc170c6bc        10 months ago       1.766 GB

почему я получаю ImagePullBackOff??

Ответ 1

По умолчанию Kubernetes просматривает общедоступный реестр Docker для поиска изображений. Если ваше изображение не существует, оно не сможет его вытащить.

Вы можете запустить локальный реестр Kubernetes с помощью реестра кластера.

Затем помечайте свои изображения с помощью localhost:5000:

docker tag aii localhost:5000/dev/aii

Вставьте изображение в реестр Kubernetes:

docker push localhost:5000/dev/aii

И измените run-aii.yaml, чтобы использовать localhost:5000/dev/aii вместо aii. Теперь Кубернетес должен иметь возможность вытаскивать изображение.

В качестве альтернативы вы можете запустить частный реестр Docker через одного из поставщиков, который предлагает это (AWS ECR, GCR и т.д.), но если это для локальной разработки, то быстрее и проще получить настройку с локальным Kubernetes Реестр докеров.

Ответ 2

У меня была та же проблема, из-за которой я уже создал pod из образа докера в файле .yml, однако я ошибся в имени, т.е. test-app: 1.0.1, когда мне было нужно тестовое приложение: 1.0.2 в моем .yml файле. Поэтому я сделал kubectl delete pods --all, чтобы удалить неисправный блок, а затем переделал kubectl create -f name_of_file.yml, который решил мою проблему.

Ответ 3

У меня была похожая проблема при использовании Minikube над HyperV с 2048 ГБ памяти. Я обнаружил, что в диспетчере HyperV спрос на память был выше, чем выделено.

Поэтому я остановил миникуб и назначил где-то между 4096-6144Гб. После этого все работало нормально!

Я не знаю, может ли это решить проблему в каждом случае. Но взгляните на память и диск, выделенные для мини-куба.

Ответ 4

Вы также можете указать imagePullPolicy: Never в спецификации контейнера:

containers:
- name: nginx
  imagePullPolicy: Never
  image: custom-nginx
  ports:
  - containerPort: 80

Ответ 5

Одна из проблем, которая может вызвать ImagePullBackOff, особенно если вы извлекаете данные из частного реестра, заключается в том, что модуль не настроен с imagePullSecret частного реестра.

Ошибка аутентификации может вызвать imagePullBackOff.