kubernetes的使用四--安装kube-dns

在安装好了k8s整个环境,安装完成dashboard工具之后,接下来我们来进行安装kube-dns.

在github下载kubernetes代码,在目录kubernetes/cluster/addons/dns下,有很多kubedns的yaml部署文件,我们现在只需要关注kubedns-cm.yaml, kubedns-controller.yaml.sed, kubedns-sa.yaml, kubedns-svc.yaml.sed这4个文件,如下图所示。

kubernetes的使用四--安装kube-dns_第1张图片

为什么只需要关注这4个文件呢,因为我们看一下部署dns的脚本是怎么部署的,在kubernetes/centos/deployAddons.sh脚本中,有部署kubedns的函数,如下图所示。

kubernetes的使用四--安装kube-dns_第2张图片

部署函数:

function deploy_dns {
echo "Deploying DNS on Kubernetes"
sed -e "s/\\\$DNS_DOMAIN/${DNS_DOMAIN}/g" "${KUBE_ROOT}/cluster/addons/dns/kubedns-controller.yaml.sed" > kubedns-controller.yaml
sed -e "s/\\\$DNS_SERVER_IP/${DNS_SERVER_IP}/g" "${KUBE_ROOT}/cluster/addons/dns/kubedns-svc.yaml.sed" > kubedns-svc.yaml

KUBEDNS=`eval "${KUBECTL} get services --namespace=kube-system | grep kube-dns | cat"`

if [ ! "$KUBEDNS" ]; then
# use kubectl to create kube-dns deployment and service
${KUBECTL} --namespace=kube-system create -f kubedns-sa.yaml
${KUBECTL} --namespace=kube-system create -f kubedns-cm.yaml
${KUBECTL} --namespace=kube-system create -f kubedns-controller.yaml
${KUBECTL} --namespace=kube-system create -f kubedns-svc.yaml

echo "Kube-dns deployment and service is successfully deployed."
else
echo "Kube-dns deployment and service is already deployed. Skipping."
fi

echo
}

 

可以函数中部署dns只是修改了kubedns-controller.yaml.sed 中的DNS_DOMAIN变量,修改了kubedns-svc.yaml.sed 文件中的DNS_SERVER_IP变量,并重命名为kubedns-controller.yaml 和kubedns-svc.yaml, 最后就是kubectl create了。OK,接下来我们把DNS_DOMAIN变量修改成cluster.local, 默认值就是这个,我们定义DNS_SERVER_IP 为10.254.0.100,这个ip必须在service-cluster-ip-range=10.254.0.0/16中,否则会出错。

在安装前,我们需要更换下镜像,你懂得,google的镜像用不了

修改kubedns-controller.yaml 文件中的3个镜像

# image: gcr.io/google_containers/k8s-dns-kube-dns-amd64:1.14.1
image: dockergy/k8s-dns-kube-dns-amd64:1.14.1

 

# image: gcr.io/google_containers/k8s-dns-dnsmasq-nanny-amd64:1.14.1
image: dockergy/k8s-dns-dnsmasq-nanny-amd64:1.14.1

 

# image: gcr.io/google_containers/k8s-dns-sidecar-amd64:1.14.1
image: dockergy/k8s-dns-sidecar-amd64:1.14.1

 

进行安装kubedns

${KUBECTL} --namespace=kube-system create -f kubedns-sa.yaml
${KUBECTL} --namespace=kube-system create -f kubedns-cm.yaml
${KUBECTL} --namespace=kube-system create -f kubedns-controller.yaml
${KUBECTL} --namespace=kube-system create -f kubedns-svc.yaml

 

看页面pod,可以看到pod成功创建

kubernetes的使用四--安装kube-dns_第3张图片

Node节点使用dns解析服务kubelet配置文件中加上dns参数

cat /etc/kubernetes/kubelet

###

# kubernetes kubelet (minion) config

 

# The address for the info server to serve on (set to 0.0.0.0 or "" for all interfaces)

KUBELET_ADDRESS="--address=0.0.0.0"

 

# The port for the info server to serve on

# KUBELET_PORT="--port=10250"

 

# You may leave this blank to use the actual hostname

KUBELET_HOSTNAME="--hostname-override=162.3.160.63"

 

# location of the api-server

KUBELET_API_SERVER="--api-servers=http://162.3.160.60:8080"

 

# pod infrastructure container

KUBELET_POD_INFRA_CONTAINER="--pod-infra-container-image=registry.access.redhat.com/rhel7/pod-infrastructure:latest"

 

# Add your own!

KUBELET_ARGS="--cluster_dns=10.254.0.100 --cluster_domain=cluster.local"

 

接下来我们用安装一个geuestbook来测试一下,我们安装的dns是否可用

在kubernetes源代码目录下,kubenetes/examples/guestbook/all-in-one/guestbook-all-in-one.yaml文件,我们修一下frontend的service,设置type为NodePort, 增加nodePort: 30001,我们可以通过节点ip:nodePort的形式进行访问guestbook,如下图所示:

 

kubernetes的使用四--安装kube-dns_第4张图片

kuectl create -f guestbook-all-in-one.yaml

 

创建成功pod之后我们需要验证一下dns是否可用了,我们随意找一个redis-slave 容器,查看所在的节点,ssh到节点上,进入docker

kubernetes的使用四--安装kube-dns_第5张图片

 

查看docker id

kubernetes的使用四--安装kube-dns_第6张图片

进入docker,docker exec -it 31110e4cf455 /bin/bash

进入docker之后,cat /etc/resolv.conf

search default.svc.cluster.local svc.cluster.local cluster.local

nameserver 10.254.0.100

nameserver 8.8.8.8

options ndots:5

 

可以看到nameserver 有指向我们的dns服务ip,这个需要在kubelet参数中指定cluster-dns 才会有这个。安装dns测试工具nslookup

apt-get update

apt-get install dnsutils

安装完成之后,nslookup redis-master

nslookup redis-master

Server:        10.254.0.100

Address:    10.254.0.100#53

 

Name:    redis-master.default.svc.cluster.local

Address: 10.254.98.230

由此可见,dns正常生效了。

你可能感兴趣的:(kubernetes的使用四--安装kube-dns)