我们在AWS上的CoreOS上运行kubernetes 1.5.7。我们的kube-dns图像版本是
gcr.io/google_containers/kubedns-amd64:1.9 gcr.io/google_containers/kube-dnsmasq-amd64:1.4.1
我们传递给dnsmasq的args是
--cache-size=1000
--no-resolv
--server=/in-addr.arpa/ip6.arpa/cluster.local/ec2.internal/127.0.0.1#10053
--server=169.254.169.253
--server=8.8.8.8
--log-facility=-
--log-async
--address=/com.cluster.local/com.svc.cluster.local/com.kube-system.svc.cluster.local/<ourdomain>.com.cluster.local/<ourdomain>.com.svc.cluster.local/<ourdomain>.com.kube-system.svc.cluster.local/com.ec2.internal/ec2.internal.kube-system.svc.cluster.local/ec2.internal.svc.cluster.local/ec2.internal.cluster.local/
我们在20个节点集群中为每个节点运行1个kube-dns pod。在过去几个月中,我们遇到了DNS故障,其范围从5到10分钟的事件导致我们的服务几乎无法使用,因为大多数名称查找的名称解析都失败了。在这些活动期间,我们运行了3到6个kube-dns吊舱。从那时起,我们已经大幅度地将我们的kube-dns pod配置为每个节点1个,并且没有看到任何长达5-10分钟的DNS故障事件。但是现在我们仍然看到较小的DNS故障事件,范围从1到30秒。在调查这些问题期间,我们在日志中注意到dnsmasq-metrics容器中的以下错误
错误:在flag.Parse之前记录:W0517 03:19:50.139060 1 server.go:53]从dnsmasq获取指标时出错:read udp 127.0.0.1:36181->127.0.0.1:53:i / o timeout
当我们有一个持续1到30秒的小型DNS事件时,我们会从kube-dns pod中找到这些日志。有一段时间我们怀疑我们遇到了iptables / conntrack问题,因为pod正在点击kube-dns服务。但基于这些与dnsmasq相关的错误,我们认为dnsmasq拒绝连接一段时间导致我们遇到的DNS故障。对于不熟悉dnsmasq-metrics容器的人,它会对同一个pod中的dnsmasq容器执行DNS查找以获取dnsmasq统计信息。如果无法通过DNS查找检索dnsmasq统计数据,那么认为执行DNS查找的服务可能会遇到同样的问题似乎是合乎逻辑的。
值得注意的是,在这些问题中,我们没有看到来自dnsmasq的以下日志,这让我相信我们没有达到这个阈值。
dnsmasq:达到的最大并发DNS查询数(最大值:150)
我非常有信心我们当前的DNS错误与dnsmasq间歇性地拒绝连接有关。我很好奇其他用户是否看到kube-dns pod从dnsmasq-metrics记录错误的相同问题,并且在同一时间段内从群集中的应用程序记录DNS错误。
此外,如果有人对下一步该做什么有任何想法,以确切了解dnsmasq拒绝连接发生了什么。我正在思考在调试模式下运行dnsmasq是否有用,但也担心会引入与在调试模式下运行相关的其他问题。我们正在考虑的其他选项是慢慢推出CoreDNS(https://github.com/coredns/coredns)。
答案 0 :(得分:0)
您提供了许多群集域。每个群集域都将插入到本地/etc/resolv.conf
并被使用。对于resolv.conf
中的每个域,都会有单独的DNS请求。在您的情况下,每个dns查询都会有10多个dns查询。
--address=/com.cluster.local/com.svc.cluster.local/com.kube-system.svc.cluster.local/<ourdomain>.com.cluster.local/<ourdomain>.com.svc.cluster.local/<ourdomain>.com.kube-system.svc.cluster.local/com.ec2.internal/ec2.internal.kube-system.svc.cluster.local/ec2.internal.svc.cluster.local/ec2.internal.cluster.local/
我的建议是将群集域数减少到cluster.local
。
您提供多个群集域的原因是什么?