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

>原創文章,歡迎轉載。轉載請註明:轉載自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

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

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

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

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

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

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

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

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

  • 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

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

  • worker訪問

    curl http://192.168.66.103:23492

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

  • 進入容器內部訪問的話

    通過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

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

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

爲集羣增加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

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

在特定的命名空間中

kubectl -n kube-system get svc

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

只要安裝了這個後,直接可以通過名稱訪問

說白了 只要運行dns服務,就可以直接用啦。

PS:基礎集羣的沒有經過認證授權,也就基本完成了,這些組件就是每個k8s公司所必須的,非常重要非常核心,整個集羣的搭建讓老鐵對k8s有個深入的瞭解,瞭解每個組件都是幹啥用的,讓老鐵覺得k8s沒有那麼複雜,通過上邊的安裝,確實沒有mesos和swarm那麼簡單,但是也沒有那麼複雜。一定要熟悉k8s的命令。下次瞭解下認證的授權。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章