web-dev-qa-db-fra.com

kubernetes ne peut pas extraire l'image locale

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"
13
ginda

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.

22
Martin Rauscher

Exécutez eval $ (minikube docker-env) avant de créer votre image.

Réponse complète ici: https://stackoverflow.com/a/40150867

18
Alin

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.

4
Timo Reimann

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 
1
anweb