zoukankan      html  css  js  c++  java
  • 使用node local dns来提升ClusterDNS服务质量

    NodeLocal DNSCache在集群的上运行一个dnsCache daemonset来提高clusterDNS性能和可靠性。在Kubernetes集群上的一些测试表明:相比于纯coredns方案,nodelocaldns + coredns方案能够大幅降低DNS查询timeout的频次,提升服务稳定性,能够扛住1倍多的QPS。

    本文将介绍如何在ACK集群上部署node local dns。

    部署nodelocaldns

    nodelocaldns通过添加iptables规则能够接收节点上所有发往169.254.20.10的dns查询请求,把针对集群内部域名查询请求路由到coredns;把集群外部域名请求直接通过host网络发往集群外部dns服务器。

    # 下载部署脚本
    $ curl https://node-local-dns.oss-cn-hangzhou.aliyuncs.com/install-nodelocaldns.sh
    # 部署。确保kubectl能够连接集群
    $ bash install-nodelocaldns.sh

    DNS优化方案的具体实施仍在探索中,该脚本部署不对集群现有业务有任何影响,需要使用node local dns的业务容器也需要定制其dnsConfig。

    定制业务容器dnsConfig

    为了使业务容器能够使用nodelocaldns,需要将nameserver配置为169.254.20.10,而不是ClusterDNS。定制dnsConfig有以下几点需要注意到:

    1. dnsPolicy: None。不使用ClusterDNS。
    2. 配置searches,保证集群内部域名能够被正常解析。
    3. 适当降低ndots值。当前ACK集群ndots值默认为5,降低ndots值有利于加速集群外部域名访问。如果业务容器没有使用带多个dots的集群内部域名,建议将值设为2。
    apiVersion: v1
    kind: Pod
    metadata:
      name: alpine
      namespace: default
    spec:
      containers:
      - image: alpine
        command:
          - sleep
          - "10000"
        imagePullPolicy: Always
        name: alpine
      dnsPolicy: None
      dnsConfig:
        nameservers: ["169.254.20.10"]
        searches:
        - default.svc.cluster.local
        - svc.cluster.local
        - cluster.local
        options:
        - name: ndots
          value: "2"

    参考:https://developer.aliyun.com/article/709471

  • 相关阅读:
    一个iOS程序员眼中的跨域问题
    web 大规模并发访问的解决方案
    修改Capfile,在正式环境不再使用migration修改数据库
    关于 CAS 不能登录的问题
    老项目占地比较大的原因是release文件夹里有.git 目录
    capistrano3.4.0部署不能自动登录
    capistrano/blob/v3.4.0部署
    私有方法的查找方式
    开启关闭功能没有生效的原因
    找不到Settings
  • 原文地址:https://www.cnblogs.com/zhangmingcheng/p/14987644.html
Copyright © 2011-2022 走看看