J'utilise kubernetes sur une seule machine pour les tests, j'ai construit une image personnalisée à partir de l'image docker nginx, mais lorsque j'essaie d'utiliser l'image dans kubernetes, j'obtiens une erreur d'extraction d'image ?????
MON POD YAML
kind: Pod
apiVersion: v1
metadata:
name: yumserver
labels:
name: frontendhttp
spec:
containers:
- name: myfrontend
image: my/nginx:latest
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- mountPath: "/usr/share/nginx/html"
name: mypd
imagePullSecrets:
- name: myregistrykey
volumes:
- name: mypd
persistentVolumeClaim:
claimName: myclaim-1
MA COMMANDE KUBERNETES
kubectl create -f pod-yumserver.yaml
L'ERREUR
kubectl describe pod yumserver
Name: yumserver
Namespace: default
Image(s): my/nginx:latest
Node: 127.0.0.1/127.0.0.1
Start Time: Tue, 26 Apr 2016 16:31:42 +0100
Labels: name=frontendhttp
Status: Pending
Reason:
Message:
IP: 172.17.0.2
Controllers: <none>
Containers:
myfrontend:
Container ID:
Image: my/nginx:latest
Image ID:
QoS Tier:
memory: BestEffort
cpu: BestEffort
State: Waiting
Reason: ErrImagePull
Ready: False
Restart Count: 0
Environment Variables:
Conditions:
Type Status
Ready False
Volumes:
mypd:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: myclaim-1
ReadOnly: false
default-token-64w08:
Type: Secret (a secret that should populate this volume)
SecretName: default-token-64w08
Events:
FirstSeen LastSeen Count From SubobjectPath Type Reason Message
--------- -------- ----- ---- ------------- -------- ------ -------
13s 13s 1 {default-scheduler } Normal Scheduled Successfully assigned yumserver to 127.0.0.1
13s 13s 1 {kubelet 127.0.0.1} Warning MissingClusterDNS kubelet does not have ClusterDNS IP configured and cannot create Pod using "ClusterFirst" policy. Falling back to DNSDefault policy.
12s 12s 1 {kubelet 127.0.0.1} spec.containers{myfrontend} Normal Pulling pulling image "my/nginx:latest"
8s 8s 1 {kubelet 127.0.0.1} spec.containers{myfrontend} Warning Failed Failed to pull image "my/nginx:latest": Error: image my/nginx:latest not found
8s 8s 1 {kubelet 127.0.0.1} Warning FailedSync Error syncing pod, skipping: failed to "StartContainer" for "myfrontend" with ErrImagePull: "Error: image my/nginx:latest not found"
Vous avez donc l'image sur votre machine prête. Cependant, il essaie toujours d'extraire l'image de Docker Hub, ce qui n'est probablement pas ce que vous voulez dans votre configuration sur une seule machine. Cela se produit car la dernière balise définit l'imagePullPolicy sur Toujours implicitement. Vous pouvez essayer de le définir explicitement sur IfNotPresent ou changer pour une balise autre que la plus récente. - Timo Reimann 28 avril à 7h16
Pour une raison quelconque, Timo Reimann n'a posté cela ci-dessus qu'en tant que commentaire, mais cela devrait certainement être la réponse officielle à cette question, donc je la poste à nouveau.
Exécutez eval $ (minikube docker-env) avant de créer votre image.
Réponse complète ici: https://stackoverflow.com/a/40150867
La manière la plus simple de poursuivre l'analyse des problèmes de ErrImagePull
est de ssh dans le nœud et d'essayer de tirer l'image manuellement en faisant docker pull my/nginx:latest
. Je n'ai jamais configuré Kubernetes sur une seule machine, mais je peux imaginer que le démon Docker n'est pas accessible à partir du nœud pour une raison quelconque. Une tentative de tirage à la main devrait fournir plus d'informations.
Utilisez-vous minikube sur linux? Vous devez installer docker (je pense), mais vous n'avez pas besoin de le démarrer. Minikube le fera. Essayez d'utiliser le pilote KVM avec cette commande:
minikube start --vm-driver kvm
Exécutez ensuite la commande eval $(minikube docker-env)
pour vous assurer que vous utilisez l'environnement docker minikube. créez votre conteneur avec une balise build -t mycontainername:version .
si vous tapez ensuite docker ps
, vous devriez voir un tas de conteneurs de minikube déjà en cours d'exécution. Les utilitaires kvm sont probablement déjà sur votre machine, mais ils peuvent être installés comme ceci sur centos/rhel:
yum install qemu-kvm qemu-img virt-manager libvirt libvirt-python