无法在minikube中拉取任何镜像。

5

我正在使用 minikubehyperkit 驱动程序在 macOS 上运行:minikube start --driver=hyperkit

一切似乎都没问题...

使用 minikube status 命令可以查看状态:

minikube
type: Control Plane
host: Running
kubelet: Running
apiserver: Running
kubeconfig: Configured

使用minikube version命令:

minikube version: v1.24.0

使用kubectl version命令:

Client Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.4", GitCommit:"b695d79d4f967c403a96986f1750a35eb75e75f1", GitTreeState:"clean", BuildDate:"2021-11-17T15:48:33Z", GoVersion:"go1.16.10", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"22", GitVersion:"v1.22.3", GitCommit:"c92036820499fedefec0f847e2054d824aea6cd1", GitTreeState:"clean", BuildDate:"2021-10-27T18:35:25Z", GoVersion:"go1.16.9", Compiler:"gc", Platform:"linux/amd64"}

同时使用kubectl get no命令:

NAME       STATUS   ROLES                  AGE   VERSION
minikube   Ready    control-plane,master   13m   v1.22.3

我的问题是,当我部署任何东西时,它都不会拉取任何镜像...

例如:

kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4

接着执行命令 kubectl get pods

NAME                              READY   STATUS             RESTARTS   AGE
hello-minikube-6ddfcc9757-nfc64   0/1     ImagePullBackOff   0          13m

然后我试图弄清楚问题出在哪里?

k describe pod/hello-minikube-6ddfcc9757-nfc64

以下是结果:

Name:         hello-minikube-6ddfcc9757-nfc64
Namespace:    default
Priority:     0
Node:         minikube/192.168.64.8
Start Time:   Sun, 16 Jan 2022 10:49:27 +0330
Labels:       app=hello-minikube
              pod-template-hash=6ddfcc9757
Annotations:  <none>
Status:       Pending
IP:           172.17.0.5
IPs:
  IP:           172.17.0.5
Controlled By:  ReplicaSet/hello-minikube-6ddfcc9757
Containers:
  echoserver:
    Container ID:   
    Image:          k8s.gcr.io/echoserver:1.4
    Image ID:       
    Port:           <none>
    Host Port:      <none>
    State:          Waiting
      Reason:       ImagePullBackOff
    Ready:          False
    Restart Count:  0
    Environment:    <none>
    Mounts:
      /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-k5qql (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             False 
  ContainersReady   False 
  PodScheduled      True 
Volumes:
  kube-api-access-k5qql:
    Type:                    Projected (a volume that contains injected data from multiple sources)
    TokenExpirationSeconds:  3607
    ConfigMapName:           kube-root-ca.crt
    ConfigMapOptional:       <nil>
    DownwardAPI:             true
QoS Class:                   BestEffort
Node-Selectors:              <none>
Tolerations:                 node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                             node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:
  Type     Reason     Age                   From               Message
  ----     ------     ----                  ----               -------
  Normal   Scheduled  18m                   default-scheduler  Successfully assigned default/hello-minikube-6ddfcc9757-nfc64 to minikube
  Normal   Pulling    16m (x4 over 18m)     kubelet            Pulling image "k8s.gcr.io/echoserver:1.4"
  Warning  Failed     16m (x4 over 18m)     kubelet            Failed to pull image "k8s.gcr.io/echoserver:1.4": rpc error: code = Unknown desc = Error response from daemon: Get "https://k8s.gcr.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
  Warning  Failed     16m (x4 over 18m)     kubelet            Error: ErrImagePull
  Warning  Failed     15m (x6 over 18m)     kubelet            Error: ImagePullBackOff
  Normal   BackOff    3m34s (x59 over 18m)  kubelet            Back-off pulling image "k8s.gcr.io/echoserver:1.4"

然后尝试获取一些日志:

k logs pod/hello-minikube-6ddfcc9757-nfc64k logs deploy/hello-minikube

两者返回相同的结果:

Error from server (BadRequest): container "echoserver" in pod "hello-minikube-6ddfcc9757-nfc64" is waiting to start: trying and failing to pull image

这个部署是从 minikube 文档 的一个示例。

但我不知道为什么它没有拉取任何镜像...


我在这里 找到了相似的错误。那里提供的解决方案是否有用? - kkopczak
你好@kkopczak,我有一段时间没来了,很抱歉。不幸的是,那篇文章中的答案并没有解决我的问题,因为我仍然无法拉取任何图像...但无论如何,还是谢谢你的回复。 - Ali
3个回答

4

我遇到了完全相同的问题。 后来发现我的互联网连接很慢, 拉取镜像的超时时间为120秒,因此kubectl无法在120秒内拉取镜像。

首先使用minikube来拉取你需要的镜像 例如:

minikube image load k8s.gcr.io/echoserver:1.4

现在,由于kubectl将使用本地存储的镜像,因此一切都将正常工作。


首先拉取镜像:docker image pull k8s.gcr.io/echoserver:1.4 - Ali

0
根据本文所述:

状态ImagePullBackOff表示Pod无法启动,因为Kubernetes无法拉取容器镜像。‘BackOff’部分意味着Kubernetes将继续尝试拉取图像,并具有递增的延迟(‘back-off’)。

这里还有一个关于将镜像推送到minikube集群的手册。

这个手册描述了您的问题:

无法拉取镜像...在等待标头时超出了客户端超时
Unable to pull images, which may be OK:

failed to pull image "k8s.gcr.io/kube-apiserver:v1.13.3": output: Error response from daemon:
Get https://k8s.gcr.io/v2/: net/http: request canceled while waiting for connection
(Client.Timeout exceeded while awaiting headers)


这个错误表示在虚拟机内运行的容器运行时无法访问互联网。
请参见可能的解决方法

你好@wytrzymaływiktor,不幸的是,我仍然无法拉取任何图像...实际上,我知道我不能拉取任何图像,可能是因为我的pod没有访问互联网的权限,但我不知道为什么?我该如何解决它?我测试了docker-desktop,一切正常,我还尝试了minikube,有和没有VPN都试过了,但问题仍然存在...(我也尝试多次删除和重新安装minikube,但仍然没有改变...) - Ali
你尝试过我提供的可能解决方法了吗? - kkopczak

-2

我遇到了一些类似的问题,通过使用 echoserver:1.10 而不是 echoserver:1.4 来解决了。


这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时得到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - Ethan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接