请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
搜索

本文来自

边缘计算专区

边缘计算专区

人已关注

请添加对本版块的简短描述

精选帖子

k8s apiserver --v  日志级别
k8s apiserver --v 日志级别
0阅读|223人阅读
阿里云CDN计费
阿里云CDN计费
0阅读|500人阅读
信用卡空当接龙
信用卡空当接龙
0阅读|530人阅读
HTTP/1.0和HTTP/1.1、HTTP/2请求对比
HTTP/1.0和HTTP/1.1、HTTP/2请求对比
3阅读|920人阅读

Kubernetes 之 Nameserver limits were exceeded dns

[复制链接]
710 abc 发表于 2019-9-12 10:45:16
本帖最后由 abc 于 2019-9-24 18:07 编辑

1、问题描述

最近查看kubernetes 的events,发现了有两个节点经常出现下面的信息:

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的相关源码: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
}
复制代码
找到上面的函数,有一个validation.MaxDNSNameservers,所以kubelet读取resolv.conf里面的nameserver是有数量限制的,最大值就是validation.MaxDNSNameservers,我们现在去找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的服务器上面检查/etc/resolv.conf里面的nameserver发现果然超过了三个。



二、解决问题

当然一般被忽略掉的那个nameserver不影响服务使用的话,可以不作为紧急处理。

可以在kubelet设置一个kubermetes专用的resolv.conf文件,保证kubernetes使用到的nameserver不超过三个,这样就可以解决。

在/var/lib/kubelet路径下,修改config.yaml

resolvConf: /etc/resolv.conf
重启kubelet生效。

--------崔帅的拾荒
https://www.cnblogs.com/cuishuai/p/10980852.html

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表