kubernetes 安装dns组件

2023-11-13

DNS 组件历史版本有skydns、kube-dns和coredns三个,k8s1.3版本之前使用skydns,之后的版本到1.17及之间的版本使用kube-dns,目前主要使用coredns,DNS组件用于解析k8s集群中service name 所对应的ip地址
官方文档:
coreDNS官方文档
在这里插入图片描述
获取官方包和yaml文件:
官方包和yaml文件地址

github搜索kubernetes,找到相应的k8s版本,点击changelog
在这里插入图片描述
在这里插入图片描述
需要下载这几个包:
在这里插入图片描述
client:
在这里插入图片描述
server:
在这里插入图片描述
node:
在这里插入图片描述
下载之后上传到master并解压,解压之后的目录结构如下图:
在这里插入图片描述
相关yaml文件和插件目录,如dns,dashboard等
在这里插入图片描述
相关二进制文件:
在这里插入图片描述
coredns一般用coredns.yaml.base 修改
在这里插入图片描述

官方yaml文件:

# __MACHINE_GENERATED_WARNING__

apiVersion: v1
kind: ServiceAccount
metadata:
  name: coredns
  namespace: kube-system
  labels:
      kubernetes.io/cluster-service: "true"
      addonmanager.kubernetes.io/mode: Reconcile
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
    addonmanager.kubernetes.io/mode: Reconcile
  name: system:coredns
rules:
- apiGroups:
  - ""
  resources:
  - endpoints
  - services
  - pods
  - namespaces
  verbs:
  - list
  - watch
- apiGroups:
  - ""
  resources:
  - nodes
  verbs:
  - get
- apiGroups:
  - discovery.k8s.io
  resources:
  - endpointslices
  verbs:
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
    rbac.authorization.kubernetes.io/autoupdate: "true"
  labels:
    kubernetes.io/bootstrapping: rbac-defaults
    addonmanager.kubernetes.io/mode: EnsureExists
  name: system:coredns
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:coredns
subjects:
- kind: ServiceAccount
  name: coredns
  namespace: kube-system
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
  labels:
      addonmanager.kubernetes.io/mode: EnsureExists
