web-dev-qa-db-fra.com

Pourquoi ai-je une erreur ErrImagePull dans ce déploiement de Kubernetes?

J'essaie de créer un déploiement Kubernetes local à l'aide de Minikube, de Docker Registry et d'un projet de nœud de démonstration.

La première chose que j'ai faite a été d'installer Docker v 1.12.3, puis Minikube v0.12.2.

Ensuite, j'ai créé un conteneur de registre Docker en exécutant cette commande (via ce tutoriel , en exécutant uniquement la première commande ci-dessous)

docker run -d -p 5000:5000 --name registry registry:2

Ensuite, j'ai exécuté cette commande minikube pour créer un cluster kubernetes local:

minikube start --vm-driver="virtualbox" --insecure-registry="0.0.0.0:5000"

Ma structure de projet ressemble à ceci:

.
├── Dockerfile
└── server.js

et mon Dockerfile ressemble à ceci:

FROM node:7.1.0
EXPOSE 8080
COPY server.js .
CMD node server.js

Ensuite, j'ai construit ma propre image de menu fixe et l'ai transférée dans mon référentiel privé:

docker build -t hello-node .
docker tag hello-node localhost:5000/hello-node
docker Push localhost:5000/hello-node

Ensuite, j'ai essayé de lancer un déploiement avec cette commande:

kubectl run hello-node --image=localhost:5000/hello-node --port=8888

Mais alors je reçois ceci:

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

Je pense qu'il me manque peut-être une sorte d'authentification du registre docker, mais comme je suis sur Google, je ne peux pas trouver quelque chose que je comprends. Est-ce que quelqu'un pourrait m'indiquer dans la bonne direction?

Modifier

Après avoir utilisé ssh pour accéder à bash sur les kubernetes VM) et tirez le hello-node image de mon registre privé en utilisant cette commande:

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

Est localhost:5000 l'adresse correcte à utiliser dans la machine virtuelle hôte kubernetes?

23
Nathan Jones

Il semble que vous exécutiez le registre sur l'hôte. En fait, vous devez exécuter le registre à l'intérieur de la machine virtuelle. Vous pouvez diriger votre client docker vers le démon docker à l'intérieur du minikube VM) en exécutant cette commande en premier eval $(minikube docker-env) _ dans votre shell.

Ensuite, vous pouvez exécuter la commande docker build sur votre hôte, mais elle sera créée à l'intérieur de la machine virtuelle.

En fait, si votre objectif est simplement d'exécuter la version locale de vos images, vous devez exécuter la fonction eval $(minikube docker-env) pour pointer vers le démon docker de votre machine virtuelle et définir le paramètre imagePullPolicy: IfNotPresent dans votre pod YAML. Ensuite, kubernetes utilisera une image construite localement si elle est disponible.

29
Matt Rickard