3
votes

kubectl get pods affiche ErrImagePull

J'essaye de créer un pod en utilisant l'image de mon docker local comme suit.

1.J'exécute d'abord cette commande dans le terminal

index.js

    var http = require('http');
    var server = http.createServer(function(request, response) {
     response.statusCode = 200;
     response.setHeader('Content-Type', 'text/plain');
     response.end('Welcome to the Golden Guide to Kubernetes
    Application Development!');
    });
    server.listen(3000, function() {
     console.log('Server running on port 3000');
    });

2.J'ai créé un docker image comme suit

pods.yml

    kind: Pod
    apiVersion: v1
    metadata:
     name: my-first-pod
    spec:
     containers:
     - name: my-first-container
       image: my-first-image:3.0.0

3.J'ai créé le pod.yml comme indiqué ci-dessous et j'exécute cette commande

Dockerfile

    FROM node:carbon
    WORKDIR /app
    COPY . .
    CMD [ "node", "index.js" ]

4 . puis j'ai essayé d'exécuter cette commande

Events:
  Type     Reason     Age                From               Message
  ----     ------     ----               ----               -------
  Normal   Scheduled  99s                default-scheduler  Successfully assigned default/my-first-pod to minikube
  Warning  Failed     41s (x3 over 94s)  kubelet, minikube  Failed to pull image "my-first-image:3.0.0": rpc error: code = Unknown desc = Error response from daemon: pull access denied for my-first-image, repository does not exist or may require 'docker login'
  Warning  Failed     41s (x3 over 94s)  kubelet, minikube  Error: ErrImagePull
  Normal   BackOff    12s (x4 over 93s)  kubelet, minikube  Back-off pulling image "my-first-image:3.0.0"
  Warning  Failed     12s (x4 over 93s)  kubelet, minikube  Error: ImagePullBackOff
  Normal   Pulling    0s (x4 over 98s)   kubelet, minikube  pulling image "my-first-image:3.0.0"

mais cela montre l'erreur suivante

kubectl describe pod my-first-pod 

5.i récupère les journaux des pods

NAME                             READY   STATUS             RESTARTS   AGE
multiplication-b47499db9-phpb7   0/1     ImagePullBackOff   0          23h
my-first-pod                     0/1     ErrImagePull       0          7s
kubectl get pods
kubectl -f create pod.yml.
sudo docker image build -t my-first-image:3.0.0 .
eval $(minikube docker-env)


0 commentaires

5 Réponses :


1
votes

Puisque vous utilisez une image sans la télécharger, vous devrez définir imagePullPolicy sur Jamais, sinon Kubernetes essaiera de télécharger l'image.

Démarrer le minikube

minikube démarrer

Définir le docker env

eval $ (minikube docker-env)

Créer une image h1>

docker build -t ma-première-image: 3.0.0.

Exécuter dans minikube

kubectl exécuter mon-premier-conteneur --image = mon-premier -image: 3.0.0 --image-pull-policy = Jamais

Vérifiez qu'il est en cours d'exécution

kubectl get pods

Les spécifications de votre pod devraient être comme ci-dessous

pods.yml

kind: Pod
apiVersion: v1
metadata:
 name: my-first-pod
spec:
 containers:
 - name: my-first-container
   image: my-first-image:3.0.0
   imagePullPolicy: Never


3 commentaires

quand j'ai vérifié avec kubectl get pods, l'erreur suivante est affichée my-first-pod 0/1 ErrImageNeverPull 0 13s


avez-vous défini docker env comme suggéré eval $ (minikube docker-env)?


essayez d'abord de supprimer l'image construite. exécutez eval $ (minikube docker-env) avant de créer l'image. Ensuite, essayez à nouveau d'exécuter votre pod en utilisant la nouvelle image.



0
votes

Lorsque vous créez une image dans le registre Minikube local, vous souhaiterez peut-être définir imagePullPolicy: Never afin qu'il n'essaye pas d'extraire l'image du registre distant. La spécification du pod ressemblerait à ceci:

kind: Pod
apiVersion: v1
metadata:
 name: my-first-pod
spec:
 containers:
 - name: my-first-container
   image: my-first-image:3.0.0
   imagePullPolicy: Never


1 commentaires

quand j'ai vérifié avec kubectl get pods, l'erreur suivante est affichée `my-first-pod 0/1 ErrImageNeverPull '



1
votes

Vous avez créé l'image mais vous devez la pousser vers le référentiel docker.

Si vous créez une image docker sur le nœud kubernetes, cela peut fonctionner, mais il est préférable de pousser vers le référentiel pour que docker tire du dépôt central, comme le le nombre de nœuds augmente, vous ne pouvez pas contrôler où le pod sera appelé et l'image sera indisponible.

docker push -t my-first-image:3.0.0 

Si vous avez un référentiel docker privé, poussez vers le référentiel privé et utilisez le nom complet de l'image qualifié .


0 commentaires

1
votes

nom du référentiel manquant.

créer un compte dans dockerHub. puis compilez et poussez l'image vers votre dépôt dans dockerhub

sudo docker image build -t niranga/my-first-image:3.0.0 .
sudo docker login
sudo docker push niranga/my-first-image:3.0.0

mettez à jour le nom de l'image dans le fichier pod.yaml comme niranga / ma-première-image: 3.0.0 p >

ça devrait marcher


0 commentaires

4
votes

Raison

Ceci est dû au fait qu'il ne peut pas télécharger l'image du docker définie dans votre fichier de définition de pod. Par défaut, il télécharge les images requises depuis DockerHub .

Voie 1

Donc, après avoir créé votre image ma-première-image: 3.0.0 , vous devez la publier sur DockerHub. Pour cela, créez un compte sur DockerHub et connectez-vous depuis le terminal à l'aide de la commande login

kind: Pod
apiVersion: v1
metadata:
 name: my-first-pod
spec:
 containers:
 - name: my-first-container
   image: YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0
   imagePullPolicy: Never

Après une connexion réussie, reconstruisez votre image Docker avec votre nom d'utilisateur DockerHub dans la balise et transférez-la vers DockerHub ( plus de détails )

sudo docker image build -t YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0 .
sudo docker push YOUR_DOCKERHUB_USERNAME/my-first-image:3.0.0

Mettez à jour votre image dans pod.yml en tant que YOUR_DOCKERHUB_USERNAME / my-first-image: 3.0.0 et créez vos pods comme avant.

Voie 2

Vous peut demander à trouver l'image Docker requise à partir de votre machine locale au lieu de la télécharger à partir de DockerHub. Pour ce faire, vous devez ajouter imagePullPolicy: Never dans votre fichier pod.yml sous une description de conteneur spécifique. Voici un exemple de votre fichier pod.yml pour montrer où définir la politique d'extraction d'image

sudo docker login

0 commentaires