看了kubernetes 權威指南 遇見了dns這一塊。於是便按照書上的方式部署了一下。 書上使用的方式是:kube2sky+etcd+skydns的方式。按照書上的yaml寫了一遍,發現無論如何都無法將dns部署到kubernetes 的集群中,實在沒辦法只能著文檔了。於是乎發現kubernete ...
看了kubernetes 權威指南 遇見了dns這一塊。於是便按照書上的方式部署了一下。
書上使用的方式是:kube2sky+etcd+skydns的方式。按照書上的yaml寫了一遍,發現無論如何都無法將dns部署到kubernetes 的集群中,實在沒辦法只能著文檔了。於是乎發現kubernetes 在1.2以後就已經不使用上面那套dns。1.2以後使用kube-dns+dnsmasq-metrics+kube-dnsmasq的方式部署。下麵就是我部署遇見的坑:
1.dns中無法連接apiserver:8080埠(kube-dashborad也有這類問題)。
kube-dns無法連接apiserver的8080埠,一般的問題出現在iptables沒有關閉(centos7:systemctl stop firewalld;centos6:service iptables stop )。還有開啟ip_forward=1(開啟ip轉發)。這兩步非常關鍵。建議開機不啟動。
2. busybox cant reach DNS service(就是創建的pod無法訪問dns的服務)
我這裡導致這種問題的是由於flanneld重啟,導致flanneld網卡變化,但是docker使用以前的flanneld生成的配置文件。所以nodes之間的docker0網卡無法進行連接。所以,這裡需要在flanneld的啟動文件中添加這一步:ExecStartPost=/usr/bin/mk-docker-opts.sh -k DOCKER_OPTS -d /run/flannel/docker(centos6自行添加)。然後在docker啟動文件中加入讀取/run/flannel/docker變數這一步,並且將讀取的變數加入到啟動。$DOCKER_OPT_BIP $OCKER_OPT_IPMASQ $DOCKER_OPT_MTU(這三個變數對應上面的/run/flannel/docker)
3.將各台機器的主機名和在集群中的名字設置相同,最好加入到/etc/hosts中。
總結: 細節,細節,細節。