Я пытаюсь запустить пару контейнеров локально, используя k8s, но создание контейнера остановлено из-за ИзображениеPullBackOff, ErrImagePull. Ямл в порядке, проверял на другой рабочей станции. И я могу вытащить изображения, используя обычный докер. Но это не работает в среде k8s/minikube.
Журналы контейнеров ошибок
Error from server (BadRequest): container "mongo-express" in pod "mongoexpress-deployment-bd7cf697b-nc4h5" is waiting to start: trying and failing to pull image
Ошибка в панели управления minikube
Failed to pull image "docker.io/mongo": rpc error: code = Unknown desc = Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Я попытался вытащить изображение в свой локальный кеш докера и запустить
eval $(minikube docker-env)
Но я продолжаю получать эту ошибку. Он не видит локального репозитория изображений и не загружает образ сам по себе.
Я на 100% уверен, что это как-то связано с доступом пользователей к Fedora. Но понятия не имею, что делать, и я пытался исправить это пару дней :(.
Пожалуйста, помогите, спасибо
Не знаю, поможет ли это: я пытался использовать к3с. Загрузка образа прошла успешно, но minikube не совместим с ним в Fedora.
Кроме того... Если я попытаюсь использовать докер без sudo, он не загрузит изображения. С sudo тянет.
ОС — Fedora, в качестве драйвера я использую docker, kubernetes, minikube, podman.
- linux version
NAME = "Fedora Linux"
VERSION = "35 (Workstation Edition)"
- kubectl version
Client Version: version.Info{Major:"1", Minor:"23", GitVersion:"v1.23.5",
- docker version
Version: 20.10.12
- minikube version
minikube version: v1.25.2
Я пытаюсь запустить локально этот файл yaml
apiVersion: v1
kind: Secret
metadata:
name: mongodb-secret
type: Opaque
data:
mongo-root-username: dXNlcm5hbWU=
mongo-root-password: cGFzc3dvcmQ=
---
apiVersion: v1
kind: ConfigMap
metadata:
name: mongodb-configmap
data:
database_url: mongodb-service
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongoexpress-deployment
labels:
app: mongoexpress
spec:
replicas: 1
selector:
matchLabels:
app: mongoexpress
template:
metadata:
labels:
app: mongoexpress
spec:
containers:
- name: mongo-express
image: mongo-express
ports:
- containerPort: 8081
env:
- name: ME_CONFIG_MONGODB_ADMINUSERNAME
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-username
- name: ME_CONFIG_MONGODB_ADMINPASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-password
- name: ME_CONFIG_MONGODB_SERVER
valueFrom:
configMapKeyRef:
name: mongodb-configmap
key: database_url
- name: WHATEVER
value: Someconfig
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: mongodb-deployment
labels:
app: mongodb
spec:
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongodb
image: mongo
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-username
- name: MONGO_INITDB_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mongodb-secret
key: mongo-root-password
---
apiVersion: v1
kind: Service
metadata:
name: mongodb-service
spec:
selector:
app: mongodb
ports:
- protocol: TCP
port: 27017
targetPort: 27017
---
apiVersion: v1
kind: Service
metadata:
name: mongoexpress-service
spec:
selector:
app: mongoexpress-deployment
type: LoadBalancer
ports:
- protocol: TCP
port: 8081
targetPort: 8081
nodePort: 30000
Спасибо за предложение. Пробовал пару раз, но не помогает. Я уверен, что это что-то связанное с доступом пользователей, но недостаточно знаю Linux.
что вы подразумеваете под доступом пользователя?
Не знаю много линукса... но. Если я запускаю команду docker pull с помощью sudo, мне удается вытащить образ. Если я запускаю без него, докер просто зависает и не тянет. Приборная панель Minikube выдает эту ошибку. Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
Поэтому, когда я сказал user access
, я имел в виду, что некоторые сервисы не имеют доступа к чему-либо. И я не могу понять, что
как вы его запускаете? Если вы запускаете его на виртуальной машине, это может быть проблема с сетью, связанная с виртуальной машиной. Ошибка не похожа на что-то, связанное с разрешением, и в миникубе часто задаваемые вопросы говорится, что он работает от имени пользователя root.
Это свежеустановленная Fedora. на рабочей станции Не виртуальная машина.
Я думаю, вы бы использовали либо докер, либо виртуальную машину в качестве драйвера. Вы уверены, что у вас есть none
из этого списка здесь? minikube.sigs.k8s.io/docs/drivers
Извините, я неправильно понял вопрос. Я использую podman
Привет, @TheFool. Большое спасибо, но не трать на это время, Идк. Что-нибудь придумаю, спасибо en.wikipedia.org/wiki/The_Fool_(Карта_Таро)
Я все равно не знаю миникубе. Так что не уверен, что смогу помочь. Может быть, попробуйте с драйвером докера, так как у вас, похоже, установлен докер. Но да, удачи, я думаю.
@TheFool Браво. Вот и все. Я такой глупый, я следовал некоторым инструкциям, и он сказал запустить миникуб с podman. После запуска minikube start --driver=docker
работает. Если вы хотите добавить ответ, и я отмечу его как правильный
Это своего рода обходной путь для проблемы: если вы можете вытащить образ с помощью docker pull, сделайте это на всех рабочих узлах, а затем добавьте
ImagePullPolicy:IfNotPresent
внутри yamls, где вы упоминаете имя образа, тогда k8s сначала проверит, присутствует ли он внутри машины, и если да, то напрямую его использует
Спасибо, это хороший совет. В конце концов, я использовал неправильный драйвер для minikube. Я использовал podman вместо докера. Так было сказано в учебнике.
Пожалуйста, дважды проверьте, не ошиблись ли вы в пути к изображению.
Ошибка ImagePullBackOff возникает, когда указан неверный путь к образу, происходит сбой сети или kubelet не может пройти аутентификацию в реестре контейнеров. Kubernetes сначала выдает ошибку ErrImagePull, а затем, после нескольких повторных попыток, «отступает» и планирует еще одну попытку загрузки.
Ошибка ImagePullBackoff, когда не удается извлечь образ из реестра. Ошибка может возникнуть из-за невозможности найти образ или из-за того, что у ваших узлов нет разрешений на извлечение из реестра.
Я понимаю что ты имеешь в виду. Я тестировал этот yaml на других рабочих станциях, и он работал.
Основываясь на комментариях, я предлагаю использовать драйвер Docker, так как Docker был установлен в системе и является предпочтительный стабильный драйвер.
minikube start --driver=docker
Вы также можете установить его в качестве драйвера по умолчанию.
minikube config set driver docker
minikube start
Однако это не объясняет, почему это не работает с podman.
возможно, попробуйте добавить реестр к имени образа
docker.io/mongo-express