1. 程式人生 > >『高級篇』docker之kubernetes基礎集群附加功能kube-proxy和kube-dns(

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

成了 附加 需要 應用 hub 文件 ron 鏈接地址 ima

>原創文章,歡迎轉載。轉載請註明:轉載自IT人故事會,謝謝!
>原文鏈接地址:『高級篇』docker之kubernetes基礎集群附在功能kube-proxy和kube-dns(36)

上次搭建了kubernetes最核心最基礎的服務,也學習了一些命令,現在咱們在這個之上proxy和dns,雖然這2個功能非常非常的重要,但是從技術層面他們屬於kubernetes的附加組件,可以有也可以沒有,如果需要service的功能可以添加kubernetes proxy,如果需要dns通過名字解析服務就需要增加kubernetes dns組件。非必須的功能做成組件的形式,而不是必須安裝的形式。這也說明了kubernetes的設計,盡量避免這種強依賴,首先就為集群增加proxy的功能。源碼:https://github.com/limingios/msA-docker k8s分支和https://github.com/limingios/kubernetes-starter 基礎集群的搭建查看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.yaml
apiVersion: 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的命令。下次了解下認證的授權。

技術分享圖片

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