我尝试使用k8s在本地启动几个容器,但由于ImagePullBackOff,ErrImagePull,容器创建停止。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
型
4条答案
按热度按时间6ie5vjzr1#
根据评论,我的建议是使用Docker驱动程序,因为Docker已经安装在系统中,并且是preferred stable driver。
字符串
您也可以将其设置为默认驱动程序。
型
不过,这并不能解释为什么它对波德曼不起作用。
6vl6ewon2#
这是解决这个问题的一种方法,如果你可以使用docker pull拉取图像,然后在所有的工作节点上做,然后添加一个
ImagePullPolicy:IfNotPresent
在yamls中你提到的图像名称,然后k8s将首先检查它是否存在于机器内,如果是,然后直接使用它
3duebb1j3#
请仔细检查是否输入了图片的路径。
当镜像路径不正确、网络故障或kubelet未成功通过容器注册表验证时,会发生ImagePullBackOff错误。Kubernetes最初会抛出ErrImagePull错误,然后在重试几次后,“拉回”并安排另一次下载尝试。
无法从注册表中提取映像时出现ImagePullBackoff错误。发生此错误的原因可能是找不到映像或您的节点没有从注册表中提取映像的权限。
34gzjxbg4#
你必须做三件事,然后重新部署。
minikube image load <your-image:tag>
1.请参阅,防止集群不必要地下载映像。通过将pullpolicy更改为
Never
或IfNotPresent
1.仅使用默认的docker上下文,因为这不需要访问凭据,除非通过此命令
docker context use default
显式设置