web-dev-qa-db-fra.com

Le déploiement de Kubernetes "n'a pas réussi à extraire l'image" avec le registre local, minikube

Je reçois une erreur "Échec de l'extraction de l'image" sur mon deployment dans minikube avec un registre local, malgré le fait que d'autres déploiements utilisant le même registre d'images fonctionnent comme prévu.

Mon flux de travail consiste à créer l'image à partir d'un Dockerfile appelé docker.collection comme ci-dessous.

$ minikube start --insecure-registry localhost:5000 --memory 4096
$ docker build . -f docker.collection -t localhost:5000/collection:latest -t localhost:5000/collection:dev
$ docker Push localhost:5000/collection
$ cat deployment.yaml | kubectl apply -f -

Le déploiement est créé comme vous le souhaitez, mais les modules ne démarrent pas et le tableau de bord du mini-cube affiche:

Impossible d'extraire l'image "localhost: 5000/collection: dev": erreur rpc: code = Unknown desc = Réponse d'erreur du démon: manifeste pour localhost: 5000/collection: dev not found

Je n'ai aucune raison de croire qu'il y ait eu un problème lors de la création ou de la transmission de l'image, et sur la machine hôte, je peux tirer avec succès ...

$ docker pull localhost:5000/collection:dev
dev: Pulling from collection
Digest: sha256:8becfdd412f0b86ece8335aa5ee1aede75992d17f88739a28da5939eab28fde5
Status: Image is up to date for localhost:5000/collection:dev

Que dois-je vérifier d'autre? Comment obtenir plus de détails sur l'échec?

Débogage supplémentaire

J'ai également vérifié:

  • le noeud minikube peut atteindre localhost:5000:
$ minikube ssh
$ ping localhost:5000
PING localhost:5000 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.126 ms
64 bytes from 127.0.0.1: seq=1 ttl=64 time=0.041 ms
64 bytes from 127.0.0.1: seq=2 ttl=64 time=0.058 ms
^C
--- localhost:5000 ping statistics ---
3 packets transmitted, 3 packets received, 0% packet loss
round-trip min/avg/max = 0.041/0.075/0.126 ms
$ 
  • un run minimal de l'image échoue de la même manière: kubectl run coll-test --image=localhost:5000/collection:dev donne les mêmes événements:
Events:
  Type     Reason     Age               From               Message
  ----     ------     ----              ----               -------
  Normal   Scheduled  24s               default-scheduler  Successfully assigned dev/coll-test-cf4467b8d-8vpdk to minikube
  Normal   BackOff    23s               kubelet, minikube  Back-off pulling image "localhost:5000/collection:dev"
  Warning  Failed     23s               kubelet, minikube  Error: ImagePullBackOff
  Normal   Pulling    7s (x2 over 23s)  kubelet, minikube  Pulling image "localhost:5000/collection:dev"
  Warning  Failed     7s (x2 over 23s)  kubelet, minikube  Failed to pull image "localhost:5000/collection:dev": rpc error: code = Unknown desc = Error response from daemon: manifest for localhost:5000/collection:dev not found
  Warning  Failed     7s (x2 over 23s)  kubelet, minikube  Error: ErrImagePull
  • les entrées pour l'image existent dans le repo:
$ curl http://localhost:5000/v2/_catalog
{"repositories":["collection","foo","bar"]}

Déploiement et Dockerfile

# deployment.yaml
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  namespace: dev
  name: collection
  labels:
    app: collection
spec:
  replicas: 1
  selector:
    matchLabels:
      app: collection
  template:
    metadata:
      labels:
        app: collection
    spec:
      containers:
      - name: collection
        image: "localhost:5000/collection:dev"
        command: ["bash", "./collection_entry.sh"]
        imagePullPolicy: Always
# docker.collection
FROM python:3

WORKDIR /code
COPY . /code/
RUN adduser --system --group --no-create-home celery
RUN mkdir /var/run/celery
RUN mkdir /var/log/celery
RUN chown celery:celery /var/run/celery
RUN chown celery:celery /var/log/celery
RUN chmod 755 /var/run/celery
RUN chmod 755 /var/log/celery

RUN pip3 -q install -r requirements.txt
USER celery

ENTRYPOINT ./collection_entry.sh
6
Ben

1) Vous devez exécuter eval $(minikube docker-env)

2) Construisez l'image avec le démon Docker de Minikube

docker build -t collection .

3) Définissez l'image dans les spécifications du pod comme la balise build - collection

4) Définissez l'imagePullPolicy sur Jamais, sinon Kubernetes essaiera de télécharger l'image.

apiVersion: apps/v1beta2
kind: Deployment
metadata:
  namespace: dev
  name: collection
  labels:
    app: collection
spec:
  replicas: 1
  selector:
    matchLabels:
      app: collection
  template:
    metadata:
      labels:
        app: collection
    spec:
      containers:
      - name: collection
        image: "collection"
        command: ["bash", "./collection_entry.sh"]
        imagePullPolicy: Never
6
A_Suh