Я пытаюсь запустить некоторые образы докеров в Kubernetes.
докер образы
master* $ docker images [15:16:49]
REPOSITORY TAG IMAGE ID CREATED SIZE
usm latest 4dd5245393bf About an hour ago 158MB
kuard latest 497961f486c7 4 days ago 22.9MB
докер-контейнер
master* $ docker ps [15:21:40]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a46850d28303 usm "/docker-entrypoint.…" About an hour ago Up About an hour 0.0.0.0:6061->80/tcp, :::6061->80/tcp usm
88471e086486 gcr.io/k8s-minikube/kicbase:v0.0.32 "/usr/local/bin/entr…" 2 days ago Up 2 hours 127.0.0.1:49157->22/tcp, 127.0.0.1:49156->2376/tcp, 127.0.0.1:49155->5000/tcp, 127.0.0.1:49154->8443/tcp, 127.0.0.1:49153->32443/tcp minikube
Докерфайл
FROM nginx
COPY ./dist /usr/share/nginx/html
EXPOSE 80
куб версия
master* $ minikube version [15:37:13]
minikube version: v1.26.0
commit: f4b412861bb746be73053c9f6d2895f12cf78565
Когда я запускаю kubectl run mypod --image=usm
, я получаю ErrImagePull
Как запустить модуль с локальным образом докера?
master* $ kubectl run mypod --image=usm
pod/mypod created
master* $ kubectl get pods [15:07:49]
NAME READY STATUS RESTARTS AGE
mypod 0/1 ErrImagePull 0 6s
Я пытаюсь установить imagePullPolicy никогда
apiVersion: v1
kind: Pod
metadata:
name: mypod
spec:
containers:
- image: usm
imagePullPolicy: Never
name: mypod
ports:
- containerPort: 80
name: http
protocol: TCP
master* $ kubectl apply -f kube-pod-usm.yaml [15:55:39]
pod/mypod created
master* $ kubectl get pods [15:55:54]
NAME READY STATUS RESTARTS AGE
mypod 0/1 ErrImageNeverPull 0 42s
Когда кластер Kubernetes создает новое развертывание или обновляет существующее развертывание, ему необходимо получить образ. Это делается через процесс kubelet на каждом пользовательском узле. Чтобы кублеты успешно извлекли этот образ, они должны быть доступны со всех узлов в кластере, которые соответствуют запросу планирования.
Отредактируйте спецификацию модуля и укажите правильный реестр.
Если вы установите для политики получения изображений значение «Никогда»: kubelet не пытается получить изображение. Если образ каким-то образом уже присутствует локально (в локальном реестре Kubernetes), kubelet пытается запустить контейнер; в противном случае запуск невозможен.
Вам нужно, чтобы это изображение было где-то доступно. Обычно это делается через реестр, но для локальной разработки вы можете просто загрузить свой локальный образ в свой кластер minikukbe с помощью следующей команды:
minikube image load image:tag
Вы также можете проверить minikube docker-env
, который позволяет простым способом указать ваш терминальный docker-cli на докер внутри minikube.