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)
5 Réponses :
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.
minikube démarrer
eval $ (minikube docker-env)
docker build -t ma-première-image: 3.0.0.
kubectl exécuter mon-premier-conteneur --image = mon-premier -image: 3.0.0 --image-pull-policy = Jamais
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
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.
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
quand j'ai vérifié avec kubectl get pods, l'erreur suivante est affichée `my-first-pod 0/1 ErrImageNeverPull '
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é .
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
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 .
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.
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