CoreDNS 作为 Kubernetes 集群的域名解析组件,如果性能不够可能会影响业务,本文介绍几种 CoreDNS 的性能优化手段。

合理控制 CoreDNS 副本数

考虑以下几种方式:

  1. 根据集群规模预估 coredns 需要的副本数,直接调整 coredns deployment 的副本数:

kubectl -n kube-system scale --replicas=10 deployment/coredns
  1. 为 coredns 定义 HPA 自动扩缩容。

  1. 安装 cluster-proportional-autoscaler 以实现更精确的扩缩容(推荐)。

禁用 ipv6

如果 K8S 节点没有禁用 IPV6 的话,容器内进程请求 coredns 时的默认行为是同时发起 IPV4 和 IPV6 解析,而通常我们只需要用到 IPV4,当容器请求某个域名时,coredns 解析不到 IPV6 记录,就会 forward 到 upstream 去解析,如果到 upstream 需要经过较长时间(比如跨公网,跨机房专线),就会拖慢整个解析流程的速度,业务层面就会感知 DNS 解析慢。

CoreDNS 有一个 template 的插件,可以用它来禁用 IPV6 的解析,只需要给 CoreDNS 加上如下的配置:

template ANY AAAA {rcode NXDOMAIN
}

这个配置的含义是:给所有 IPV6 的解析请求都响应空记录,即无此域名的 IPV6 记录。

优化 ndots

默认情况下,Kubernetes 集群中的域名解析往往需要经过多次请求才能解析到。查看 pod 内 的 /etc/resolv.conf 可以知道 ndots 选项默认为 5:

意思是: 如果域名中 . 的数量小于 5,就依次遍历 search 中的后缀并拼接上进行 DNS 查询。

举个例子,在 debug 命名空间查询 kubernetes.default.svc.cluster.local 这个 service:

  1. 域名中有 4 个 .,小于 5,尝试拼接上第一个 search 进行查询,即 kubernetes.default.svc.cluster.local.debug.svc.cluster.local,查不到该域名。

  1. 继续尝试 kubernetes.default.svc.cluster.local.svc.cluster.local,查不到该域名。

  1. 继续尝试 kubernetes.default.svc.cluster.local.cluster.local,仍然查不到该域名。

  1. 尝试不加后缀,即 kubernetes.default.svc.cluster.local,查询成功,返回响应的 ClusterIP。

可以看到一个简单的 service 域名解析需要经过 4 轮解析才能成功,集群中充斥着大量无用的 DNS 请求。

怎么办呢?我们可以设置较小的 ndots,在 Pod 的 dnsConfig 中可以设置:

然后业务发请求时尽量将 service 域名拼完整,这样就不会经过 search 拼接造成大量多余的 DNS 请求。

不过这样会比较麻烦,有没有更好的办法呢?有的!请看下面的 autopath 方式。

启用 autopath

启用 CoreDNS 的 autopath 插件可以避免每次域名解析经过多次请求才能解析到,原理是 CoreDNS 智能识别拼接过 search 的 DNS 解析,直接响应 CNAME 并附上相应的 ClusterIP,一步到位,可以极大减少集群内 DNS 请求数量。

启用方法是修改 CoreDNS 配置:

kubectl -n kube-system edit configmap coredns

修改红框中圈出来的配置:

  • 加上 autopath @kubernetes。

  • 默认的 pods insecure 改成 pods verified。

需要注意的是,启用 autopath 后,由于 coredns 需要 watch 所有的 pod,会增加 coredns 的内存消耗,根据情况适当调节 coredns 的 memory request 和 limit。

部署 NodeLocal DNSCache

参考 k8s 官方文档 Using NodeLocal DNSCache in Kubernetes clusters

如果是使用 TKE 并且 kube-proxy 转发模式为 iptables,可以直接在扩展组件中安装此扩展组件,扩展组件说明请参考 TKE 官方文档;如果使用的 ipvs 模式,可以参考 TKE IPVS 模式安装 localdns。

使用 DNSAutoscaler

社区有开源的 cluster-proportional-autoscaler ,可以根据集群规模自动扩缩容,支持比较灵活的扩缩容算法。

