IPVS 模式下,当 coredns 滚动更新期间,集群监控日志出现大量的连接超时,由于日志异常的时间和 coredns 变更时间完全重叠,怀疑是 coredns 滚动更新造成,下面进行问题复现,并给出优化方案。
实验
创建一个由 2 个 POD 作为后端的 coredns service
通过创建大量 DNS 查询来访问此服务
触发滚动更新 coredns
顺序查询
可以看到在 顺序执行(非并发压测)的情况下,已经出现较多DNS解析超时的情况
并发查询
dnsperf是一个开源的DNS压力测试工具,用户可以用它来对DNS服务器或者Local DNS做压力测试。dnsperf目前的实现是单进程模式,通过epoll非阻塞地处理网络事件
优化
通过查阅 issue 得知,这里可能与有关,当前设置的是,coredns 滚动更新的时候 ipvs 中 udp 老链接会 300s才删除,如果在 内客户端有端口重用的话就会出现这个问题,并且这个时间和日志发生的时间也很类似,持续了5分钟。
优化改动:
加了
等待5分钟(关键!!)
中 配置改成
查看 日志,等待 reload
优化后结果
可以看到,效果还是很明显的~
最后附上 dnspref 工具的常用参数:
参考文档
https://github.com/kubernetes/kubernetes/issues/71514
领取专属 10元无门槛券
私享最新 技术干货