我对Kuberetes还是陌生的,以前我在docker上做过一些工作。我正在尝试完成以下任务:
我开始了minikube,看起来一切正常。然后我通过以下命令
kubectl运行nginx --image = nginx(请注意,我的计算机上任何地方都没有此图像,我希望k8能为我获取它)
现在,当我这样做时,它会旋转吊舱,但状态为ImagePullBackOff
。因此,我在其上运行了kubectl describe pod
命令,结果如下:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 8m default-scheduler Successfully assigned default/ngix-67c6755c86-qm5mv to minikube
Warning Failed 8m kubelet, minikube Failed to pull image "nginx": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.64.1:53: read udp 192.168.64.2:52133->192.168.64.1:53: read: connection refused
Normal Pulling 8m (x2 over 8m) kubelet, minikube Pulling image "nginx"
Warning Failed 8m (x2 over 8m) kubelet, minikube Error: ErrImagePull
Warning Failed 8m kubelet, minikube Failed to pull image "nginx": rpc error: code = Unknown desc = Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on 192.168.64.1:53: read udp 192.168.64.2:40073->192.168.64.1:53: read: connection refused
Normal BackOff 8m (x3 over 8m) kubelet, minikube Back-off pulling image "nginx"
Warning Failed 8m (x3 over 8m) kubelet, minikube Error: ImagePullBackOff
然后我四处寻找是否有人遇到过类似的问题,结果发现有些人遇到了,他们确实通过使用更多如下所示的标志重新启动minikube来解决了该问题:
minikube start --vm-driver="xhyve" --insecure-registry="$REG_IP":80
当我在Minikube中进行nslookup
时,它会使用以下信息进行解析:
Server: 10.12.192.22
Address: 10.12.192.22#53
Non-authoritative answer:
hub.docker.com canonical name = elb-default.us-east-1.aws.dckr.io.
elb-default.us-east-1.aws.dckr.io canonical name = us-east-1-elbdefau-1nlhaqqbnj2z8-140214243.us-east-1.elb.amazonaws.com.
Name: us-east-1-elbdefau-1nlhaqqbnj2z8-140214243.us-east-1.elb.amazonaws.com
Address: 52.205.36.130
Name: us-east-1-elbdefau-1nlhaqqbnj2z8-140214243.us-east-1.elb.amazonaws.com
Address: 3.217.62.246
Name: us-east-1-elbdefau-1nlhaqqbnj2z8-140214243.us-east-1.elb.amazonaws.com
Address: 35.169.212.184
仍然没有运气。我在这里做错什么了吗?
答案 0 :(得分:2)
错误消息表明,在minikube VM中运行的Docker守护程序无法解析registry-1.docker.io
主机名,因为它配置为用于DNS解析(192.168.64.1:53
)的DNS名称服务器拒绝连接。令我感到奇怪的是,Docker守护进程正试图通过位于registry-1.docker.io
的名称服务器来解析192.168.64.1
,但是当您nslookup
在VM上时,它正在使用位于10.12.192.22
的名称服务器。我在互联网上搜索了“ minkube获取注册表-1.docker.io/v2:拨打tcp:在192.168.64.1:53上查找注册表-1.docker.io”,发现一个问题,其中有人制作了this comment,似乎与您的问题相同,并且似乎特定于xhyve
。
此人在评论中说:
此问题的确看起来像是Virtualbox中未见的xhyve问题。
和
切换到 virtualbox 为我解决了此问题。
我停止了minikube,将其删除,在没有
--vm-driver=xhyve
的情况下启动了它(默认情况下minikube使用virtualbox驱动程序),然后docker build -t hello-node:v1 .
正常运行而没有错误
答案 1 :(得分:1)
在我的情况下,这是由于在Mac上使用Homebrew运行let result = companies.compactMap {(company) -> (Company?) in
let employees = company.employess.filter { $0.lastname.lowercased() == "Antony".lowercased() }
return employees.isEmpty ? nil : Company(companyName: company.companyName, employess: employees)
}
(一台dns服务器)导致的,导致DNS请求在minikube内部失败。停止dnsmasq
后,一切正常。
答案 2 :(得分:0)
我的本地 minikube
设置遇到了这个问题,我无法提取添加到简单部署清单中的任何图像。
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
test1 0/1 ImagePullBackOff 0 68s
尝试执行以下测试:
apiVersion: v1
kind: Pod
metadata:
name: test1
labels:
site: blog
spec:
containers:
- name: web
image: nginx:latest
只有在重新启动 minikube
后才可能或已修复。
在这种情况下,也许 dnsmasq
才是真正的原因。