257 votes

Comment utiliser les images du menu fixe avec Minikube?

J'ai plusieurs docker images que je veux utiliser avec minikube. Je ne veux pas d'abord à télécharger, puis de télécharger la même image au lieu de simplement en utilisant le local de l'image directement. Comment dois-je faire?

Des trucs que j'ai essayé :
1. J'ai essayé de l'exécution de ces commandes (séparément, la suppression d'instances de minikube deux fois et de commencer à neuf)

kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never

Sortie :

NAME                    READY     STATUS              RESTARTS   AGE
hdfs-2425930030-q0sdl   0/1       ContainerCreating   0          10m

Il est juste coincé sur certains d'état mais n'atteint jamais l'état prêt.


2. J'ai essayé de créer un registre, puis de mettre les images en elle, mais qui ne fonctionne pas non plus. Je pourrais avez fait mal, mais je ne trouve pas les bonnes instructions pour effectuer cette tâche.

Veuillez fournir des instructions pour l'utilisation locale de docker images en local kubernetes instance.
OS: ubuntu 16.04
Docker : Docker version 1.13.1, construire 092cba3
Kubernetes :

Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.3", GitCommit:"029c3a408176b55c30846f0faedf56aae5992e9b", GitTreeState:"clean", BuildDate:"2017-02-15T06:40:50Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"1970-01-01T00:00:00Z", GoVersion:"go1.7.1", Compiler:"gc", Platform:"linux/amd64"}

Si quelqu'un pouvait m'aider à trouver une solution qui utilise docker-composer pour ce faire, ce serait génial. Merci.

Edit :

Des Images chargées en eval $(minikube docker-env:

REPOSITORY                                            TAG                 IMAGE ID            CREATED             SIZE
fluxcapacitor/jupyterhub                              latest              e5175fb26522        4 weeks ago         9.59 GB
fluxcapacitor/zeppelin                                latest              fe4bc823e57d        4 weeks ago         4.12 GB
fluxcapacitor/prediction-pmml                         latest              cae5b2d9835b        4 weeks ago         973 MB
fluxcapacitor/scheduler-airflow                       latest              95adfd56f656        4 weeks ago         8.89 GB
fluxcapacitor/loadtest                                latest              6a777ab6167c        5 weeks ago         899 MB
fluxcapacitor/hdfs                                    latest              00fa0ed0064b        6 weeks ago         1.16 GB
fluxcapacitor/sql-mysql                               latest              804137671a8c        7 weeks ago         679 MB
fluxcapacitor/metastore-1.2.1                         latest              ea7ce8c5048f        7 weeks ago         1.35 GB
fluxcapacitor/cassandra                               latest              3cb5ff117283        7 weeks ago         953 MB
fluxcapacitor/apachespark-worker-2.0.1                latest              14ee3e4e337c        7 weeks ago         3.74 GB
fluxcapacitor/apachespark-master-2.0.1                latest              fe60b42d54e5        7 weeks ago         3.72 GB
fluxcapacitor/package-java-openjdk-1.8                latest              1db08965289d        7 weeks ago         841 MB
gcr.io/google_containers/kubernetes-dashboard-amd64   v1.5.1              1180413103fd        7 weeks ago         104 MB
fluxcapacitor/stream-kafka-0.10                       latest              f67750239f4d        2 months ago        1.14 GB
fluxcapacitor/pipeline                                latest              f6afd6c5745b        2 months ago        11.2 GB
gcr.io/google-containers/kube-addon-manager           v6.1                59e1315aa5ff        3 months ago        59.4 MB
gcr.io/google_containers/kubedns-amd64                1.9                 26cf1ed9b144        3 months ago        47 MB
gcr.io/google_containers/kube-dnsmasq-amd64           1.4                 3ec65756a89b        5 months ago        5.13 MB
gcr.io/google_containers/exechealthz-amd64            1.2                 93a43bfb39bf        5 months ago        8.37 MB
gcr.io/google_containers/pause-amd64           

353voto

Sven Walter Points 933

Comme le README décrit, vous pouvez réutiliser le démon Docker de Minikube avec eval $(minikube docker-env).

Donc, pour utiliser une image sans téléchargement, vous pouvez suivre ces étapes:

  1. définir les variables d'environnement avec eval $(minikube docker-env)
  2. construire l'image avec le démon Docker de Minukube (par exemple, docker build -t my-image .)
  3. définir l'image dans le module spec comme la balise de construction (par exemple, my-image)
  4. définir l' imagePullPolicy de Never, sinon Kubernetes essayez de télécharger l'image.

Remarque importante: Vous devez exécuter eval $(minikube docker-env) sur chaque terminal que vous souhaitez utiliser, car elle ne définit les variables d'environnement du shell en cours de session.

155voto

jjinking Points 5105

Ce qui a fonctionné pour moi, basé sur la solution de @svenwltr:

 # Start minikube
minikube start

# Set docker env
eval $(minikube docker-env)

# Build image
docker build -t foo:0.0.1 .

# Run in minikube
kubectl run hello-foo --image=foo:0.0.1 --image-pull-policy=Never

# Check that it's running
kubectl get pods
 

115voto

Farhad Farahi Points 12100

Cette Réponse n'est pas limitée à minikube!

L'utilisation d'un registre local:

docker run -d -p 5000:5000 --restart=always --name registry registry:2

Maintenant, étiquette de votre image correctement:

docker tag ubuntu localhost:5000/ubuntu

Notez que localhost doit être changé de nom dns de la machine, de l'exécution du registre contenant.

Maintenant, poussez votre image de registre local:

docker push localhost:5000/ubuntu

Vous devriez être en mesure de le tirer en arrière:

docker pull localhost:5000/ubuntu

Maintenant modifier votre fichier yaml à l'utilisation du registre local.

Pense que sur le montage de volume à l'emplacement approprié pour conserver les images sur le registre.

mise à jour:

comme Eli dit, vous aurez besoin d'ajouter le registre local comme risqués afin d'utiliser http (peut ne pas s'appliquer lors de l'utilisation de localhost, mais ne s'applique pas si vous utilisez le nom d'hôte local)

Ne pas utiliser de http dans la production, faire l'effort de sécurisation des choses.

10voto

chrisjones Points 181

En plus de la accepté de répondre, vous pouvez également réaliser ce que vous vouliez à l'origine (la création d'un déploiement à l'aide de l' run commande) avec la commande suivante:

kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 --generator=run-pod/v1 

J'ai trouvé les informations sur le générateur sur la Kubernetes-dev forum:

Si vous utilisez kubectl run, il génère un manifeste pour vous qui arrive à avoir imagePullPolicy ensemble de Always par défaut. Vous pouvez utiliser cette commande pour obtenir un imagePullPolicy de IfNotPresent, qui travaillera minikube:

kubectl run --image=<container> --generator=run-pod/v1

Dan Lorenc

https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM

7voto

Chris Stryczynski Points 2900

Une approche consiste à construire l'image localement et à effectuer ensuite:

 docker save imageNameGoesHere | pv | (eval $(minikube docker-env) && docker load)
 

minikube docker-env pourrait ne pas renvoyer les informations correctes s'exécutant sous un autre utilisateur / sudo. Au lieu de cela, vous pouvez exécuter sudo -u yourUsername minikube docker-env .

Il devrait retourner quelque chose comme:

 export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/chris/.minikube/certs"
export DOCKER_API_VERSION="1.23"
# Run this command to configure your shell:
# eval $(minikube docker-env)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X