Kubernetes 之 Nameserver limits were exceeded
1、問題描述
最近查看kubernetes 的events,發(fā)現(xiàn)了有兩個節(jié)點經(jīng)常出現(xiàn)下面的信息:
DNSConfigForming Nameserver limits were exceeded, some nameservers have been omitted, the applied nameserver line is: 192.96.0.10 10.2.5.1 10.2.5.2
這個是kubelet打出來的,字面意思很好理解,就是nameserver 超出限制,超出的將被忽略。那限制是多少呢?so帶著這個疑問就去github kubernetes源碼一探究竟。
首先確定知道這個是kubelet里面的events,找到dns的相關(guān)源碼:kubernetes/pkg/kubelet/network/dns/dns.go
func (c *Configurer) formDNSNameserversFitsLimits(nameservers []string, pod *v1.Pod) []string {
if len(nameservers) > validation.MaxDNSNameservers {
nameservers = nameservers[0:validation.MaxDNSNameservers]
log := fmt.Sprintf("Nameserver limits were exceeded, some nameservers have been omitted, the applied nameserver line is: %s", strings.Join(nameservers, " "))
c.recorder.Event(pod, v1.EventTypeWarning, "DNSConfigForming", log)
klog.Error(log)
}
return nameservers
}
找到上面的函數(shù),有一個validation.MaxDNSNameservers,所以kubelet讀取resolv.conf里面的nameserver是有數(shù)量限制的,最大值就是validation.MaxDNSNameservers,我們現(xiàn)在去找validation的源碼。在上面的import里面
找到k8s.io/kubernetes/pkg/apis/core/validation,找到validation這個package的源碼:
const (
// Limits on various DNS parameters. These are derived from
// restrictions in Linux libc name resolution handling.
// Max number of DNS name servers.
MaxDNSNameservers = 3
// Max number of domains in search path.
MaxDNSSearchPaths = 6
// Max number of characters in search path.
MaxDNSSearchListChars = 256
)
原來默認的支持最大nameserver是3個。然后去兩臺拋出DNSConfigForming的服務(wù)器上面檢查/etc/resolv.conf里面的nameserver發(fā)現(xiàn)果然超過了三個。
二、解決問題
當然一般被忽略掉的那個nameserver不影響服務(wù)使用的話,可以不作為緊急處理。
可以在kubelet設(shè)置一個kubermetes專用的resolv.conf文件,保證kubernetes使用到的nameserver不超過三個,這樣就可以解決。
在/var/lib/kubelet路徑下,修改config.yaml
resolvConf: /etc/resolv.conf
重啟kubelet生效。
總結(jié)
以上是生活随笔為你收集整理的Kubernetes 之 Nameserver limits were exceeded的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL基础三(例子)
- 下一篇: 告别超级摩天大楼!发改委:不得新建500