Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pull a local image to run a pod in Kubernetes

I have the following image created by a Dockerfile:

REPOSITORY   TAG      IMAGE ID       CREATED       SIZE  ruby/lab     latest   f1903b1508cb   2 hours ago   729.6 MB 

And I have my following YAML file:

apiVersion: extensions/v1beta1 kind: Deployment metadata:   name: ruby-deployment spec:   replicas: 2   template:     metadata:       labels:         app: ruby     spec:       containers:       - name: ruby-app         image: ruby/lab         imagePullPolicy: IfNotPresent         ports:         - containerPort: 4567 

When I create the deployment I got the following info in the pods:

ruby-deployment-3830038651-sa4ii   0/1       ImagePullBackOff   0          7m ruby-deployment-3830038651-u1tvc   0/1       ImagePullBackOff   0          7m 

And the error Failed to pull image "ruby/lab:latest": Error: image ruby/lab not found from below:

 8m            2m              6       {kubelet minikube}      spec.containers{ruby}   Normal          Pulling         pulling image "ruby/lab:latest"  8m            2m              6       {kubelet minikube}      spec.containers{ruby}   Warning         Failed          Failed to pull image "ruby/lab:latest": Error: image ruby/lab not found  8m            2m              6       {kubelet minikube}                              Warning         FailedSync      Error syncing pod, skipping: failed to "StartContainer" for "ruby" with ErrImagePull: "Error: image ruby/lab not found" 

Is really necessary to have registry in docker for this? I just want to make test locally and pass my code/repo to a friend for testing purposes

Thanks

like image 579
CPB Avatar asked Oct 20 '16 01:10

CPB


2 Answers

You can point your docker client to the VM's docker daemon by running

eval $(minikube docker-env) 

Then you can build your image normally and create your kubernetes resources normally using kubectl. Make sure that you have

imagePullPolicy: IfNotPresent 

in your YAML or JSON specs.

Additionally, there is a flag to pass in insecure registries to the minikube VM. However, this must be specified the first time you create the machine.

minikube start --insecure-registry 

You may also want to read this when using a private registry http://kubernetes.io/docs/user-guide/images/

like image 126
Matt Rickard Avatar answered Sep 28 '22 11:09

Matt Rickard


AFAIR minikube runs in a VM hence it will not see the images you've built locally on a host machine, but... as stated in https://github.com/kubernetes/minikube/blob/master/docs/reusing_the_docker_daemon.md you can use eval $(minikube docker-env) to actually utilise docker daemon running on minikube, and henceforth build your image on the minikubes docker and thus expect it to be available to the minikubes k8s engine without pulling from external registry

like image 36
Radek 'Goblin' Pieczonka Avatar answered Sep 28 '22 11:09

Radek 'Goblin' Pieczonka