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 ??
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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With