Контейнеры K8s не запускаются ImagePullBackOff, ErrImagePull

Я пытаюсь запустить пару контейнеров локально, используя 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

возможно, попробуйте добавить реестр к имени образа docker.io/mongo-express

The Fool 02.04.2022 14:38

Спасибо за предложение. Пробовал пару раз, но не помогает. Я уверен, что это что-то связанное с доступом пользователей, но недостаточно знаю Linux.

djulb 02.04.2022 14:41

что вы подразумеваете под доступом пользователя?

The Fool 02.04.2022 14:42

Не знаю много линукса... но. Если я запускаю команду 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, я имел в виду, что некоторые сервисы не имеют доступа к чему-либо. И я не могу понять, что

djulb 02.04.2022 14:46

как вы его запускаете? Если вы запускаете его на виртуальной машине, это может быть проблема с сетью, связанная с виртуальной машиной. Ошибка не похожа на что-то, связанное с разрешением, и в миникубе часто задаваемые вопросы говорится, что он работает от имени пользователя root.

The Fool 02.04.2022 14:56

Это свежеустановленная Fedora. на рабочей станции Не виртуальная машина.

djulb 02.04.2022 15:00

Я думаю, вы бы использовали либо докер, либо виртуальную машину в качестве драйвера. Вы уверены, что у вас есть none из этого списка здесь? minikube.sigs.k8s.io/docs/drivers

The Fool 02.04.2022 15:09

Извините, я неправильно понял вопрос. Я использую podman

djulb 02.04.2022 15:11

Привет, @TheFool. Большое спасибо, но не трать на это время, Идк. Что-нибудь придумаю, спасибо en.wikipedia.org/wiki/The_Fool_(Карта_Таро)

djulb 02.04.2022 15:26

Я все равно не знаю миникубе. Так что не уверен, что смогу помочь. Может быть, попробуйте с драйвером докера, так как у вас, похоже, установлен докер. Но да, удачи, я думаю.

The Fool 02.04.2022 15:35

@TheFool Браво. Вот и все. Я такой глупый, я следовал некоторым инструкциям, и он сказал запустить миникуб с podman. После запуска minikube start --driver=docker работает. Если вы хотите добавить ответ, и я отмечу его как правильный

djulb 02.04.2022 15:52
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
1
11
63
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это своего рода обходной путь для проблемы: если вы можете вытащить образ с помощью docker pull, сделайте это на всех рабочих узлах, а затем добавьте

ImagePullPolicy:IfNotPresent

внутри yamls, где вы упоминаете имя образа, тогда k8s сначала проверит, присутствует ли он внутри машины, и если да, то напрямую его использует

Спасибо, это хороший совет. В конце концов, я использовал неправильный драйвер для minikube. Я использовал podman вместо докера. Так было сказано в учебнике.

djulb 02.04.2022 15:54

Пожалуйста, дважды проверьте, не ошиблись ли вы в пути к изображению.

Ошибка ImagePullBackOff возникает, когда указан неверный путь к образу, происходит сбой сети или kubelet не может пройти аутентификацию в реестре контейнеров. Kubernetes сначала выдает ошибку ErrImagePull, а затем, после нескольких повторных попыток, «отступает» и планирует еще одну попытку загрузки.

Ошибка ImagePullBackoff, когда не удается извлечь образ из реестра. Ошибка может возникнуть из-за невозможности найти образ или из-за того, что у ваших узлов нет разрешений на извлечение из реестра.

Я понимаю что ты имеешь в виду. Я тестировал этот yaml на других рабочих станциях, и он работал.

djulb 02.04.2022 15:35
Ответ принят как подходящий

Основываясь на комментариях, я предлагаю использовать драйвер Docker, так как Docker был установлен в системе и является предпочтительный стабильный драйвер.

minikube start --driver=docker

Вы также можете установить его в качестве драйвера по умолчанию.

minikube config set driver docker
minikube start

Однако это не объясняет, почему это не работает с podman.

Другие вопросы по теме