ubuntu 16.04 下安裝kubernetes 1.6 之kube-dns
1 前言
如果說service解決了pod 服務發現和負載均衡的問題,那麼kube-dns則是為了解決service的發現問題而誕生的。試想下這樣一個場景,當不知道service ip 的情況下,應用程式如果想要訪問後端服務,只有用kubectl get svc -n namespace來查詢service對應的IP和埠,再改配置,這樣每新建一個服務就要改一次配置,也是夠折騰的。那麼這個問題如果解決,這就是本文所要將的內容。2 使用kube-dns發現service
kube-dns外掛提供了三個容器功能如下:kubedns容器
監視kubernetes service資源並更新DNS記錄替換etcd,使用TreeCache資料結構儲存DNS記錄並實現skydns的backend介面
接入skydns,對dnsmasq提供DNS查詢服務
dnsmasq容器
對叢集提供DNS查詢服務設定kubedns為upstream
提供DNS快取,降低kubedns負載,提高效能
exechealthz容器
定期檢查kubedns和dnsmasq的監控狀態為kubernetes的活性檢測提供HTTP API
3 kubedns,dnsmasq,exechealthz原理圖
4 kube-dns外掛安裝
kube-dns的安裝其實就是啟動三個容器:kubedns,dnsmasq,exechealthz先建立一個kube-dns service
cat kubedns-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: kube-dns
namespace: kube-system
labels:
k8s-app: kube-dns
spec:
selector:
k8s-app: kube-dns
clusterIP: 10.10.10.10 #和各個節點的kubelet啟動引數的--cluster-dns保持一致**
ports:
- name: dns
port: 53
protocol: UDP
- name: dns-tcp
port: 53
protocol: TCP
建立kube-dns RC,建立三個容器
cat kubedns-rc.yaml
apiVersion: v1
kind: ReplicationController
metadata:
name: kube-dns-v6
namespace: kube-system
labels:
k8s-app: kube-dns
version: v6
kubernetes.io/cluster-service: "true"
spec:
replicas: 1
selector:
k8s-app: kube-dns
version: v6
template:
metadata:
labels:
k8s-app: kube-dns
version: v6
spec:
containers:
- name: kubedns
image: siriuszg/kubedns-amd64:latest
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: 100m
memory: 50Mi
livenessProbe:
httpGet:
path: /healthz-kubedns
port: 8080
scheme: HTTP
initialDelaySeconds: 60
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
readinessProbe:
httpGet:
path: /readiness
port: 8081
scheme: HTTP
initialDelaySeconds: 3
timeoutSeconds: 5
args:
- --domain=cluster.local. #和各個節點的kubelet中的啟動引數--cluster-domain保持一致,cluster.local後面有個“.”**
- --dns-port=10053
- --kube-master-url=http://192.168.100.20:8080
ports:
- containerPort: 10053
name: dns-local
protocol: UDP
- name: kube-dnsmasq
image: ist0ne/kube-dnsmasq-amd64:latest
imagePullPolicy: IfNotPresent
livenessProbe:
httpGet:
path: /healthz-dnsmasq
port: 8080
scheme: HTTP
initialDelaySeconds: 60
timeoutSeconds: 5
successThreshold: 1
failureThreshold: 5
args:
- --cache-size=1000
- --no-resolv
- --server=127.0.0.1#10053
- --log-facility=-
ports:
- containerPort: 53
name: dns
protocol: UDP
- containerPort: 53
name: dns-tcp
protocol: TCP
- name: healthz
image: ist0ne/exechealthz-amd64:latest
imagePullPolicy: IfNotPresent
resources:
limits:
memory: 50Mi
requests:
cpu: 10m
memory: 50Mi
args:
- --cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1 >/dev/null
- --url=/healthz-dnsmasq
- --cmd=nslookup kubernetes.default.svc.cluster.local 127.0.0.1:10053 >/dev/null
- --url=/healthz-kubedns
- --port=8080
- --quiet
ports:
- containerPort: 8080
protocol: TCP
dnsPolicy: Default
注意:各個節點的kubelet啟動引數中要加上--cluster-dns和--cluster-domain,--cluster-dns的值就是service中的clusterIP: 10.10.10.10,--cluster-domain就是rc中的- --domain=cluster.local
這樣容器啟動就自動在/etc/resolv.conf中新增如下欄位
分別執行kubectl create -f kubedns-svc.yaml ,kubectl create -f kubedns-rc.yaml 建立kubedns的service和pod
5 驗證
透過上述各步的操作,kube-dns的外掛就安裝好了,先來看看我們都安裝了什麼,可以透過kubectl也可以透過dashboard來檢視我們建立的service,rc和pod,下面的截圖是透過kubectl來檢視的從圖中可以看出啟動了kube-dns-v6-41d2c這個pod,啟在192.168.100.93這個節點上,分配的IP是172.17.2.5,共啟了3個容器,這三個容器共享IP。
從default namespace中找一個pod,用這個pod驗證kube-dns
選擇 tomcat-gllz3這個pod,理由是這個pod中的容器裝有nslookup。
從圖中可以看出所有的service都可以透過kubedns解析出來
注意:kubedns的域名規則是service-name.namespace.svc.domain
service-name 即為某個service的name
namespace 為該service所在的namespace
svc 為固定字元
domain 為建立kubedns pod時指定的domain也就是各節點kubelete啟動引數中的--cluster-domain,本文是cluster.local
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27181165/viewspace-2145489/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ubuntu 16.04下安裝kubernetes 1.6之dashboardUbuntu
- ubuntu 16.04下安裝kubernetes1.6(二)Ubuntu
- ubuntu 16.04下安裝kubernetes1.6(一)Ubuntu
- ubuntu 16.04 下安裝kubernetes 1.6 之flannel網路模型Ubuntu模型
- ubuntu16.04 下安裝mysqlUbuntuMySql
- Ubuntu 16.04 下安裝配置caffeUbuntu
- ubuntu16.04 下kvm安裝Ubuntu
- UBuntu16.04下安裝Docker(親測)UbuntuDocker
- Ubuntu16.04下安裝gtsam-3.2.1Ubuntu
- ubuntu16.04下安裝NS3.27UbuntuS3
- ubuntu16.04系統下安裝dockerUbuntuDocker
- Ubuntu 16.04 安裝 EmacsUbuntuMac
- Vagrant 安裝ubuntu 16.04Ubuntu
- Ubuntu 16.04安裝NginxUbuntuNginx
- Ubuntu 16.04 安裝 RedisUbuntuRedis
- ubuntu16.04下的MySQL離線安裝UbuntuMySql
- Ubuntu 16.04 安裝 Mysql 8.0UbuntuMySql
- ubuntu16.04安裝rosUbuntuROS
- Ubuntu 16.04 上安裝 OrientDB!Ubuntu
- Ubuntu 16.04 安裝 JenkinsUbuntuJenkins
- ubuntu 16.04 LTS安裝之後需要做的事Ubuntu
- ubuntu 16.04安裝LNMP環境UbuntuLNMP
- 安裝kalibr Ubuntu16.04Ubuntu
- Ubuntu16.04安裝、使用typoraUbuntu
- Ubuntu 16.04 安裝VSCodeUbuntuVSCode
- ubuntu16.04 CUDA, CUDNN 安裝UbuntuDNN
- Ubuntu 16.04 上安裝 MySQL 5.7UbuntuMySql
- Ubuntu 16.04下安裝資料庫Oracle客戶端Ubuntu資料庫Oracle客戶端
- Ubuntu安裝KubernetesUbuntu
- Ubuntu 16.04 安裝Google 瀏覽器UbuntuGo瀏覽器
- VM中的Ubuntu(16.04)安裝tenserflowUbuntu
- Ubuntu 16.04 安裝Nvidia驅動Ubuntu
- Ubuntu 16.04 安裝 Tensorflow Gpu版本UbuntuGPU
- Ubuntu 16.04安裝RabbitMQ(單機版)UbuntuMQ
- ubuntu 16.04 64bit安裝 JuliaUbuntu
- Ubuntu 16.04 安裝 Gnome 桌面環境Ubuntu
- Ubuntu 16.04下安裝Oracle資料庫的ODBC驅動UbuntuOracle資料庫
- Ubuntu 16.04下 Mysql5.7.17原始碼編譯與安裝UbuntuMySql原始碼編譯