Docker для Mac (Edge) - Kubernetes - справочное местное изображение

Я использую Docker для Mac 18.05.0-CE-Mac66 (24545) (край) с поддержкой Kubernetes, и я борюсь с созданием развертывания Kubernetes со ссылкой на локально созданный образ.

Вывод docker images:

REPOSITORY  TAG     IMAGE 
test        latest  2c3bdb36a5ed

Мой развертывание. Yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloworld-deployment
spec:
  selector:
    matchLabels:
      app: helloworld
  replicas: 1
  template:
    metadata:
      labels:
        app: helloworld
    spec:
      containers:
      - name: aaa
        image: test:latest
        ports:
        - containerPort: 8080

Когда я запускаю kubectl apply -f deplyment.yaml создаются, но:

helloworld-deployment-764b8b85d8-2c4kl   0/1       ImagePullBackOff   0          
helloworld-deployment-764b8b85d8-rzq7l   0/1       ImagePullBackOff   0

Опишите один из этих стручков дает:

  Normal   Scheduled              20s               default-scheduler            Successfully assigned helloworld-deployment-79f66d97c6-7tj2x to docker-for-desktop
  Normal   SuccessfulMountVolume  19s               kubelet, docker-for-desktop  MountVolume.SetUp succeeded for volume "default-token-72f44"
  Normal   BackOff                16s               kubelet, docker-for-desktop  Back-off pulling image "test:latest"
  Warning  Failed                 16s               kubelet, docker-for-desktop  Error: ImagePullBackOff
  Normal   Pulling                4s (x2 over 19s)  kubelet, docker-for-desktop  pulling image "test:latest"
  Warning  Failed                 2s (x2 over 17s)  kubelet, docker-for-desktop  Failed to pull image "test:latest": rpc error: code = Unknown desc = Error response from daemon: pull access denied for test, repository does not exist or may require 'docker login'
  Warning  Failed                 2s (x2 over 17s)  kubelet, docker-for-desktop  Error: ErrImagePull

Что интересно, если я пытаюсь запустить какое-то изображение, размещенное на dockerhub, то все в порядке, я также попытался использовать скаффолд, и это также работает как шарм...

Я вижу некоторые похожие проблемы, касающиеся minikube, где решение состоит в том, чтобы использовать Minikube Docker Deamon для создания изображений, чтобы на них можно было ссылаться из кластера kubernetes. Я хотел бы избежать настройки локального репо, но как я могу заставить его работать с Docker Edge Kubernetes?

Ответ 1

Я смог запустить локальное изображение, установив для imagePullPolicy значение Never.

Например:

apiVersion: v1
kind: Pod
metadata:
  name: local-image-test
spec:
  containers:
  - name: local-image-container
    image: local-image:latest
    imagePullPolicy: Never

(Закажите https://github.com/kubernetes/kubernetes/issues/1293#issuecomment-357326426 для этого решения)

Ответ 2

Используйте тегированную версию изображения, а не последнюю, потому что если вы отправляете изображения Docker в производственную среду, вы должны просто игнорировать последний тег. Не используйте его. Не искушайте его. Его легко посмотреть на это и подумать, что ваш сценарий развертывания должен просто потянуть "новейший", и ваш процесс сборки обеспечит его правильность.

Ответ 3

Помимо комментариев и ответов techtrainer, я хотел бы привести несколько примеров того, как это сделать.

Главное правило. Вы должны использовать версию изображений тегов, а не latest. С тегами Docker, чем конкретнее вы можете получить, тем лучше. Уточните, чтобы избежать использования неправильного изображения. Подумайте об этом, если вы не хотите, чтобы ваши коллеги или другие пользователи Docker вытаскивали изображения и понятия не имели, насколько они актуальны. Уточните, чтобы избежать таких проблем.

docker tag IMAGE ID image/TAG:version.d.m.y

Для лучшего управления вашими изображениями вы должны иметь разумное соглашение об именах. Я предпочитаю использовать сцену, версию и дату создания изображения. Например:

docker tag 113a43faa138 ubuntu/prod:v1.8.6.2018

Это означает этап производства, версия 1, созданная 8 июня 2018 года.

И это все. Ваша версия доступна, и именование понятнее для вас и других пользователей этого изображения.