如果使用的是 TKE,已经将其产品化成 DNSAutoscaler 扩展组件,在扩展组件中直接安装即可,组件说明请参考 TKE 官方文档。

CoreDNS 性能优化相关推荐

  1. kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势

    陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...

  2. MegEngine推理性能优化

    MegEngine推理性能优化 MegEngine「训练推理一体化」的独特范式,通过静态图优化保证模型精度与训练时一致,无缝导入推理侧,再借助工业验证的高效卷积优化技术,打造深度学习推理侧极致加速方案 ...

  3. asp.net程序性能优化的七个方面

    asp.net程序性能优化的七个方面 一.数据库操作 1.用完马上关闭数据库连接 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器 ...

  4. java criteria限制条数_java架构—Oracle SQL性能优化

    (1) 选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,FROM子句中写在最后的表(基础表 driving table)将被最先 ...

  5. ab测试nginx Nginx性能优化

    转自:https://www.cnblogs.com/nulige/p/9369700.html 1.性能优化概述 在做性能优化前, 我们需要对如下进行考虑 1.当前系统结构瓶颈 观察指标 压力测试 ...

  6. RHEL/CentOS通用性能优化、安全配置参考

    RHEL/CentOS通用性能优化.安全配置参考 本文的配置参数是笔者在实际生产环境中反复实践总结的结果,完全适用绝大多数通用的高负载.安全性要求的网络服务器环境.故可以放心使用. 若有异议,欢迎联系 ...

  7. Android开发——布局性能优化的一些技巧(一)

    0. 前言 上一篇我们分析了为什么LinearLayout会比RelativeLayout性能更高,意义在于分析了这两种布局的实现源码,算是对一个小结论的证明过程,但是对布局性能的优化效果,对这两种布 ...

  8. Web性能优化实践——应用层性能优化

    随着公司项目的进一步推广,用户数量的增加,已经面临着单台服务器不能负载的问题. 这次的优化由于时间关系主要分两步走,首先优化应用层代码以提高单台服务器的负载和吞吐率.之后再进行分表,引入队列.MemC ...

  9. 嵌入式linux内存使用和性能优化

    这本书有两个关切点:系统内存(用户层)和性能优化. 这本书和Brendan Gregg的<Systems Performance>相比,无论是技术层次还是更高的理论都有较大差距.但是这不影 ...

最新文章

  1. html5边框有圆弧,CSS圆角有立体感的DIV边框
  2. C#显示相机实时画面
  3. html li标签横向排列_HTML简易的常用标签
  4. 阿里P8亲自讲解!javawhile循环语句用法
  5. 上班之第一个无聊周末
  6. python 定义类 学习2
  7. 网络性能优化(NAPI)
  8. RabbitMQ入门-Topic模式
  9. javascript循环语句及函数
  10. Linux环境下安装Hadoop(完全分布式)
  11. 一篇就让你懂线程池原理
  12. 微信小程序仿陶票票课程设计
  13. 联想y9000x做java_联想Y9000X装win7系统及BIOS设置教程(支持9代)
  14. 婚礼这天你是公主,你的婚礼你做主
  15. Kali与编程:Winserver 2019搭建dhcp服务器
  16. 安装google扩展
  17. 教你一波Lucas(卢卡斯)定理在数论解题中的应用
  18. android简历!剖析Android开发未来的出路在哪里,Android篇
  19. iOS - 需求 - 微信扫描二维码支付(草稿)
  20. html来自网页的消息,win7系统ie浏览器提示:来自网页的消息的解决方法

热门文章

  1. 通用数据打捞工具操作手册
  2. C语言if-else逻辑——想通了,再碰到就是小菜一碟!
  3. Vue2.x + element ui 导入导出excel
  4. 依靠闲鱼赚钱,互联网副业单天500+
  5. 软件版本发布要求和标准
  6. LCP 2.分式简化
  7. Angular------win10搭建Angular环境并运行hello-world
  8. 定义一个抽象类一水果,创建若干水果对象存放在-一个水果类型的数组中,输出数组中所有水果的类型、重量
  9. 计算机职业道德英语作文,2014年考研英语作文模板:职业道德作文
  10. 【HDOJ】1493 QQpet exploratory park