详情页标题前

腾讯云容器服务在 TKE 集群中使用 NodeLocal DNS Cache同尘科技

详情页1

操作场景

通过在集群节点上以 Daemonset 的形式运行 NodeLocal DNS Cache,能够大幅提升集群内 DNS 解析性能,以及有效避免 conntrack 冲突引发的 DNS 五秒延迟。 本文接下来将详细介绍如何在 TKE 集群中使用 NodeLocal DNS Cache。

操作原理

通过 DaemonSet 在集群的每个节点上部署一个 hostNetwork 的 Pod,该 Pod 是 node-cache,可以缓存本节点上 Pod 的 DNS 请求。如果存在 cache misses ,该 Pod 将会通过 TCP 请求上游 kube-dns 服务进行获取。原理图如下所示:

腾讯云容器服务在 TKE 集群中使用 NodeLocal DNS Cache同尘科技

说明NodeLocal DNS Cache 没有高可用性(High Availability,HA),会存在单点 nodelocal dns cache 故障(Pod Evicted/ OOMKilled/ConfigMap error/DaemonSet Upgrade),但是该现象其实是任何的单点代理(例如 kube-proxy,cni pod)都会存在的常见故障问题。

前提条件

已通过 容器服务控制台 创建了 Kubernetes 版本为 1.14 及以上的集群,且该集群中存在节点。

操作步骤

1. 一键部署 NodeLocal DNS Cache。YAML 示例如下:

---apiVersion: v1kind: ServiceAccountmetadata:      name: node-local-dns      namespace: kube-system      labels:        kubernetes.io/cluster-service: "true"        addonmanager.kubernetes.io/mode: Reconcile---apiVersion: v1kind: ConfigMapmetadata:      name: node-local-dns      namespace: kube-systemdata:      Corefile: |        cluster.local:53 {            errors            cache {                    success 9984 30                    denial 9984 5            }            reload            loop            bind 169.254.20.10            forward . __PILLAR__CLUSTER__DNS__ {                    force_tcp            }            prometheus :9253            health 169.254.20.10:8080            }        in-addr.arpa:53 {            errors            cache 30            reload            loop            bind 169.254.20.10            forward . __PILLAR__CLUSTER__DNS__ {                    force_tcp            }            prometheus :9253            }        ip6.arpa:53 {            errors            cache 30            reload            loop            bind 169.254.20.10            forward . __PILLAR__CLUSTER__DNS__ {                    force_tcp            }            prometheus :9253            }        .:53 {            errors            cache 30            reload            loop            bind 169.254.20.10            forward . /etc/resolv.conf {                    force_tcp            }            prometheus :9253            }---apiVersion: apps/v1kind: DaemonSetmetadata:      name: node-local-dns      namespace: kube-system      labels:        k8s-app: node-local-dnsspec:      updateStrategy:        rollingUpdate:          maxUnavailable: 10%      selector:        matchLabels:          k8s-app: node-local-dns      template:        metadata:          labels:            k8s-app: node-local-dns          annotations:            prometheus.io/port: "9253"            prometheus.io/scrape: "true"        spec:          serviceAccountName: node-local-dns          priorityClassName: system-node-critical          hostNetwork: true          dnsPolicy: Default  # Don't use cluster DNS.          tolerations:          - key: "CriticalAddonsOnly"            operator: "Exists"          - effect: "NoExecute"            operator: "Exists"          - effect: "NoSchedule"            operator: "Exists"          containers:          - name: node-cache            image: ccr.ccs.tencentyun.com/hale/k8s-dns-node-cache:1.15.13            resources:              requests:                cpu: 25m                memory: 5Mi            args: [ "-localip", "169.254.20.10", "-conf", "/etc/Corefile", "-setupiptables=true" ]            securityContext:              privileged: true            ports:            - containerPort: 53              name: dns              protocol: UDP            - containerPort: 53              name: dns-tcp              protocol: TCP            - containerPort: 9253              name: metrics              protocol: TCP            livenessProbe:              httpGet:                host: 169.254.20.10                path: /health                port: 8080              initialDelaySeconds: 60              timeoutSeconds: 5            volumeMounts:            - mountPath: /run/xtables.lock              name: xtables-lock              readOnly: false            - name: config-volume              mountPath: /etc/coredns            - name: kube-dns-config              mountPath: /etc/kube-dns          volumes:          - name: xtables-lock            hostPath:              path: /run/xtables.lock              type: FileOrCreate          - name: kube-dns-config            configMap:              name: kube-dns              optional: true          - name: config-volume            configMap:              name: node-local-dns              items:                - key: Corefile                  path: Corefile.base

