使用 CoreDNS sidecar 来优化 Kubernetes Pod dns 性能

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 介绍一种给业务 Pod 添加 dns cache sidecar 来增强 dns 性能的方法。

kubernetes 集群内,应用可能会遇到 dns 性能问题。该方法需要重制镜像;
下面介绍一种给业务 Pod 添加 dns cache sidecar 来增强 dns 性能的方法,虽然无需重制镜像,但需要改动应用 YAML 配置。可以根据实际情况选择合适优化方法。

部署 dns-cache 配置

将下列 dns-cache 的配置部署到应用的命名空间。该配置说明:

  1. 输出 log 和 errors 信息到标准输出。
  2. 将 dns 查询请求转发到 /etc/resolv.conf 配置的上游 dns 服务器中。
  3. cache 所有请求 30s。(可以调整 cache 时间,配置 prefetch 策略。)
  4. 配置 reload ,当该配置文件有变动时,可以自动 reload 并应用新配置。
apiVersion: v1
kind: ConfigMap
data:
  Corefile: |
    .:53 {
      errors
      log
      forward . /etc/resolv.conf
      cache 30
      reload
    }
metadata:
  name: dns-cache

给业务 Pod 配置 dns sidecar

  1. 给 pod 配置 sidecar dns-cache。
  2. 通过 postStart 机制,调整业务容器的 dns 配置,把 sidecar 地址作为首选项。
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: ubuntu
  labels:
    app: ubuntu
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: ubuntu
    spec:
      containers:
      - name: ubuntu
        image: ubuntu:latest
        command: ["sleep", "100000"]
        lifecycle:
          postStart:
            exec:
              command: ["/bin/sh", "-c", "echo \"$(sed \'1i nameserver 127.0.0.1\' /etc/resolv.conf)\" > /etc/resolv.conf"]
      - name: dns-cache
        image: registry.cn-hangzhou.aliyuncs.com/acs/coredns:1.6.2
        args: [ "-conf", "/etc/coredns/Corefile" ]
        volumeMounts:
          - mountPath: /etc/coredns
            name: config-volume
            readOnly: true
      volumes:
      - name: config-volume
        configMap:
          name: dns-cache
          items:
          - key: Corefile
            path: Corefile
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1天前
|
Kubernetes 固态存储 调度
在K8S中,如何在指定节点上部署Pod呢?
在K8S中,如何在指定节点上部署Pod呢?
|
1天前
|
存储 缓存 Kubernetes
在K8S中,业务Pod数据如何存储?
在K8S中,业务Pod数据如何存储?
|
1天前
|
Prometheus Kubernetes 监控
在K8S中,Pod请求另一个pod偶尔出现超时或延迟,如何排查?
在K8S中,Pod请求另一个pod偶尔出现超时或延迟,如何排查?
|
1天前
|
Kubernetes 监控 测试技术
在K8S中,如何查看pod状态的详情? 事件显示cpu不足如何处理?
在K8S中,如何查看pod状态的详情? 事件显示cpu不足如何处理?
|
1天前
|
Kubernetes Perl 容器
在K8S中,如果pod处于不健康状态怎么排查?
在K8S中,如果pod处于不健康状态怎么排查?
|
1天前
|
存储 缓存 Kubernetes
在K8S中,Pod优雅终止过程是什么?
在K8S中,Pod优雅终止过程是什么?
|
1天前
|
Prometheus Kubernetes 监控
在K8S中,当Pod业务量比较大时候,如何实现水平伸缩和扩容?
在K8S中,当Pod业务量比较大时候,如何实现水平伸缩和扩容?
|
1天前
|
Kubernetes API Perl
在K8S中,svc关联pod失败原因有哪些?
在K8S中,svc关联pod失败原因有哪些?
|
1天前
|
Kubernetes 容器 Perl
在K8S中,如何查看Pod中某个容器日志?
在K8S中,如何查看Pod中某个容器日志?
|
1天前
|
存储 Kubernetes Perl
在K8S中,如何知道Pod的数据存储在哪里?
在K8S中,如何知道Pod的数据存储在哪里?

相关产品

  • 容器服务Kubernetes版
  • 推荐镜像

    更多