Kubernetes實戰[2]: 服務發現機制與Cluster DNS的安裝(無CA認證版)
Kubernetes提供了兩種發現Service的方法:
1.環境變量
當Pod運行的時候,Kubernetes會將之前存在的Service的信息通過環境變量寫到Pod中。
這種方法要求Pod必須要在Service之後啟動。
在Service之前啟動的Pod就不會有該Service的環境變量。
采用DNS的方式就沒有這個限制。
2.DNS
當有新的Service創建時,就會自動生成一條DNS記錄。
使用這種方法,需要安裝Cluster DNS。
在kubernetes中每一個service都會被分配一個虛擬IP,每一個Service在正常情況下都會長時間不會改變,這個相對於pod的不定IP,對於集群中APP的使用相對是穩定的。但是Service的信息註入到pod目前使用的是環境變量的方式,並且十分依賴於pod(rc)和service的創建順序,這使得這個集群看起來又不那麽完美,於是kubernetes以插件的方式引入了DNS系統,利用DNS對Service進行一個映射,這樣我們在APP中直接使用域名進行引用,避免了之前的變量泛濫問題,也避免了創建順序的尷尬局面。
Kubernetes1.2.7版本下Cluster DNS的安裝
閱讀github上官方源碼發現:
Cluster DNS自Kubernetes1.3版本開始,結構發生了變化。這裏先以1.2.7版本作為研究。
Cluster DNS擴展插件用於支持Kubernetes的服務發現機制,1.2.7版本中,Cluster DNS主要包含如下幾項:
1)SkyDNS
提供DNS解析服務。
2)Etcd
用於DNS的存儲。
3)Kube2sky
監聽Kubernetes,當有新的Service創建時,將其註冊到etcd上。
4)healthz
提供對skydns服務的健康檢查功能。
在Master服務器上下載Kubernetes發布包
Cluster DNS在Kubernetes發布包的cluster/addons/dns目錄下
[root@k8s-master home]# yum -y install wget [root@k8s-master home]# wget https://codeload.github.com/kubernetes/kubernetes/tar.gz/v1.2.7 [root@k8s-master home]# tar -xf kubernetes-1.2.7.tar.gz [root@k8s-master home]# ls kubernetes-1.2.7 kubernetes-1.2.7.tar.gz sheng [root@k8s-master home]# cd kubernetes-1.2.7/cluster/addons/dns [root@k8s-master dns]# ls kube2sky MAINTAINERS.md OWNERS README.md skydns skydns-rc.yaml.in skydns-svc.yaml.in #skydns-rc.yaml.in和skydns-svc.yaml.in是兩個模板文件,通過設置的環境變量修改其中的相應屬性值,可以生成Replication Controller和Service的定義文件。
需要註意,skydns服務使用的clusterIP需要我們指定一個固定的IP地址,每個Node的kubelet進程都將使用這個IP地址,不能通過Kuberneters自動給skydns分配。
1. skydns配置文件
創建DNS服務的RC配置文件,在這個RC配置中包含了3個Container的定義
Kubernetes實戰[2]: 服務發現機制與Cluster DNS的安裝(無CA認證版)