1. 程式人生 > >Kubernetes實戰[2]: 服務發現機制與Cluster DNS的安裝(無CA認證版)

Kubernetes實戰[2]: 服務發現機制與Cluster DNS的安裝(無CA認證版)

服務發現機制與Cluster DNS的安

服務發現機制

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認證版)