У меня есть несколько изображений докеров, с которыми я хочу использовать minikube
. Я не хочу сначала загружать, а затем загружать то же изображение, а не просто использовать локальное изображение напрямую. Как мне это сделать?
Вещи, которые я пробовал:
1. Я пытался запустить эти команды (отдельно, удаляя экземпляры minikube оба раза и начиная заново)
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989
kubectl run hdfs --image=fluxcapacitor/hdfs:latest --port=8989 imagePullPolicy=Never
Вывод :
NAME READY STATUS RESTARTS AGE
hdfs-2425930030-q0sdl 0/1 ContainerCreating 0 10m
Он просто застревает в каком-то состоянии, но никогда не достигает состояния готовности.
2. Я попытался создать реестр и затем поместить в него изображения, но это тоже не сработало. Возможно, я сделал это неправильно, но я не могу найти надлежащие инструкции для выполнения этой задачи.
Пожалуйста, предоставьте инструкции по использованию локальных образов докера в локальном экземпляре kubernetes.
ОС: Ubuntu 16.04
Docker: Docker версия 1.13.1, сборка 092cba3
Kubernetes:
Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.3", GitCommit:"029c3a408176b55c30846f0faedf56aae5992e9b", GitTreeState:"clean", BuildDate:"2017-02-15T06:40:50Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"08e099554f3c31f6e6f07b448ab3ed78d0520507", GitTreeState:"clean", BuildDate:"1970-01-01T00:00:00Z", GoVersion:"go1.7.1", Compiler:"gc", Platform:"linux/amd64"}
Если бы кто-то мог помочь мне получить решение, которое использует docker-compose для этого, это было бы здорово. Спасибо.
Редактировать :
Изображения загружены в eval $(minikube docker-env
:
REPOSITORY TAG IMAGE ID CREATED SIZE
fluxcapacitor/jupyterhub latest e5175fb26522 4 weeks ago 9.59 GB
fluxcapacitor/zeppelin latest fe4bc823e57d 4 weeks ago 4.12 GB
fluxcapacitor/prediction-pmml latest cae5b2d9835b 4 weeks ago 973 MB
fluxcapacitor/scheduler-airflow latest 95adfd56f656 4 weeks ago 8.89 GB
fluxcapacitor/loadtest latest 6a777ab6167c 5 weeks ago 899 MB
fluxcapacitor/hdfs latest 00fa0ed0064b 6 weeks ago 1.16 GB
fluxcapacitor/sql-mysql latest 804137671a8c 7 weeks ago 679 MB
fluxcapacitor/metastore-1.2.1 latest ea7ce8c5048f 7 weeks ago 1.35 GB
fluxcapacitor/cassandra latest 3cb5ff117283 7 weeks ago 953 MB
fluxcapacitor/apachespark-worker-2.0.1 latest 14ee3e4e337c 7 weeks ago 3.74 GB
fluxcapacitor/apachespark-master-2.0.1 latest fe60b42d54e5 7 weeks ago 3.72 GB
fluxcapacitor/package-java-openjdk-1.8 latest 1db08965289d 7 weeks ago 841 MB
gcr.io/google_containers/kubernetes-dashboard-amd64 v1.5.1 1180413103fd 7 weeks ago 104 MB
fluxcapacitor/stream-kafka-0.10 latest f67750239f4d 2 months ago 1.14 GB
fluxcapacitor/pipeline latest f6afd6c5745b 2 months ago 11.2 GB
gcr.io/google-containers/kube-addon-manager v6.1 59e1315aa5ff 3 months ago 59.4 MB
gcr.io/google_containers/kubedns-amd64 1.9 26cf1ed9b144 3 months ago 47 MB
gcr.io/google_containers/kube-dnsmasq-amd64 1.4 3ec65756a89b 5 months ago 5.13 MB
gcr.io/google_containers/exechealthz-amd64 1.2 93a43bfb39bf 5 months ago 8.37 MB
gcr.io/google_containers/pause-amd64
источник
minikube start --disk-size 100g
. Другое решение - удалить старые изображения с помощьюdocker images
иdocker rmi
.eval $(minikube docker-env)
после закрытия терминала, в котором вы работаете, ДО того, как вы попытаетесь перестроить образы ... просто прожег 6 часов, борясь с изображением, которое не обновлялось в мини-кубе ... похоже, пакет не обновлялся .. на самом деле просто не обновляется изображение, на которое ссылался миникуб.IfNotPresent
означает, что все, что нам нужно сделать, это установить переменные среды.eval $(minikube docker-env -u)
Что сработало для меня, основываясь на решении @svenwltr:
источник
Этот ответ не ограничивается миникубе!
Используйте локальный реестр:
Теперь пометьте свое изображение правильно:
Обратите внимание, что localhost должен быть изменен на DNS-имя компьютера, на котором запущен контейнер реестра.
Теперь поместите ваше изображение в локальный реестр:
Вы должны быть в состоянии вытащить его обратно:
Теперь измените ваш файл yaml, чтобы использовать локальный реестр.
Подумайте о подключении тома в соответствующем месте, чтобы сохранить образы в реестре.
Обновить:
как сказал Эли, вам нужно добавить локальный реестр как небезопасный, чтобы использовать http (может не применяться при использовании localhost, но применяется при использовании локального имени хоста)
Не используйте http в производстве, приложите усилия для обеспечения безопасности.
источник
<registryIP>:5000/ubuntu
Добавление к ответу @Farhad на основе этого ответа ,
Это шаги для настройки локального реестра.
Настройка в локальной машине
Настройте имя хоста на локальном компьютере: отредактируйте,
/etc/hosts
чтобы добавить эту строкуТеперь запустите локальный реестр (удалите -d, чтобы запустить не-демон режим):
Теперь пометьте свое изображение правильно:
Теперь поместите ваше изображение в локальный реестр:
Убедитесь, что изображение помещено:
Настройка в миникубе
SSH в миникубе с:
minukube ssh
изменить,
/etc/hosts
чтобы добавить эту строкуПодтвердите доступ:
Теперь, если вы попытаетесь вытащить, у вас может появиться ошибка доступа http.
Включить небезопасный доступ :
Если вы всегда планируете использовать minkube с этой локальной настройкой, то создайте мини-куб для использования незащищенного реестра по умолчанию (не будет работать на существующем кластере).
иначе следуйте ниже шагов:
отредактируйте файл обслуживания докера: получите путь от
systemctl status docker
может быть :
добавить этот текст (замените 192.168.1.4 на ваш ip)
к этой линии
попробуйте потянуть:
Теперь измените ваш файл yaml, чтобы использовать локальный реестр.
в
Не используйте http в производстве, приложите усилия для обеспечения безопасности.
источник
В дополнение к принятому ответу вы также можете достичь того, чего изначально хотели (создавая развертывание с помощью
run
команды), с помощью следующей команды:Я нашел информацию о генераторе на форуме Kubernetes-dev:
https://groups.google.com/forum/#!topic/kubernetes-dev/YfvWuFr_XOM
источник
Один из подходов состоит в том, чтобы создать изображение локально, а затем выполнить:
minikube docker-env
может не вернуть правильную информацию под другим пользователем / sudo. Вместо этого вы можете запуститьsudo -u yourUsername minikube docker-env
.Он должен вернуть что-то вроде:
источник
docker save imageNameGoesHere > pv | (eval $(minikube docker-env) && docker load)
docker save imageNameGoesHere | (eval $(minikube docker-env) && docker load)
работал для меняЕсли кто-то хочет вернуться в локальную среду после установки окружения minikube, используйте следующую команду.
источник
Из документов Кубернеца:
https://kubernetes.io/docs/concepts/containers/images/#updating-images
Или читайте по-другому: использование тега: latest заставляет изображения всегда извлекаться. Если вы используете
eval $(minikube docker-env)
как упомянуто выше, то либо не используйте какой-либо тег, либо присвойте тег своему локальному изображению, вы можете избежать Kubernetes, пытающегося принудительно вытянуть его.источник
Теперь есть дополнение к реестру Minikube, это, пожалуй, самый простой способ. Вот как это использовать: https://minikube.sigs.k8s.io/docs/tasks/registry/insecure/
Обратите внимание, что у меня были проблемы с DNS, возможно, это ошибка.
источник
Более простой метод, который отвечает на первоначальный вопрос «Как использовать изображения локального докера с Minikube?», - это сохранить изображение в tar-файл и загрузить его в Minikube:
Затем запуск образа включает в себя команду, подобную следующей. Обязательно включите параметр --image-pull-policy = Never.
источник
docker save
сsudo
, а затем установить ,sudo chmod 664 my-image.tar
чтобы сделать его доступным для моего текущего пользователя.Чтобы добавить к предыдущим ответам, если у вас есть тарбол-образ, вы можете просто загрузить его в свой локальный докер-набор изображений.
docker image load -i /path/image.tar
Пожалуйста, не забудьте запустить его послеeval $(minikube docker-env)
, так как minikube не делится изображениями с локально установленным механизмом Docker.источник
Другие ответы предполагают, что вы используете minikube с VM, поэтому ваши локальные образы не доступны из minikube VM.
В случае, если вы используете Minikube с
--vm-driver=none
, вы можете легко использовать локальные изображения, установивimage_pull_policy
никогда:или установка
imagePullPolicy
поля для картеров в соответствующих.yaml
манифестах.источник
Одной из идей было бы сохранить образ докера локально, а затем загрузить его в мини-куб следующим образом:
Допустим, например, у вас уже есть изображение puckel / docker-airflow.
Сохранить это изображение на локальный диск -
docker save puckel/docker-airflow > puckel_docker_airflow.tar
Теперь войдите в мини-куб докер env -
eval $(minikube docker-env)
Загрузить это локально сохраненное изображение -
docker load < puckel_docker_airflow.tar
Это так просто, и это работает как шарм.
источник
Set the imagePullPolicy to Never
. Если ваше изображение помечено, например, адресом,us.icr.io/mydiv/my-service:v0.0.1
то при развертывании попытка удаленного извлечения этого образа будет удалена. Поскольку вы уже скопировали изображение вручную, вам нужно запретить k8s извлекать изображение из адреса (реестра контейнера), к которому он не может получить доступ.что если бы вы могли просто запустить k8s в vm докера? Для более поздних версий Docker Desktop есть встроенная поддержка ... вам просто нужно включить эту поддержку.
https://www.docker.com/blog/kubernetes-is-now-available-in-docker-desktop-stable-channel/ https://www.docker.com/blog/docker-windows-desktop-now- kubernetes /
как я это узнал:
Читая документы для helm, они дают вам краткое руководство по установке minikube. это руководство устанавливает minikube в виртуальной машине, которая отличается от докера.
поэтому, когда пришло время устанавливать мои схемы рулевого управления, я не мог заставить helm / k8s извлекать изображения, которые я создал, используя докер. вот как я пришел сюда на этот вопрос.
так что ... если вы можете жить с любой версией k8s, поставляемой с рабочим столом Docker, и вы можете жить с ней, работающей с любым приложением vm docker, то, возможно, это решение немного проще, чем некоторые другие.
Отказ от ответственности: не уверен, как переключение между контейнерами Windows / Linux может повлиять на что-либо.
источник
Существует один эссе и эффективный способ перенести ваше локальное изображение Docker непосредственно в мини-куб, что сэкономит время на повторную сборку изображений в мини-кубе.
Подробнее здесь
Все возможные способы отправки изображений в миникуб упоминаются здесь: https://minikube.sigs.k8s.io/docs/handbook/pushing/
источник
вы можете либо повторно использовать оболочку докера, или
eval $(minikube docker-env)
, наоборот, использоватьdocker save | docker load
все оболочки.источник
на самом деле, что здесь происходит, ваш Minikube не может распознать ваш демон docker, поскольку он является независимой службой. Сначала вы должны установить свою среду minikube-docker, используя команду ниже для проверки
Если вы запустите команду ниже, она покажет, где ваш мини-куб ищет докер.
Вы должны снова построить образы после установки minikube docker-env, иначе это не удастся.
источник
Я нахожу этот метод в ClickHouse Operator Build From Sources, и это помогает и спасает мою жизнь!
источник
шаги для запуска локальных образов докера в kubernetes
1. eval $ (minikube -p minikube docker-env)
2. в файле артефакта, в разделе спецификации -> контейнеры,
добавьте imagePullPolicy: IfNotPresent
или imagePullPolicy: Never
3. затем запустить
kubectl create -f <filename>
источник
это работает
источник