web-dev-qa-db-fra.com

Quelle est la signification du statut ImagePullBackOff sur un pod Kubernetes?

J'essaie de lancer mon premier pod Kubernetes localement. J'ai lancé la commande suivante (de here ):

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

Ensuite, j'ai essayé de lancer ce qui suit:

kubectl create -f ./run-aii.yaml

run-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

Maintenant, quand je cours: kubectl get pods Je suis en train:

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

BTW: docker images revenir:

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

pourquoi ai-je le ImagePullBackOff ??

21
ItayB

Par défaut, Kubernetes consulte des images dans le registre public de Docker. Si votre image n'existe pas, elle ne pourra pas la tirer.

Vous pouvez exécuter un registre Kubernetes local avec le additif du cluster de registre .

Puis marquez vos images avec localhost:5000:

docker tag aii localhost:5000/dev/aii

Poussez l'image dans le registre Kubernetes:

docker Push localhost:5000/dev/aii

Et changez run-aii.yaml pour utiliser le localhost:5000/dev/aii _ image au lieu de aii. Kubernetes devrait maintenant pouvoir tirer l’image.

Vous pouvez également exécuter un registre Docker privé via l'un des fournisseurs proposant ce service (AWS ECR, GCR, etc.), mais s'il s'agit d'un développement local, il sera plus rapide et plus facile de configurer un registre Kubernetes Docker.

21
Pixel Elephant

J'ai eu le même problème, car j'avais déjà créé un pod à partir de l'image du menu fixe via le fichier .yml, mais le nom m'a été mal saisi, c'est-à-dire test-app: 1.0.1 lorsque j'avais besoin de test-app: 1.0.2 dans mon fichier .yml. Alors j'ai fait kubectl delete pods --all pour supprimer le pod défectueux puis refaites le kubectl create -f name_of_file.yml qui a résolu mon problème.

4
user9200729

Un problème qui peut causer un ImagePullBackOff, en particulier si vous extrayez d'un registre privé, est si le module n'est pas configuré avec le imagePullSecret du registre privé.

Une erreur d'authentification peut provoquer un imagePullBackOff.

0
Margach Chris

J'avais un problème similaire lors de l'utilisation de minikube over hyperv avec 2048 Go de mémoire. J'ai trouvé que dans HyperV Manager, la demande en mémoire était supérieure à celle allouée.

J'ai donc arrêté minikube et assigné quelque part entre 4096-6144GB. Cela a bien fonctionné par la suite, tous les modules fonctionnant!

Je ne sais pas si cela peut régler le problème dans tous les cas. Mais jetez un coup d’œil à la mémoire et au disque alloués au minikube.

0
Ranvir

Vous pouvez aussi spécifier imagePullPolicy: Never dans la spécification du conteneur:

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