kubernetes K8s容器不启动ImagePullBackOff,错误ImagePull

lmvvr0a8  于 12个月前  发布在  Kubernetes
关注(0)|答案(4)|浏览(171)

我尝试使用k8s在本地启动几个容器,但由于ImagePullBackOffErrImagePull,容器创建停止。yaml很好,在另一个工作站上测试了它。我可以使用常规的docker拉取图像。但在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 Jmeter 板中的错误是

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)


我试着把镜像拉到本地Docker缓存中,

eval $(minikube docker-env)


但是我一直得到这个错误。它没有看到本Map像存储库,它没有自己下载图像。
我100%确定这与Fedora上的用户访问有关。但我不知道该怎么办,我已经试着修复这个问题几天了:(。
请帮帮忙,谢谢
不知道这是否有帮助:我尝试使用k3s。图像拉取是成功的,但minikube不兼容它在Fedora上。
另外.
操作系统是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

6ie5vjzr

6ie5vjzr1#

根据评论,我的建议是使用Docker驱动程序,因为Docker已经安装在系统中,并且是preferred stable driver

minikube start --driver=docker

字符串
您也可以将其设置为默认驱动程序。

minikube config set driver docker
minikube start


不过,这并不能解释为什么它对波德曼不起作用。

6vl6ewon

6vl6ewon2#

这是解决这个问题的一种方法,如果你可以使用docker pull拉取图像,然后在所有的工作节点上做,然后添加一个
ImagePullPolicy:IfNotPresent
在yamls中你提到的图像名称,然后k8s将首先检查它是否存在于机器内,如果是,然后直接使用它

3duebb1j

3duebb1j3#

请仔细检查是否输入了图片的路径。
当镜像路径不正确、网络故障或kubelet未成功通过容器注册表验证时,会发生ImagePullBackOff错误。Kubernetes最初会抛出ErrImagePull错误,然后在重试几次后,“拉回”并安排另一次下载尝试。
无法从注册表中提取映像时出现ImagePullBackoff错误。发生此错误的原因可能是找不到映像或您的节点没有从注册表中提取映像的权限。

34gzjxbg

34gzjxbg4#

你必须做三件事,然后重新部署。

  1. Minikube运行在自己独立的虚拟机上,所以它不会直接使用http/s调用拉取镜像,除非你单独上传你的镜像到本地或公共云中的某个地方的提升仓库中,并秘密提供它的访问凭证。然而,minikube提供了一个命令行实用程序来从本地加载镜像。minikube image load <your-image:tag>
    1.请参阅,防止集群不必要地下载映像。通过将pullpolicy更改为NeverIfNotPresent
    1.仅使用默认的docker上下文,因为这不需要访问凭据,除非通过此命令docker context use default显式设置

相关问题