data:
  Corefile: |
    .:53 {
    #errors:错误信息标准输出
        errors
        #心跳检测,检测服务是否存活,在CoreDNS的http://localhost:8080/health端口提供CoreDNS服务的健康报告
        health {
            lameduck 5s
        }
        #监听8181端口,当coredns的插件已经就绪时,访问该接口会返回200 OK
        ready
        #需要修改的地方(__DNS__DOMAIN__),这个是在创建k8s集群时在/etc/kubeasz/clusters/k8s-cluster/hosts中指定的CLUSTER_DNS_DOMAIN="clusterdujie.local"
        kubernetes kubernetes  clusterdujie.local in-addr.arpa ip6.arpa {  

            pods insecure
            fallthrough in-addr.arpa ip6.arpa
            ttl 30
        }
        prometheus :9153
        #forward就表示coredns解析不了的dns域名往哪里转发。可以指向公司内部dns地址
        forward . 223.6.6.6 {
            max_concurrent 1000
        }
        #dns缓存,如果第一次请求,先去etcd查询再用coredns缓存30s,如果30s内再有请求访问直接通过缓存返回
        cache 30
        #检测域名解析是否有死循环,如coredns转发给内网DNS服务器,而内网服务器又转发给coredns,如果发现解析时死循环,则强制终止coredns进程(kubernetes会重建),如果不加该参数可能会导致coredns资源利用率非常高甚至卡死
        loop
        #检测corefile是否更改,再重新编辑configmap配置后,默认2分钟会优雅的自动加载新的配置
        reload
        #轮询DNS域名解析,如果一个域名存在多个记录则轮询解析
        loadbalance
    }
    #把myserver。online的请求转发到下面的地址
    myserver.online {
      forward . 192.168.17.131:53
    }
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: coredns
  namespace: kube-system
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/name: "CoreDNS"
spec:
  # replicas: not specified here:
  # 1. In order to make Addon Manager do not reconcile this replicas parameter.
  # 2. Default is 1.
  # 3. Will be tuned in real time if DNS horizontal auto-scaling is turned on.
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
  selector:
    matchLabels:
      k8s-app: kube-dns
  template:
    metadata:
      labels:
        k8s-app: kube-dns
    spec:
      securityContext:
        seccompProfile:
          type: RuntimeDefault
      priorityClassName: system-cluster-critical
      serviceAccountName: coredns
      affinity:
        podAntiAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 100
            podAffinityTerm:
              labelSelector:
                matchExpressions:
                  - key: k8s-app
                    operator: In
                    values: ["kube-dns"]
              topologyKey: kubernetes.io/hostname
      tolerations:
        - key: "CriticalAddonsOnly"
          operator: "Exists"
      nodeSelector:
        kubernetes.io/os: linux
      containers:
      - name: coredns
      #镜像地址默认是谷歌的,需要更换成国内镜像源或者官方hub仓库源,下面可以看图
        image:  coredns/coredns:1.8.6
        imagePullPolicy: IfNotPresent
        resources:
        #限制coredns可以使用多少资源
          limits:
            memory: 200Mi  #200毫核 ,一般生产会写2000Mi 或者直接写2
          requests:
            cpu: 100m
            memory: 70Mi
        args: [ "-conf", "/etc/coredns/Corefile" ]
        volumeMounts:
        - name: config-volume
          mountPath: /etc/coredns
          readOnly: true
        ports:
        - containerPort: 53
          name: dns
          protocol: UDP
        - containerPort: 53
          name: dns-tcp
          protocol: TCP
        - containerPort: 9153
          name: metrics
          protocol: TCP
        livenessProbe:
          httpGet:
            path: /health
            port: 8080
            scheme: HTTP
          initialDelaySeconds: 60
          timeoutSeconds: 5
          successThreshold: 1
          failureThreshold: 5
        readinessProbe:
          httpGet:
            path: /ready
            port: 8181
            scheme: HTTP
        securityContext:
          allowPrivilegeEscalation: false
          capabilities:
            add:
            - NET_BIND_SERVICE
            drop:
            - all
          readOnlyRootFilesystem: true
      dnsPolicy: Default
      volumes:
        - name: config-volume
          configMap:
            name: coredns
            items:
            - key: Corefile
              path: Corefile
---
apiVersion: v1
kind: Service
metadata:
  name: kube-dns
  namespace: kube-system
  annotations:
    prometheus.io/port: "9153"
    prometheus.io/scrape: "true"
  labels:
    k8s-app: kube-dns
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/name: "CoreDNS"
spec:
  selector:
    k8s-app: kube-dns
    #clusterIP:dns地址,这个地址可以创建一个pod然后查看pod的/etc/resolv.conf的namespaces查看,如下面
  clusterIP: 10.100.0.2
  ports:
  - name: dns
    port: 53
    protocol: UDP
  - name: dns-tcp
    port: 53
    protocol: TCP
  - name: metrics
    port: 9153
    protocol: TCP

查看coredns的svc地址,上面的10.100.0.1是kubernetes的api的地址,k8s内部会将第一个地址分配给apiserver
在这里插入图片描述
镜像更换:

