Kubernetes 架構(下)- 每天5分鍾玩轉 Docker 容器技術(121)


上一節我們討論了 Kubernetes 架構 Master 上運行的服務,本節討論 Node 節點。

Node 是 Pod 運行的地方,Kubernetes 支持 Docker、rkt 等容器 Runtime。 Node上運行的 Kubernetes 組件有 kubelet、kube-proxy 和 Pod 網絡(例如 flannel)。

kubelet

kubelet 是 Node 的 agent,當 Scheduler 確定在某個 Node 上運行 Pod 后,會將 Pod 的具體配置信息(image、volume 等)發送給該節點的 kubelet,kubelet 根據這些信息創建和運行容器,並向 Master 報告運行狀態。

kube-proxy

service 在邏輯上代表了后端的多個 Pod,外界通過 service 訪問 Pod。service 接收到的請求是如何轉發到 Pod 的呢?這就是 kube-proxy 要完成的工作。

每個 Node 都會運行 kube-proxy 服務,它負責將訪問 service 的 TCP/UPD 數據流轉發到后端的容器。如果有多個副本,kube-proxy 會實現負載均衡。

Pod 網絡

Pod 要能夠相互通信,Kubernetes Cluster 必須部署 Pod 網絡,flannel 是其中一個可選方案。

完整的架構

結合實驗環境,我們得到了如下的架構圖:

你可能會問:為什么 k8s-master 上也有 kubelet 和 kube-proxy 呢?

這是因為 Master 上也可以運行應用,即 Master 同時也是一個 Node。

幾乎所有的 Kubernetes 組件本身也運行在 Pod 里,執行如下命令:

kubectl get pod --all-namespaces -o wide

Kubernetes 的系統組件都被放到 kube-system namespace 中。這里有一個 kube-dns 組件,它為 Cluster 提供 DNS 服務,我們后面會討論。kube-dns是在執行 kubeadm init 時(第 ⑤ 步)作為附加組件安裝的。

kubelet 是唯一沒有以容器形式運行的 Kubernetes 組件,它在 Ubuntu 中通過 Systemd 運行。

為了幫助大家更好地理解 Kubernetes 架構,下節我們將部署一個應用來展示各個組件是如何協作的。

書籍:

1.《每天5分鍾玩轉Docker容器技術》
https://item.jd.com/16936307278.html


2.《每天5分鍾玩轉OpenStack》
https://item.jd.com/12086376.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM