web-dev-qa-db-fra.com

Comment puis-je utiliser une image Docker locale dans Kubernetes?

J'ai ce Dockerfile de base:

FROM nginx
RUN apt-get -y update && apt install -y curl

Dans le nœud maître de mon cluster Kubernetes, je crée cette image:

docker build -t cnginx:v1 . 

docker images montre que l'image a été correctement générée:

REPOSITORY                                 TAG                 IMAGE ID            CREATED             SIZE
cgninx                                     v1                  d3b1b19d069e        39 minutes ago      141MB

J'utilise ce déploiement référençant cette image personnalisée:

apiVersion: apps/v1 # for versions before 1.9.0 use apps/v1beta2
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2 
  template: 
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: cnginx
        image: cnginx:v1
        imagePullPolicy: Never
        ports:
        - containerPort: 80
      nodeSelector:
        nodetype: webserver

Cependant l'image n'est pas trouvée:

NAME                                READY     STATUS              RESTARTS   AGE
nginx-deployment-7dd98bd746-lw6tp   0/1       ErrImageNeverPull   0          4s
nginx-deployment-7dd98bd746-szr9n   0/1       ErrImageNeverPull   0          4s

Décrire les informations sur le pod:

Events:
  Type     Reason                 Age              From                Message
  ----     ------                 ----             ----                -------
  Normal   Scheduled              1m               default-scheduler   Successfully assigned nginx-deployment-7dd98bd746-szr9n to kubenode2
  Normal   SuccessfulMountVolume  1m               kubelet, kubenode2  MountVolume.SetUp succeeded for volume "default-token-bpbpl"
  Warning  ErrImageNeverPull      9s (x9 over 1m)  kubelet, kubenode2  Container image "cnginx:v1" is not present with pull policy of Never
  Warning  Failed                 9s (x9 over 1m)  kubelet, kubenode2  Error: ErrImageNeverPull

J'ai également essayé d'utiliser l'imagePullPolicy par défaut, et d'autres choses telles que le marquage de l'image avec la dernière ...

Alors, comment puis-je faire en sorte que Kubernetes utilise une image Docker générée localement?

7
codependent

Vos POD sont planifiés sur vos nœuds de travail. Puisque vous définissez imagePullPolicy sur Never, vous devez mettre votre image à la disposition des deux nœuds. En d'autres termes, vous devez le créer sur les deux nœuds comme vous l'avez fait sur le maître.

En tant que sidenote, il serait probablement plus facile à long terme si vous configurez un registre de docker personnalisé et y envoyez vos images.

6
whites11