kubernetes kubedns-如果我进行NSQ查找,sidecar和masq会崩溃
我面临一个奇怪的问题 这是我的库伯内特的详细资料kubernetes kubedns-如果我进行NSQ查找,sidecar和masq会崩溃,dns,Dns,我面临一个奇怪的问题 这是我的库伯内特的详细资料 Kubernetes version: 1.6.4 OS: Ubuntu 17.04 我使用以下链接中的YAML文件安装kube dns 第一步 然后,我尝试使用 kubectl run -i --tty busybox --image=busybox – sh 现在,当我做库伯内特斯的时候,它就起作用了。 现在,当我试图查看我的侧车的docker日志时,我看到了以下内容 ERROR: logging before flag.Parse:
Kubernetes version: 1.6.4
OS: Ubuntu 17.04
我使用以下链接中的YAML文件安装kube dns
第一步
然后,我尝试使用
kubectl run -i --tty busybox --image=busybox – sh
现在,当我做库伯内特斯的时候,它就起作用了。
现在,当我试图查看我的侧车的docker日志时,我看到了以下内容
ERROR: logging before flag.Parse: I0721 17:15:25.067730 1 main.go:48] Version v1.14.3-4-gee838f6
ERROR: logging before flag.Parse: I0721 17:15:25.067981 1 server.go:45] Starting server (options {DnsMasqPort:53 DnsMasqAddr:127.0.0.1 DnsMasqPollIntervalMs:5000 Probes:[{Label:kubedns Server:127.0.0.1:10053 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1} {Label:dnsmasq Server:127.0.0.1:53 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}] PrometheusAddr:0.0.0.0 PrometheusPort:10054 PrometheusPath:/metrics PrometheusNamespace:kubedns})
ERROR: logging before flag.Parse: I0721 17:15:25.068191 1 dnsprobe.go:75] Starting dnsProbe {Label:kubedns Server:127.0.0.1:10053 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}
ERROR: logging before flag.Parse: I0721 17:15:25.068398 1 dnsprobe.go:75] Starting dnsProbe {Label:dnsmasq Server:127.0.0.1:53 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}
ERROR: logging before flag.Parse:
步骤2
如果我对一个我知道在kubedns中不存在的名称(比如nslookup ABCD)进行nslookup(作为记录),那么我会在我的dnsmesg容器中看到以下日志
I0718 17:26:33.738368 1 nanny.go:108] dnsmasq[13]: Maximum number of concurrent DNS queries reached (max: 150)
同时我在侧车里看到了后面的人
dns sidecar errorERROR: logging before flag.Parse: I0720 02:09:37.975054 1 main.go:48] Version v1.14.3-4-gee838f6
ERROR: logging before flag.Parse: I0720 02:09:37.975140 1 server.go:45] Starting server (options {DnsMasqPort:53 DnsMasqAddr:127.0.0.1 DnsMasqPollIntervalMs:5000 Probes:[{Label:kubedns Server:127.0.0.1:10053 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1} {Label:dnsmasq Server:127.0.0.1:53 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}] PrometheusAddr:0.0.0.0 PrometheusPort:10054 PrometheusPath:/metrics PrometheusNamespace:kubedns})
ERROR: logging before flag.Parse: I0720 02:09:37.975160 1 dnsprobe.go:75] Starting dnsProbe {Label:kubedns Server:127.0.0.1:10053 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}
ERROR: logging before flag.Parse: I0720 02:09:37.975200 1 dnsprobe.go:75] Starting dnsProbe {Label:dnsmasq Server:127.0.0.1:53 Name:kubernetes.default.svc.cluster.local. Interval:5s Type:1}
ERROR: logging before flag.Parse: W0720 02:12:50.090595 1 server.go:64] Error getting metrics from dnsmasq: read udp 127.0.0.1:36473->127.0.0.1:53: i/o timeout
ERROR: logging before flag.Parse: W0720 02:13:03.607740 1 server.go:64] Error getting metrics from dnsmasq: read udp 127.0.0.1:56334->127.0.0.1:53: i/o timeout
ERROR: logging before flag.Parse: W0720 02:13:10.609651 1 server.go:64] Error getting metrics from dnsmasq: read udp 127.0.0.1:39976->127.0.0.1:53: i/o timeout
ERROR: logging before flag.Parse: W0720 02:13:23.644035 1 server.go:64] Error getting metrics from dnsmasq: read udp 127.0.0.1:57226->127.0.0.1:53: i/o timeout
步骤3
5分钟或10分钟后,我的sidecar和dnsmasq都崩溃了,新的容器又重新创建了,这真是一个麻烦
有关我的K8s群集的其他一些详细信息
我正在使用VMWare workstation 12 Pro在一个节点上运行群集,我已经启用了RBAC,并且正在使用客户端证书进行身份验证
求救信号。有人能给我指出正确的方向吗?我花了很多时间想弄明白这一点。
提前感谢我在Ubuntu 18.04上遇到了同样的问题,在
/etc/resolve.conf
和systemd resolved
的基础上,第三个系统开始发挥作用。但这并不妨碍kube-dns
——正如前面所述,kube-dns
只是选择/etc/resolve.conf
的内容,在我的例子中:
nameserver 127.0.0.53
事实证明,这仅仅是一个已知的Ubuntu systemd解决的bug(见答案)。长话短说,只有一个解决办法(实际上,我也不相信这一点,并尝试使用编辑/etc/systemd/resolved.conf
和重新启动服务,但这对我来说并不奏效)。只需(重新)移动原始的/etc/resolv.conf
,并将其替换为指向/run/systemd/resolv/resolv.conf
的链接:
sudo mv /etc/resolv.conf /etc/resolv.conf_orig
sudo ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf
现在,您的/etc/resolve.conf
应该有正确的名称服务器,在我使用VirtualBox的情况下是名称服务器10.0.2.3
(这可能与您的设置不同!)。现在,重新应用kube dns
后,它会为每次nslookup选择正确的名称服务器,一切正常:
kubectl exec -it busybox-68654f944b-7rdzs -- nslookup kubernetes
如果您感兴趣,这里有一个解决该问题的Ansible实现:
更新2018年8月29日:当前的
busybox
映像存在DNS查找问题(请参阅)。尝试运行版本1.28.4
时,请明确使用:
kubectl run busybox --image=busybox:1.28.4 --command -- sleep 3600
这应该可以避免你几天的搜索 我忘了提到我正在运行Ubuntu 16.04,而AFAIK没有运行systemd 这解释了为什么我找不到/run/systemd/resolve(resolv.conf)文件夹将我的/etc/resolv.conf符号链接到 显然,16.10版中引入了systemd解决方案
我确实切换到使用busybox的1.28.4版,但这也没有任何帮助。大家参考我讨论过的github链接,问题得到了解决。我在我的集群上应用了相同的解决方案,DNS现在正在工作。您在更改后卸载了systemd resolve吗?不,我没有在更改后卸载systemd resolve-我想,Ubuntu在其较新版本中依赖于该子系统-所以这可能不是一个好主意。当然!但是,即使在创建了如上所述的符号链接之后。resolv.conf指向/run/resolvconf/resolv.conf,nslookup命令显示随机行为。有时工作,有时不工作。我有什么遗漏吗?