Потяните местное изображение, чтобы запустить стручок в Кубернете

У меня есть следующее изображение, созданное Dockerfile:

REPOSITORY   TAG      IMAGE ID       CREATED       SIZE 
ruby/lab     latest   f1903b1508cb   2 hours ago   729.6 MB

И у меня есть следующий файл YAML:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ruby-deployment
spec:
  replicas: 2
  template:
    metadata:
      labels:
        app: ruby
    spec:
      containers:
      - name: ruby-app
        image: ruby/lab
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 4567

При создании развертывания я получил следующую информацию в модулях:

ruby-deployment-3830038651-sa4ii   0/1       ImagePullBackOff   0          7m
ruby-deployment-3830038651-u1tvc   0/1       ImagePullBackOff   0          7m

И ошибка Failed to pull image "ruby/lab:latest": Error: image ruby/lab not found снизу:

 8m            2m              6       {kubelet minikube}      spec.containers{ruby}   Normal          Pulling         pulling image "ruby/lab:latest"
 8m            2m              6       {kubelet minikube}      spec.containers{ruby}   Warning         Failed          Failed to pull image "ruby/lab:latest": Error: image ruby/lab not found
 8m            2m              6       {kubelet minikube}                              Warning         FailedSync      Error syncing pod, skipping: failed to "StartContainer" for "ruby" with ErrImagePull: "Error: image ruby/lab not found"

Действительно ли для этого нужно иметь реестр в докере? Я просто хочу сделать тест локально и передать мой код/​​репо другу для тестирования

Спасибо

Ответ 1

Вы можете указать своего клиента-докера на демон-версию док-станции VM, запустив

eval $(minikube docker-env)

Затем вы можете создать свой образ в обычном режиме и создать свои ресурсы kubernetes, используя kubectl. Убедитесь, что у вас

imagePullPolicy: IfNotPresent

в ваших спецификациях YAML или JSON.

Кроме того, есть флаг для передачи небезопасных реестров на виртуальную машину minikube. Однако это необходимо указывать при первом создании машины.

minikube start --insecure-registry

Вы также можете прочитать это при использовании частного реестра http://kubernetes.io/docs/user-guide/images/

Ответ 2

Мини-куб AFAIR работает в виртуальной машине, поэтому он не будет видеть изображения, созданные локально на хост-компьютере, но... как указано в https://github.com/kubernetes/minikube/blob/master/docs/reusing_the_docker_daemon. md вы можете использовать eval $(minikube docker-env) для фактического использования демона docker, работающего на minikube, и впредь строить свой образ на докере minikubes и, таким образом, ожидать, что он будет доступен для механизма minikubes k8s без извлечения из внешнего реестра.

Ответ 3

Пожалуйста, обратитесь к документации по изображениям или ответ здесь.

Каждый контейнер в контейнере имеет свой собственный образ. В настоящее время поддерживается только один тип изображения Docker Image. Вы создаете образ Docker и вставляете его в реестр, прежде чем ссылаться на него в модуле Kubernetes. Свойство изображения контейнера поддерживает тот же синтаксис, что и команда docker, включая частные реестры и теги.

Вы можете нажать на общедоступный реестр докеров или использовать собственный приватный репозиторий. Возможно, есть способ сделать minikube получить локально созданные изображения, но, безусловно, будет проще нажать изображение докера в реестр.

Ответ 4

Docker pull, вытягивает все изображения вручную в каждом узле или запускает DaemonSet, чтобы вытянуть все изображения