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 года.
И это все. Ваша версия доступна, и именование понятнее для вас и других пользователей этого изображения.