我在一台安装了ArchLinux的电脑上,使用Docker作为Minikube驱动程序,运行了一个全新的Minikube安装。
使用minikube start
命令启动minikube "cluster"。 docker container ls
告诉我们它正在运行中:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d86070af0c21 gcr.io/k8s-minikube/kicbase:v0.0.28 "/usr/local/bin/entr…" 50 minutes ago Up 50 minutes 127.0.0.1:49162->22/tcp, 127.0.0.1:49161->2376/tcp, 127.0.0.1:49160->5000/tcp, 127.0.0.1:49159->8443/tcp, 127.0.0.1:49158->32443/tcp minikube
我想运行一个简单的 nginx pod,使用这个命令:kubectl run my-nginx --image nginx
由于我正在从公共存储库中拉取公共镜像,所以我不需要任何身份验证。但是 describe pod
子命令显示:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 47s default-scheduler Successfully assigned default/my-nginx to minikube
Normal BackOff 31s kubelet Back-off pulling image "nginx"
Warning Failed 31s kubelet Error: ImagePullBackOff
Normal Pulling 19s (x2 over 46s) kubelet Pulling image "nginx"
Warning Failed 4s (x2 over 31s) kubelet Failed to pull image "nginx": 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)
Warning Failed 4s (x2 over 31s) kubelet Error: ErrImagePull
当我试图从minikube容器内部curl找到在错误信息中找到的URL时,它显示需要进行身份验证:
patres@arch:~$ minikube ssh
docker@minikube:~$ curl https://registry-1.docker.io/v2/
{"errors":[{"code":"UNAUTHORIZED","message":"authentication required","detail":null}]}
当我尝试使用
docker pull nginx
命令从主机上拉取那张图片时,它会被拉取,无需身份验证。我还尝试通过这种方式创建一个kubernetes密钥,然后使用该密钥启动YAML中的Pod,但是没有成功。
kubectl create secret docker-registry regcred --docker-server=https://registry-1.docker.io/v2/ --docker-username=myusername --docker-password=mypass --docker-email=my@email.com
最后,看起来这个问题可能不是DockerHub
所特有的,因为如果我按照官方的minikubes文档并启动默认的hello-minikube
部署:
kubectl create deployment hello-minikube --image=k8s.gcr.io/echoserver:1.4
我遇到了同样的 ImagePullBackOff
错误:
$ kubectl get pod hello-minikube-6ddfcc9757-zdzz2
NAME READY STATUS RESTARTS AGE
hello-minikube-6ddfcc9757-zdzz2 0/1 ImagePullBackOff 0 6m11s