『高級篇』docker之kubernetes基礎集羣附加功能kube-proxy和kube-dns(36)

原創文章,歡迎轉載。轉載請註明:轉載自 IT人故事會,謝謝! 原文連接地址: 『高級篇』docker之kubernetes基礎集羣附在功能kube-proxy和kube-dns(36)
上次搭建了kubernetes最核心最基礎的服務,也學習了一些命令,如今我們在這個之上proxy和dns,雖然這2個功能很是很是的重要,可是從技術層面他們屬於kubernetes的附加組件,能夠有也能夠沒有,若是須要service的功能能夠添加kubernetes proxy,若是須要dns經過名字解析服務就須要增長kubernetes dns組件。非必須的功能作成組件的形式,而不是必須安裝的形式。這也說明了kubernetes的設計,儘可能避免這種強依賴,首先就爲集羣增長proxy的功能。源碼: github.com/limingios/m… k8s分支和 github.com/limingios/k… 基礎集羣的搭建查看32節到34節

爲集羣增長service功能 - kube-proxy(工做節點102,103)

簡介

每臺工做節點上都應該運行一個kube-proxy服務,它監聽API server中service和endpoint的變化狀況,並經過iptables等來爲服務配置負載均衡,是讓咱們的服務在集羣外能夠被訪問到的重要方式。

部署

經過系統服務方式部署:
#確保工做目錄存在
mkdir -p /var/lib/kube-proxy
#複製kube-proxy服務配置文件
cp ~/kubernetes-starter/target/worker-node/kube-proxy.service /lib/systemd/system/
#複製kube-proxy依賴的配置文件
cp ~/kubernetes-starter/target/worker-node/kube-proxy.kubeconfig /etc/kubernetes/

systemctl enable kube-proxy.service
service kube-proxy start
journalctl -f -u kube-proxy複製代碼


9.3 重點配置說明

kube-proxy.service
[Unit] Description=Kubernetes Kube-Proxy Server ... [Service] #工做目錄 WorkingDirectory=/var/lib/kube-proxy ExecStart=/home/michael/bin/kube-proxy \ #監聽地址 --bind-address=192.168.1.103 \ #依賴的配置文件,描述了kube-proxy如何訪問api-server --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \ ...
102的kube-proxy
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/root/bin/kube-proxy \
  --bind-address=192.168.66.102 \
  --hostname-override=192.168.66.102 \
  --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
  --logtostderr=true \
  --v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target複製代碼

103的kube-proxy
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/root/bin/kube-proxy \
  --bind-address=192.168.66.103 \
  --hostname-override=192.168.66.103 \
  --kubeconfig=/etc/kubernetes/kube-proxy.kubeconfig \
  --logtostderr=true \
  --v=2
Restart=on-failure
RestartSec=5
LimitNOFILE=65536

[Install]
WantedBy=multi-user.target複製代碼

kube-proxy.kubeconfig 配置了kube-proxy如何訪問api-server,內容與kubelet雷同,再也不贅述。

操練service

  • 查看service
api的時候就創建的一個service,查看類型是Type:ClusterIp,它有一個虛擬的Ip(10.68.0.1)至關於給apiservice作成了一個服務,一個是集羣內的其餘組件,能夠經過這個ip直接進行訪問,不須要依賴具體worker的ip地址了,負載均衡,apiserver的高可用,經過apiserver的ip來完成。上次訪問對應的deployment,都是啓動代理,而後另外一個窗口經過curl的方式來進行訪問。
kubectl get services
kubectl describe serivce kubernetes複製代碼

  • deploy升級成爲service
感受比較亂,命令去執行的2個端口target-port 和port ,在執行service的時候又出現了一個端口,
  1. 隨機的端口23492節點啓動的端口,能夠經過端口訪問服務
  2. target-port 這個端口實際啓動的端口
  3. port 虛擬ip下須要訪問的端口
kubectl expose deploy kubernetes-bootcamp --type="NodePort" --target-port=8080 --port=80複製代碼

  • worker訪問
curl http://192.168.66.103:23492複製代碼

  • 進入容器內部訪問的話
經過docker ps 找到容器id,進入容器exec -it 後
curl http://10.68.99.134:80複製代碼
都是能夠curl通的這是符合k8s的規範的pod之間是互通的。
  • 經過yaml文件將pod生成services
vi nginx-service.yamlapiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  ports:
  - port: 8080
    targetPort: 80
    nodePort: 20000
  selector:
    app: nginx
  type: NodePort複製代碼


爲集羣增長dns功能 - kube-dns(app)

簡介

kube-dns爲Kubernetes集羣提供命名服務,主要用來解析集羣服務名和Pod的hostname。目的是讓pod能夠經過名字訪問到集羣內服務。它經過添加A記錄的方式實現名字和service的解析。普通的service會解析到service-ip。headless service會解析到pod列表。

部署

經過kubernetes應用的方式部署 kube-dns.yaml文件基本與官方一致(除了鏡像名不一樣外)。 裏面配置了多個組件,之間使用」---「分隔
#到kubernetes-starter目錄執行命令
kubectl create -f target/services/kube-dns.yaml複製代碼

在特定的命名空間中
kubectl -n kube-system get svc

只要安裝了這個後,直接能夠經過名稱訪問
說白了 只要運行dns服務,就能夠直接用啦。
PS:基礎集羣的沒有通過認證受權,也就基本完成了,這些組件就是每一個k8s公司所必須的,很是重要很是核心,整個集羣的搭建讓老鐵對k8s有個深刻的瞭解,瞭解每一個組件都是幹啥用的,讓老鐵以爲k8s沒有那麼複雜,經過上邊的安裝,確實沒有mesos和swarm那麼簡單,可是也沒有那麼複雜。必定要熟悉k8s的命令。下次瞭解下認證的受權。

相關文章
相關標籤/搜索