启动DNS服务

DNS组件在kubernetes集群内部提供了dns解析服务,在获取容器的实时日志时,kubernetes master需要hostname到ip的解析,DomeOS的实现方式通过集群内dns组件解析hostname。这个功能也可以通过配置master的host实现。DNS组件还可以为提供集群内域名,node和pod可以直接通过域名访问service。在启动kubernetes相关组件时需要添加DNS信息。

配置集群内dns服务

在创建kubernetes集群后,一套Kubernetes集群已经创建完毕并加入若干主机,集群内dns服务将通过yaml文件以Kuberbetes Service形式启动。相关文件如下表所示:

文件名说明下载地址
dns.yamldns服务启动yaml文件http://domeos-script.bjctc.scs.sohucs.com/dns.yaml
kubectl执行文件见上述步骤程序包

启动命令

  1. kubectl --server <kube-apiserver服务地址> create -f dns.yaml

参数说明

执行启动命令前需要修改dns.yaml文件中的如下参数:

  • skydns-svc service中的clusterIP为部署Kubernetes集群时设置的—cluster-dns。

  • skydns Deployment中args下的—machines为etcd集群的服务地址,各个地址间以逗号分隔,必须带" http:// "前缀。

  • skydns Deployment中args下的—nameservers为集群中的主机使用的外部dns服务(CentOS系统中为/etc/resolv.conf下配置的非集群nameserver),带端口号,多个DNS服务则以半角逗号分隔。

  • skydns Deployment中args下的—domain为部署Kubernetes集群时设置的—cluster-domain。

  • skydns Deployment中args下的—path-prefix为想要自定义的etcd存储路径的前缀,必须与skydns中的—etcd_prefix相同,默认为skydns。

  • kube2sky Deployment中args下的—etcd_servers为ETCD的服务地址,可以设置多个,且必需在—machines设置的集群中,必须带" http:// "前缀。

  • kube2sky Deployment中args下的—domain为部署Kubernetes集群时设置的—cluster-domain。

  • kube2sky Deployment中args下的—etcd_prefix为想要自定义的etcd存储路径的前缀,必须与skydns中的—path-prefix相同,默认为skydns。

说明

  • 注意在执行启动命令前按需修改dns.yaml文件中的参数。

  • 执行完毕后将创建名为skydns-svc的service,名为skydns的Deployment和名为kube2sky的Deployment。

样例

  1. kubectl --server 10.10.10.10:8080 create -f dns.yaml

验证

  • 通过以下命令获取集群svc列表,确认skydns-svc是否已创建:
  1. kubectl --server <kube-apiserver服务地址> get svc
  • 通过以下命令获取集群pod列表,确认skydns-为前缀和kube2sky-为前缀的两个pod是否处于Running状态,如skydns-u44ey和kube2sky-2h1b9:
  1. kubectl --server <kube-apiserver服务地址> get pods
  • 查看node上的/etc/resolv.conf文件,确认前两行是否为如下内容(其中的domeos.local为—cluster-domain参数的值,172.16.40.1为—cluster-dns参数的值):
  1. search default.svc.domeos.local svc.domeos.local domeos.local
  2. nameserver 172.16.40.1

若没有,添加如上格式内容

  • 在node上进行dns解析验证,方式有多种,如:
  1. nslookup skydns-svc.default.svc.domeos.local

如果没有安装nslookup,也可通过ping间接验证:

  1. ping skydns-svc.default.svc.domeos.local -c 1

解析出IP地址则说明dns服务创建成功。

  • 在通过kubernetes创建的容器内部验证,方法同步骤4。