I'm trying to create a local Kubernetes deployment using Minikube, Docker Registry, and a demo node project.
The first thing I did was install Docker v1.12.3, then Minikube v0.12.2.
Then I created a Docker Registry container by running this command (via this tutorial, only running the first command below)
docker run -d -p 5000:5000 --name registry registry:2
Next I ran this minikube command to create a local kubernetes cluster:
minikube start --vm-driver="virtualbox" --insecure-registry="0.0.0.0:5000"
My project structure looks like this:
. ├── Dockerfile └── server.js
and my Dockerfile looks like this:
FROM node:7.1.0 EXPOSE 8080 COPY server.js . CMD node server.js
Then I built my own docker image and pushed it to my private repository:
docker build -t hello-node . docker tag hello-node localhost:5000/hello-node docker push localhost:5000/hello-node
Then I tried to run a deployment with this command:
kubectl run hello-node --image=localhost:5000/hello-node --port=8888
But then I get this:
sudo kubectl get pods --all-namespaces NAMESPACE NAME READY STATUS RESTARTS AGE default hello-node-3745105022-gzs5a 0/1 ErrImagePull 0 11m kube-system kube-addon-manager-minikube 1/1 Running 4 10d kube-system kube-dns-v20-2x64k 3/3 Running 12 10d kube-system kubernetes-dashboard-mjpjv 1/1 Running 4 10d
I think I might be missing some kind of docker registry authentication, but as I'm googling I can't find something that I understand. Could someone please point me in the right direction?
Edit
After using ssh to access bash
on the kubernetes VM and pull the hello-node
image from my private registry by using this command:
minikube ssh Boot2Docker version 1.11.1, build master : 901340f - Fri Jul 1 22:52:19 UTC 2016 Docker version 1.11.1, build 5604cbe docker@minikube:~$ sudo docker pull localhost:5000/hello-node Using default tag: latest Pulling repository localhost:5000/hello-node Error while pulling image: Get http://localhost:5000/v1/repositories/hello-node/images: dial tcp 127.0.0.1:5000: getsockopt: connection refused
Is localhost:5000
the correct address to use within the kubernetes host VM?
If a Pod is Running but not Ready it means that the Readiness probe is failing. When the Readiness probe is failing, the Pod isn't attached to the Service, and no traffic is forwarded to that instance.
So what exactly does ImagePullBackOff mean? The status ImagePullBackOff means that a Pod couldn't start, because Kubernetes couldn't pull a container image. The 'BackOff' part means that Kubernetes will keep trying to pull the image, with an increasing delay ('back-off').
What Does `Failed to Pull Image` Mean? You'll get a `Failed to pull image` error when Kubernetes tries to create a new pod but can't pull the container image it needs in order to do so. You'll usually see this straight after you try to apply a new resource to your cluster using a command like `kubectl apply`.
It looks like you're running the registry on the host. In fact, you need to run the registry inside the VM. You can point your docker client to the docker daemon inside the minikube VM by running this command first eval $(minikube docker-env)
in your shell.
Then, you can run the docker build command on your host, but it will build inside the VM.
In fact, if your goal is to simply run the local version of your images, you should run the eval $(minikube docker-env)
to point towards the docker daemon in your VM, and set the imagePullPolicy: IfNotPresent
in your pod YAML. Then, kubernetes will use a locally built image if available.
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