2. 将 kubelet 的指定 dns 解析访问地址设置为 步骤1 中创建的 local dns cache。本文提供以下两种配置方法,请根据实际情况进行选择:依次执行以下命令,修改 kubelet 启动参数并重启。

sed -i '/CLUSTER_DNS/c\CLUSTER_DNS="--cluster-dns=169.254.20.10"' /etc/kubernetes/kubelet
systemctl restart kubelet

根据需求配置单个 Pod 的 dnsconfig 后重启。YAML 核心部分参考如下:需要将 nameserver 配置为169.254.20.10。为确保集群内部域名能够被正常解析,需要配置 searches。适当降低 ndots 值有利于加速集群外部域名访问。当 Pod 没有使用带有多个 dots 的集群内部域名的情况下,建议将值设为2。

dnsConfig:       nameservers: ["169.254.20.10"]       searches:          - default.svc.cluster.local         - svc.cluster.local         - cluster.local       options:         - name: ndots           value: "2"

配置验证

本次测试集群为 Kubernetes 1.14 版本集群。在通过上述步骤完成 NodeLocal DNSCache 组件部署之后,可以参照以下方法进行验证:1. 选择一个 debug pod,调整 kubelet 参数或者配置 dnsConfig 后重启。 2. Dig 外网域名,尝试在 coredns pod 上抓包。 3. 显示169.254.20.10正常工作即可证明 NodeLocal DNSCache 组件部署成功。如下图所示:

腾讯云容器服务在 TKE 集群中使用 NodeLocal DNS Cache同尘科技



容器服务官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/148434.html

(0)
上一篇 2023年12月9日 下午12:56
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云对象存储文本内容同步审核

    功能描述 本接口用于进行文本内容的直接审核,请求方式为同步请求。该接口的支持情况如下:说明直接审核纯文本信息,需要先经过 base64 编码(仅支持 UTF8 编码)。支持识别多种违规场景,包括:色情、违法、广告等场景。支持根据不同的业务场景 配置自定义的审核策略。 授权说明 授权策略中 action 设置为 ci:CreateAuditingTextJob…

    腾讯云 2023年12月9日
  • 阿里云日志服务SLS配置用户标识-云淘科技

    本文介绍如何在服务器上配置阿里云账号(主账号)ID为用户标识。 前提条件 已有可用的服务器。 此处的服务器是指与日志服务属于不同账号的ECS、其他云厂商的服务器或自建IDC。 已在服务器上安装Logtail。更多信息,请参见安装Logtail(Linux系统)、安装Logtail(Windows系统)。 背景信息 如果您的服务器是与日志服务属于不同账号的EC…

    2023年12月10日
  • 腾讯云对象存储任务回调

    功能说明 数据万象支持自定义设置回调 URL,在任务完成后,系统向该 URL 发送 HTTP POST 请求,请求体中包含通知内容。您可通过配置的回调地址及时了解任务处理的进展和状态,以便进行其他业务操作。 回调内容 任务完成后,系统会向您设置的回调地址发送回调内容,包含完整节点数据的内容展示如下: TaskFinish Success 2023-05-24…

    腾讯云 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 阿里云负载均衡创建实例-云淘科技

    本文介绍如何创建一个传统型负载均衡CLB公网实例。实例创建后,系统会自动分配一个服务地址,您可以将您的域名解析到该实例的服务地址。 背景信息 一个CLB实例可以添加多个监听和后端服务器。 操作步骤登录传统型负载均衡CLB控制台。在顶部菜单栏,选择CLB实例所属的地域。在实例管理页面,单击创建传统型负载均衡。在购买页面选择一种付费方式。本文选择按量付费。更多信…

    阿里云负载均衡 2023年12月10日
  • 腾讯云对象存储生成预签名 URL

    简介 本文档提供关于生成对象预签名链接的示例代码。关于使用预签名 URL 上传的说明请参见 预签名授权上传, 使用预签名 URL 下载的说明请参见 预签名授权下载。说明建议用户 使用临时密钥 生成预签名,通过临时授权的方式进一步提高预签名上传、下载等请求的安全性。申请临时密钥时,请遵循 最小权限指引原则,防止泄露目标存储桶或对象之外的资源。如果您一定要使用永…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。