在这里插入图片描述
在这里插入图片描述
修改完成后apply -f coredns.yaml,启动成功后进入pod查看是否能够进行域名解析测试
在这里插入图片描述
在这里插入图片描述
nslookup测试该域名是否可以解析
在这里插入图片描述
一般会将coredns多副本,保证业务解析正常,会以轮询的方式请求,或者修改limit占用资源。一般cpu为2核,内存为3个Gi就够了,如果不够就多副本
在这里插入图片描述
k8s域名固定格式:
ping kube-dns.kube-system.svc.clusterdujie.local
名称.namespace.svc.域名后缀
在这里插入图片描述
coredns性能优化:
1、(pod级别缓存)在pod中添加dnsmasq缓存,优缺点:pod自己缓存自己的,缓存不共享是隔离的,每个容器中都需要添加域名解析记录
2、(node级别缓存)缓存放在node上,localdns,pod第一次宿主机请求的时候,宿主机向coredns请求解析,获取解析后缓存到node,下次pod再请求直接通过node节点的localdns直接返回给pod

[root@master01 ~]# vim /etc/kubeasz/clusters/k8s-cluster/config.yml
在这里插入图片描述
3、(coredns级别缓存)在coredns容器里,修改缓存时间,默认30s,可以调成180s,不过需要coredns内存比较大,,缓存时间设置不要太长也不要太短

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

kubernetes 安装dns组件 的相关文章

