Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the meaning of ImagePullBackOff status on a Kubernetes pod?

I'm trying to run my first kubernetes pod locally. I've run the following command (from 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 

Then, I've trying to run the following:

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 

Now, when I run: kubectl get pods I'm getting:

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 return:

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 

why do I get the ImagePullBackOff ??

like image 774
ItayB Avatar asked May 18 '16 14:05

ItayB


People also ask

How do I fix ImagePullBackOff error in Kubernetes?

To resolve it, double check the pod specification and ensure that the repository and image are specified correctly. If this still doesn't work, there may be a network issue preventing access to the container registry. Look in the describe pod text file to obtain the hostname of the Kubernetes node.

What is the different status of pods?

Pod conditionsPodScheduled : the Pod has been scheduled to a node. ContainersReady : all containers in the Pod are ready. Initialized : all init containers have completed successfully. Ready : the Pod is able to serve requests and should be added to the load balancing pools of all matching Services.

What is evicted status in Kubernetes?

Eviction is the process of proactively terminating one or more Pods on resource-starved Nodes. In Kubernetes, scheduling refers to making sure that Pods are matched to Nodes so that the kubelet can run them.


1 Answers

By default Kubernetes looks in the public Docker registry to find images. If your image doesn't exist there it won't be able to pull it.

You can run a local Kubernetes registry with the registry cluster addon.

Then tag your images with localhost:5000:

docker tag aii localhost:5000/dev/aii 

Push the image to the Kubernetes registry:

docker push localhost:5000/dev/aii 

And change run-aii.yaml to use the localhost:5000/dev/aii image instead of aii. Now Kubernetes should be able to pull the image.

Alternatively, you can run a private Docker registry through one of the providers that offers this (AWS ECR, GCR, etc.), but if this is for local development it will be quicker and easier to get setup with a local Kubernetes Docker registry.

like image 111
Pixel Elephant Avatar answered Oct 13 '22 00:10

Pixel Elephant