K8s 容器不启动 ImagePullBackOff,ErrImagePull
K8s Containers dont start ImagePullBackOff, ErrImagePull
我正在尝试使用 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 仪表板中的错误是
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)
但是我一直收到这个错误。它看不到本地图像存储库,也不会自行下载图像。
我 100% 确定它与 Fedora 上的用户访问有关。但是不知道该怎么做,我已经尝试解决这个问题几天了:(.
请帮忙,谢谢
不知道这是否有帮助:我尝试使用 k3s。镜像拉取成功,但是minikube在Fedora上不兼容
另外...如果我尝试在不使用 sudo 的情况下使用 docker,它不会拉取图像。使用 sudo 它会拉动。
OS 是 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 拉取图像,然后在所有工作节点上执行此操作,然后添加
ImagePullPolicy:IfNotPresent
在你提到图像名称的 yamls 中,然后 k8s 将首先检查它是否存在于机器中,如果存在则直接使用它
请仔细检查您是否输入了错误的图像路径。
ImagePullBackOff 错误发生在镜像路径不正确、网络故障或kubelet 与容器注册中心认证不成功的情况下。 Kubernetes 最初抛出 ErrImagePull 错误,然后在重试几次后“拉回”并安排另一次下载尝试。
无法从注册表中提取图像时出现 ImagePullBackoff 错误。出现该错误的原因可能是找不到映像,或者您的节点没有从注册表中提取的权限。
根据评论,我的建议是使用docker驱动,因为系统已经安装了Docker,是preferred stable driver.
minikube start --driver=docker
您也可以将其设置为默认驱动程序。
minikube config set driver docker
minikube start
不过,这并不能解释为什么它不适用于 podman。
我正在尝试使用 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 仪表板中的错误是
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)
但是我一直收到这个错误。它看不到本地图像存储库,也不会自行下载图像。
我 100% 确定它与 Fedora 上的用户访问有关。但是不知道该怎么做,我已经尝试解决这个问题几天了:(.
请帮忙,谢谢
不知道这是否有帮助:我尝试使用 k3s。镜像拉取成功,但是minikube在Fedora上不兼容
另外...如果我尝试在不使用 sudo 的情况下使用 docker,它不会拉取图像。使用 sudo 它会拉动。
OS 是 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 拉取图像,然后在所有工作节点上执行此操作,然后添加
ImagePullPolicy:IfNotPresent
在你提到图像名称的 yamls 中,然后 k8s 将首先检查它是否存在于机器中,如果存在则直接使用它
请仔细检查您是否输入了错误的图像路径。
ImagePullBackOff 错误发生在镜像路径不正确、网络故障或kubelet 与容器注册中心认证不成功的情况下。 Kubernetes 最初抛出 ErrImagePull 错误,然后在重试几次后“拉回”并安排另一次下载尝试。
无法从注册表中提取图像时出现 ImagePullBackoff 错误。出现该错误的原因可能是找不到映像,或者您的节点没有从注册表中提取的权限。
根据评论,我的建议是使用docker驱动,因为系统已经安装了Docker,是preferred stable driver.
minikube start --driver=docker
您也可以将其设置为默认驱动程序。
minikube config set driver docker
minikube start
不过,这并不能解释为什么它不适用于 podman。