随机推荐

  • 5G QoS管理及与DRB映射关系

    前言 无线网络是一个等级森严的体系 一直以来 无线资源都是紧张的 因而无线网络上的各种业务所享受的服务也无法平等 网络需要优先保障重要的业务 比如 相比普通上网的数据业务 音视频数据业务的优先级会更高 相比音视频数据业务 语音通话的优先级会
  • JVM对象内存布局

    HotSpot虚拟机中 对象在内存中的存储布局分3部分 对象头 实例数据 对齐填充 一 对象头 对象头包含两部分信息 对象的运行时数据和类型指针 1 对象的运行时数据 对象的运行时数据非常多 主要有哈希码 GC分代年龄 锁状态标志 线程持有
  • VMware虚拟机安装Linux系统教程(图文详解)

    一 安装 VMware 1 VMware虚拟机下载 链接 https pan baidu com s 1TElrJharG7jX25D9QO2Iyw pwd 5a8n 提取码 5a8n 安装 选一下安装地址 一直下一步即可 可能会要求重启电
  • Yii Framework 开发教程(30) Zii组件-ListView 示例

    CListView可以用来显示列表 CListView支持使用自定义的View模板显示列表的的记录 因此可以非常灵活的显示数据的表 这点有点像Android的ListView CListView 支持分页和排序 分页和排序支持使用AJAX实
  • vue项目部署到服务器打不开,Vue 项目部署到服务器的问题解决方法_盂希_前端开发者...

    相信很多小伙伴在用开发的时候 在 如何打包 基于 如何部署 将打包出来的 但有时候 我们会直接将dist文件扔到服务端 出现的问题 打包到服务器后 出现 打包到服务器后 出现空白页的问题 打包到服务器后 出现引入的 打包到服务器后 出现路由
  • MD5,SHA1,SHA256,NTLM,LM等Hash在线破解网站收集

    MD5 http hashchecker de find html http paste2 org p 441222 http r0ot podzemlje net x md5 http hashkiller com index php a
  • i春秋 从0到1CTFer成长之路-CTF中的SQL-1注入

    这是本萌新第一次写博客 作为对前面的学习的总结 如有错误 欢迎各位师傅们指正 如何判断注入类型我就不做过多的解释 不知道同学请移步去学习 手动狗头 CTF中的SQL注入 我采用的是手注 根据经验判断是字符型注入 接下来就来查看有几列 ord
  • 区块链学习7:超级账本项目Hyperledger与Fabric以及二者的关系

    前往老猿Python博文目录 一 超级账本 hyperledger 超级账本 hyperledger 是Linux基金会于2015年发起的推进区块链数字技术和交易验证的开源项目 成员包括金融 银行 物联网 供应链 制造和科技行业的领头羊 h
  • GBDT和随机森林的区别

    GBDT和随机森林的相同点 1 都是由多棵树组成 2 最终的结果都是由多棵树一起决定 GBDT和随机森林的不同点 1 组成随机森林的树可以是分类树 也可以是回归树 而GBDT只由回归树组成 2 组成随机森林的树可以并行生成 而GBDT只能是
  • 关注物联网、关注NB-IoT

    概述 关注物联网 关注NB IoT 跟紧时代步伐 让更多人深入理解5G用意 在当下情况下 今天就来来聊一聊NB IoT 特意整理了一些NB IoT的入门级问题 问 NB IoT的优势是什么 答 支持单小区50K用户连接 做上传用低功耗优势明
  • 【SpringBoot深入浅出系列】SpringBoot集成Eureka及Feign

    目录 前言 一 Eureka 是什么 二 Feign 是什么 三 集成步骤 1 创建 Eureka 服务注册中心 1 添加依赖 2 添加配置 3 启动类添加注解 4 启动服务 2 创建 SpringBoot 项目 provider 1 添加
  • MySQL图书管理系统设计

    目录 一 项目简介 二 项目分析 1 需求分析 图书管理功能 书籍的借出 归还 信息操作功能 人员管理功能 2 需求表信息分析 图书管理需求表分析 信息操作表信息分析 人员信息表 三 项目实施 1 创建图书信息表 2 创建人员信息表 3 创
  • SQL自学,mysql从入门到精通 --- 第 1 天,系统环境搭建,mysql部署

    1 SQL简介 SQL Structured Query Language 是一种用于管理和操作关系型数据库的编程语言 它被用于创建 修改和查询数据库 以及执行诸如数据插入 删除和更新等各种任务 SQL在Web开发 数据分析和数据库管理系统
  • vscode中设置字体大小_史上最全vscode配置使用教程

    点击上方蓝字 前端码头 一起玩耍 工欲善其事 必先利其器 想要优雅且高效的编写代码 必须熟练使用一款前端开发工具 但前端开发工具数不胜数 像HBuilder Sublime Text WebStorm Visual Studio Code
  • JSP( `EL表达式——获取数据` 和 `JSTL标签——展现数据`)(已被替代) 、 `MVC模式` 和 `三层架构`实现增删改查操作

    1 JSP 概述 JSP 全称 Java Server Pages Java 服务端页面 是一种动态的网页技术 其中既可以定义 HTML JS CSS等静态内容 还可以定义 Java代码的动态内容 也就是 JSP HTML Java JSP
  • 【Linux】Ubuntu开启root账户,以及后续连接MobaXterm

    一 开启root账户 1 首先在Ubuntu中打开终端 输入 sudo passwd root 完成root用户密码设置 效果如下图所示 2 输入下列代码 修改文件配置 sudo vim usr share lightdm lightdm
  • python脚本将json文件生成C语言结构体

    1 引言 以前用过python脚本根据excel生成相关C语言代码 其实本质就是文件的读写 主要是逻辑问题 这次尝试将json文件生成C语言的结构体 2 代码 这是一个json文件 生成这个结构体的本质是深度优先遍历 为了适应最复杂的情况
  • 很火的AI换脸怎么做的?方法其实非常简单

    网上很火的AI换脸是怎么做到的呢 将自己的脸部特征换到名人照片中 可以让我们看到自己和名人的组合效果如何 还可以将自己的脸部特征换到历史人物的照片中 看看自己是否有历史人物的气质 这种操作也非常有趣 看看自己是否适应不同的文化氛围 这也是一
  • 参加CSDN第六期编程竞赛感想

    CSDN编程竞赛报名地址 https edu csdn net contest detail 16 请不要删掉此地址 前言 背景 个人虽已经在IT行业工作多年 算法上是小白 没有多少积累 为了学习进步 自我提升 偶然机会看到CSDN举行的第
  • kubernetes 安装dns组件

    DNS 组件历史版本有skydns kube dns和coredns三个 k8s1 3版本之前使用skydns 之后的版本到1 17及之间的版本使用kube dns 目前主要使用coredns DNS组件用于解析k8s集群中service