前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【TKE】IPVS 转发模式下使用 NodeLocalDNSCache

【TKE】IPVS 转发模式下使用 NodeLocalDNSCache

原创
作者头像
Jokey
修改2021-06-01 11:51:17
1.1K0
修改2021-06-01 11:51:17
举报
文章被收录于专栏:云原生搬运工云原生搬运工

使用场景

在集群中以 Daemonset 的方式运行 NodeLocal DNS Cache 组件,能够大幅提升集群内 DNS 解析性能,以及有效避免 conntrack 冲突引发的 DNS 五秒延迟

目前 TKE 已经将 NodeLocal DNS Cache 作为增强组件供用户在集群中安装使用,但是目前仅限 Kube-proxy 转发模式为 Iptables 的集群安装,下面将介绍下在转发模式为 IPVS 如何部署使用 NodeLocal DNS Cache 。

操作步骤

1.存量节点安装

1. 根据示例 nodelocaldns.yaml 准备一个资源清单,把它保存为nodelocaldns.yaml

2. 把nodelocaldns.yaml清单里的变量更改为正确的值:

代码语言:shell
复制
DNS_SERVICE="kube-dns"
DNS_CLUSTER_IP=`kubectl get svc ${DNS_SERVICE} -n kube-system -o jsonpath={.spec.clusterIP}`
CUSTOM_DOMAIN="cluster.local"
NODE_LOCAL_DNS="169.254.20.10"
sed -i "s/__PILLAR__LOCAL__DNS__/$NODE_LOCAL_DNS/g; s/__PILLAR__DNS__DOMAIN__/$CUSTOM_DOMAIN/g; s/,__PILLAR__DNS__SERVER__//g; s/__PILLAR__CLUSTER__DNS__/$DNS_CLUSTER_IP/g" nodelocaldns.yaml

替换的变量名说明:

  • DNS_CLUSTER_IP:可通过在集群中执行kubectl get svc <DNS_SERVICE>-n kube-system -o jsonpath={.spec.clusterIP}命令获取,其中 <DNS_SERVICE> 为集群 DNS 服务的 Service 名,在 TKE 集群中为 "kube-dns"。
  • CUSTOM_DOMAIN:K8S集群创建时如果没有指定的话,默认值是 "cluster.local"。
  • NODE_LOCAL_DNS:是 NodeLocalDNSCache 在节点上监听的 IP 地址,推荐直接使用 "169.254.20.10" IP。

3. 应用部署 NodeLocal DNSCache 组件资源:

代码语言:shell
复制
 kubectl create -f nodelocaldns.yaml

4. 修改 kubelet 参数:

由于 kube-proxy 运行在 IPVS 模式,需要修改 kubelet 的--cluster-dns参数为 NodeLocal DNSCache 在节点上监听的NODE_LOCAL_DNS地址,集群中所有节点依次执行以下命令,修改 kubelet 启动参数并重启。

代码语言:shell
复制
NODE_LOCAL_DNS="169.254.20.10" 
sed -i "/CLUSTER_DNS/c\CLUSTER_DNS=\"--cluster-dns=${NODE_LOCAL_DNS}\"" /etc/kubernetes/kubelet
systemctl restart kubelet

⚠️ NodeLocalDNSCache 组件安装配置好后存量 Pods 还是使用的DNS_CLUSTER_IP解析,存量 Pods 需要重建或者修改配置dnsConfig后生效。

2.新增节点配置

当存量节点已经部署运行了 NodeLocal DNS Cache 组件时,新增节点只需要自定义配置 kubelet 参数--cluster-dns为上述NODE_LOCAL_DNS地址即可,目前自定义参数需要开白支持,可联系 TKE 售后同学帮忙开启。

卸载资源(谨慎)

如果不想再使用此功能,卸载步骤如下:

1. 先恢复对 kubelet 配置所做的所有改动(注意变量名)。

代码语言:shell
复制
DNS_CLUSTER_IP=${DNS_CLUSTER_IP}
sed -i "/CLUSTER_DNS/c\CLUSTER_DNS=\"--cluster-dns=${DNS_CLUSTER_IP}\"" /etc/kubernetes/kubelet
systemctl restart kubelet

2. 再删除部署的 NodeLocal DNS Cache 的所有资源:

代码语言:javascript
复制
kubectl delete -f nodelocaldns.yaml

⚠️ 对应的,已经有使用NODE_LOCAL_DNS解析的存量 Pods 需要重建或者修改配置dnsConfig后生效。

参考

https://kubernetes.io/zh/docs/tasks/administer-cluster/nodelocaldns

https://cloud.tencent.com/document/product/457/40613

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用场景
  • 操作步骤
    • 1.存量节点安装
      • 2.新增节点配置
        • 卸载资源(谨慎)
          • 参考
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档