美文网首页
当流量高时,K8S容器出现DNS解析失败

当流量高时,K8S容器出现DNS解析失败

作者: 弹猪 | 来源:发表于2019-04-22 18:52 被阅读0次

    问题状况:
    当K8S遇到流量高峰时,经常会报错 “ php_network_getaddresses: getaddrinfo failed”,就是遇到了域名无法解析的情况。
    1 最先想到升配,因为问题总是伴随着高流量产生,结果无效。
    2 后来阿里云的人提示是基础镜像Alpine的原因,建议换CentOS。原来Alpine使用了musl,CentOS等Linux发行版使用的glibc,在实现DNS上不同。但我们换成CentOS,问题还是没解决。
    3 后来分析应用装在普通机器上没问题,那应该是K8S 解析DNS的组件出了问题。检查系统级容器,发现coredns报了一堆错,于是coredns升版本,调高限制,coredns不报错了,但依旧有DNS解析失败。
    4 实在没办法了,把kube-system中的系统容器都调高限制,问题依旧。

    解决过程:联系阿里云的人,他们抓了几天网络包,分析到了DNS丢包情况(好吧,这个就是我们的问题)。最后在/var/log/messages里找到了关键信息

    nf_conntrack: table full, dropping packet
    

    一查,原来docker会调用nf_conntrack 连接跟踪模块。Linux为每个经过内核网络栈的数据包,生成一个新的连接记录项,当服务器处理的连接过多时,连接跟踪表被打满,服务器会丢弃新建连接的数据包。

    需要调整3个参数:

    echo 262144 | sudo tee /sys/module/nf_conntrack/parameters/hashsize #调整net.netfilter.nf_conntrack_buckets
    sudo sysctl net.netfilter.nf_conntrack_max=1048576
    sudo sysctl net.netfilter.nf_conntrack_tcp_timeout_established=600
    

    参考博文:
    https://www.zybuluo.com/babydragon/note/255530
    http://keithmo.me/post/2018/08/25/conntrack-tuning/

    相关文章

      网友评论

          本文标题:当流量高时,K8S容器出现DNS解析失败

          本文链接:https://www.haomeiwen.com/subject/khnvrqtx.html