J'ai plusieurs images de docker avec lesquelles je souhaite utiliser minikube
. Je ne veux pas d'abord télécharger puis télécharger la même image au lieu d'utiliser simplement l'image locale directement. Comment puis-je faire cela?
Stuff J'ai essayé:
1. J'ai essayé d'exécuter ces commandes (séparément, en supprimant les instances de minikube à la fois et en recommençant)
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never
Production :
NAME READY STATUS RESTARTS AGE
hdfs-2425930030-q0sdl 0/1 ContainerCreating 0 10m
Il reste bloqué sur un certain statut mais n'atteint jamais l'état prêt.
2. J'ai essayé de créer un registre puis d'y mettre des images mais cela n'a pas fonctionné non plus. J'ai peut-être mal fait cela, mais je ne trouve pas les instructions appropriées pour effectuer cette tâche.
Veuillez fournir des instructions pour utiliser des images de docker local dans l'instance kubernetes locale.
OS: ubuntu 16.04
Docker: Docker version 1.13.1, build 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 à obtenir une solution qui utilise docker-compose pour ce faire, ce serait génial. Merci.
Éditer :
Images chargées dans 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
la source
minikube start --disk-size 100g
. Une autre solution serait de supprimer les anciennes images avecdocker images
etdocker rmi
.eval $(minikube docker-env)
après avoir fermé le terminal dans lequel vous travaillez AVANT d'essayer de reconstruire des images ... juste brûlé 6 heures de combat avec une image qui ne se mettait pas à jour dans minikube ... on aurait dit qu'un paquet ne se mettait pas à jour .. Vraiment tout simplement pas mettre à jour l'image référencée par minikube.IfNotPresent
ce qui signifie que tout ce que nous avons à faire est de définir les variables d'environnement.eval $(minikube docker-env -u)
Ce qui a fonctionné pour moi, basé sur la solution de @svenwltr:
la source
Cette réponse n'est pas limitée au minikube!
Utilisez un registre local:
Maintenant, marquez correctement votre image:
Notez que localhost doit être remplacé par le nom DNS de la machine exécutant le conteneur de registre.
Poussez maintenant votre image vers le registre local:
Vous devriez pouvoir le retirer:
Maintenant, changez votre fichier yaml pour utiliser le registre local.
Pensez à monter le volume à l'emplacement approprié pour conserver les images dans le registre.
mettre à jour:
comme l'a déclaré Eli, vous devrez ajouter le registre local comme non sécurisé afin d'utiliser http (peut ne pas s'appliquer lorsque vous utilisez localhost mais s'applique si vous utilisez le nom d'hôte local)
N'utilisez pas http dans la production, faites l'effort de sécuriser les choses.
la source
<registryIP>:5000/ubuntu
Ajoutant à la réponse de @Farhad sur la base de cette réponse ,
Ce sont les étapes pour configurer un registre local.
Configuration sur la machine locale
Configurer le nom d'hôte sur la machine locale: modifier
/etc/hosts
pour ajouter cette ligneMaintenant, démarrez un registre local (supprimez -d pour exécuter le mode non démon):
Maintenant, marquez correctement votre image:
Poussez maintenant votre image vers le registre local:
Vérifiez que l'image est poussée:
Configuration dans minikube
ssh en minikube avec:
minukube ssh
modifier
/etc/hosts
pour ajouter cette ligneVérifiez l'accès:
Maintenant, si vous essayez de tirer, vous pourriez obtenir une erreur d'accès http.
Activer l'accès non sécurisé :
Si vous prévoyez toujours d'utiliser minkube avec cette configuration locale, créez un minikube pour utiliser le registre non sécurisé par défaut (ne fonctionnera pas sur le cluster existant).
sinon suivez les étapes ci-dessous:
modifier le fichier de service de docker: obtenir le chemin de
systemctl status docker
Ça pourrait être :
ajoutez ce texte (remplacez 192.168.1.4 par votre ip)
à cette ligne
essayez de tirer:
Maintenant, changez votre fichier yaml pour utiliser le registre local.
à
N'utilisez pas http dans la production, faites l'effort de sécuriser les choses.
la source
En plus de la réponse acceptée, vous pouvez également obtenir ce que vous vouliez à l'origine (création d'un déploiement à l'aide de la
run
commande) avec la commande suivante:J'ai trouvé les informations sur le générateur sur le forum Kubernetes-dev:
https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM
la source
Une approche consiste à créer l'image localement, puis à:
minikube docker-env
peut ne pas renvoyer les informations correctes exécutées sous un autre utilisateur / sudo. Au lieu de cela, vous pouvez exécutersudo -u yourUsername minikube docker-env
.Il devrait renvoyer quelque chose comme:
la source
docker save imageNameGoesHere > pv | (eval $(minikube docker-env) && docker load)
docker save imageNameGoesHere | (eval $(minikube docker-env) && docker load)
a travaillé pour moiSi quelqu'un cherche à revenir à l'environnement local après avoir défini l'env minikube, utilisez la commande suivante.
la source
Depuis les documents de kubernetes:
https://kubernetes.io/docs/concepts/containers/images/#updating-images
Ou lisez dans l'autre sens: L'utilisation de la dernière balise force les images à toujours être tirées. Si vous utilisez le
eval $(minikube docker-env)
comme mentionné ci-dessus, alors n'utilisez pas de balise ou affectez une balise à votre image locale, vous pouvez éviter que Kubernetes essaie de la tirer de force.la source
Il y a maintenant un addon Minikube Registry, c'est probablement le moyen le plus simple. Voici comment l'utiliser: https://minikube.sigs.k8s.io/docs/tasks/registry/insecure/
Notez que j'ai eu des problèmes DNS, peut-être un bug.
la source
Une méthode plus simple qui répond à la question d'origine "Comment utiliser des images de docker local avec Minikube?", Consiste à enregistrer l'image dans un fichier tar et à la charger dans le minikube:
L'exécution de l'image implique ensuite une commande comme celle-ci. Assurez-vous d'inclure le paramètre "--image-pull-policy = Never".
la source
docker save
avecsudo
, puis missudo chmod 664 my-image.tar
à le rendre disponible pour mon utilisateur actuel.Pour ajouter aux réponses précédentes, si vous avez une image tarball, vous pouvez simplement la charger dans votre jeu d'images
docker image load -i /path/image.tar
Docker local . N'oubliez pas de l'exécuter aprèseval $(minikube docker-env)
, car minikube ne partage pas d'images avec le moteur Docker installé localement.la source
D'autres réponses supposent que vous utilisez minikube avec VM, donc vos images locales ne sont pas accessibles depuis minikube VM.
Si vous utilisez minikube avec
--vm-driver=none
, vous pouvez facilement réutiliser les images locales en définissantimage_pull_policy
sur Jamais:ou en définissant un
imagePullPolicy
champ pour les cotainers dans les.yaml
manifestes correspondants .la source
Une idée serait d'enregistrer l'image docker localement et de la charger plus tard dans le mini-cube comme suit:
Disons, par exemple, que vous avez déjà une image puckel / docker-airflow.
Enregistrez cette image sur le disque local -
docker save puckel/docker-airflow > puckel_docker_airflow.tar
Entrez maintenant dans minikube docker env -
eval $(minikube docker-env)
Chargez cette image enregistrée localement -
docker load < puckel_docker_airflow.tar
C'est aussi simple que ça et ça fonctionne comme un charme.
la source
Set the imagePullPolicy to Never
. Si votre image est étiquetée avec une adresse, par exemple,us.icr.io/mydiv/my-service:v0.0.1
un déploiement essaiera d'extraire cette image à distance. Comme vous avez déjà copié manuellement l'image, vous devez empêcher k8 de tirer l'image d'une adresse (registre de conteneurs) à laquelle elle ne peut pas accéder.Et si vous pouviez simplement exécuter des k8 dans la VM de Docker? il existe un support natif pour cela avec les versions les plus récentes de docker desktop ... il vous suffit d'activer ce support.
https://www.docker.com/blog/kubernetes-is-now-available-in-docker-desktop-stable-channel/ https://www.docker.com/blog/docker-windows-desktop-now- kubernetes /
comment je l'ai découvert:
en lisant les documents pour Helm, ils vous donnent un bref tutoriel sur l'installation de minikube. ce tutoriel installe minikube dans un vm différent / séparé de docker.
donc quand est venu le temps d'installer mes graphiques de barre, je n'ai pas pu obtenir la barre / k8 pour tirer les images que j'avais construites en utilisant docker. c'est comme ça que je suis arrivé ici à cette question.
donc ... si vous pouvez vivre avec n'importe quelle version de k8s fournie avec docker desktop, et que vous pouvez vivre avec celle-ci dans n'importe quel vm docker, alors peut-être que cette solution est un peu plus facile que certaines des autres.
Avertissement: je ne sais pas comment la commutation entre les conteneurs Windows / Linux affecterait quoi que ce soit.
la source
Il y a un essai et un moyen efficace de pousser votre image Docker locale directement vers minikube, ce qui vous fera gagner du temps pour reconstruire les images dans minikube.
Plus de détails ici
Toutes les méthodes possibles pour pousser des images vers un minikube sont mentionnées ici: https://minikube.sigs.k8s.io/docs/handbook/pushing/
la source
vous pouvez soit réutiliser le shell docker, avec
eval $(minikube docker-env)
, alternativement, vous pouvez tirer parti de l'docker save | docker load
ensemble des shells.la source
en fait ce qui se passe ici, votre Minikube ne peut pas reconnaître votre démon docker car il s'agit d'un service indépendant. Vous devez d'abord définir votre environnement minikube-docker utiliser la commande ci-dessous pour vérifier
Si vous exécutez la commande ci-dessous, elle indiquera où votre minikube recherche docker.
Vous devez à nouveau créer des images une fois que vous avez configuré minikube docker-env, sinon cela échouera.
la source
je trouve cette méthode de ClickHouse Operator Build From Sources et elle aide et sauve ma vie!
la source
étapes pour exécuter des images de docker local dans kubernetes
1. eval $ (minikube -p minikube docker-env)
2. dans le fichier d'artefact, sous la section spec -> conteneurs
ajouter imagePullPolicy: IfNotPresent
ou imagePullPolicy: Never
3. puis exécutez
kubectl create -f <filename>
la source
cela marche
la source