行至水穷处 坐看“云”起时

☁️时代应用交付

kubernetes Addon之 kubedns 1.6.7 安装

前言

kubernetes 1.6.7已经废弃kube2sky的dns模式. 本测试使用官方的yaml文件创建。下图描述了kube-dns的组件结构:
《kubernetes Addon之 kubedns 1.6.7 安装》
(exechealthz–>sidecar)

kubedns 接管了以前的skydns,并使用一个树状结构保存从k8s API获取到的信息。 dnsmasq为dns pod提供解析接入服务,并作为一个dns cache保护kubedns。

sidecar执行域名检查监控kubedns和 dnsmasq是否正常提供解析:

 

yaml文件准备

进入之前下载并解压的1.6.7压缩包的 kubernetes/cluster/addons/dns/目录下

将kubedns-cm.yaml, kubedns-sa.yaml,kubedns-controller.yaml.in,kubedns-svc.yaml.in 四个文件拷贝/root/kubedns目录下,并按如下重命名:

配置文件修改

修改kubedns-controller.yaml这个 deployment类型配置文件,主要是将pillar[‘dns_domain’] 替换为cluster.local,以及如何连接到master,具体可以比较以下已经修改好的文件:

修改service yaml文件,主要修改clusterIP为kubelet服务启动时候所指定的dns IP

docker镜像pull

由于上述配置文件里的镜像pull地址是google的服务器地址,中国访问,你懂得,因此需要先人工从其他镜像站点拉取。我已经将三个所要的镜像build到了docker hub里,直接拉取后重新tag即可,注意下面的命令需要在所有node上执行:

执行上述定义的yaml文件

 

检验

以下输出可以看到在弄的172.16.199.37上,pod获得了一个flannel网络分配的IP地址10.2.39.2

相关节点上的docker ps

快速验证pod是否正常提供dns服务:

pod输出:

 

附录排错:

由于忘记拉去pause镜像到本地,导致pod无法起来了,总是现在 containercreating状态:

此时,kubectl get events -n kube-system显示了原因:

解决上述问题后,由于上述deployment文件里没有配置master url地址,导致kube dns 镜像无法启动,导致dnsmasq镜像总是liveness探测失败,修改配置后问题解决,当时的事件输出包含类似错误:

 

点赞
  1. 渡河人说道:

    配置dns需要配置ssl吗

    1. 纳米说道:

      不需要

  2. 渡河人说道:

    我用的是github上的yaml文件,但是运行controller文件时报错: Killing container with id docker://c57ee12790fe565365b13833177c14046373e169da19935fd0d40206862c6870:pod "kube-dns-1631782461-3dqvx_kube-system(78458c79-8bce-11e7-a72c-000c29e37283)" container "dnsmasq" is unhealthy, it will be killed and re-created

    1. 纳米说道:

      看上去 dnsmasq 的容器 liveness 探测失败。 可以跟踪下event事件信息以及容器本身。
      livenessProbe:
      httpGet:
      path: /healthcheck/dnsmasq
      port: 10054
      scheme: HTTP
      initialDelaySeconds: 60
      timeoutSeconds: 5
      successThreshold: 1
      failureThreshold: 5

发表评论

电子邮件地址不会被公开。 必填项已用*标注