k8s 架構淺析
目錄
文章目錄
Kubernetes 的電梯間演講
Kubernetes 是一個 面向應用 的容器叢集部署、管理及編排系統,旨在為終端使用者遮蔽物理/虛擬計算、網路、儲存基礎設施的複雜度,關注以應用為核心、以容器為原語的自動化運營平臺。
Kubernetes 具備完善的叢集管理能力,包括多層次的安全認證和准入機制、多租戶應用支撐能力、透明的服務註冊和服務發現機制、內建負載均衡器、故障發現和自我修復能力、服務滾動升級和線上擴容、可擴充套件的資源自動排程機制、多粒度的資源配額管理能力。 Kubernetes 還提供完善的管理工具,涵蓋開發、部署測試、運維監控等各個環節。
Kubernetes 的層級物件
Cluster: 是一個被 k8s 協調的高可用叢集,作為 k8s 叢集的根操作物件,將多臺計算節點(Master/Node)連線成一個工作整體。
Master:下屬於 Cluster,充當叢集中的中央控制角色,負責管理、協調叢集中的所有活動(e.g. scheduler app、維護 app 狀態機、 彈性擴充套件 apps、釋出 app 更新 etc.)。
Node:下屬於 Cluster,作為叢集中的 Worker,受 Master 指使。是 Containers 及其 runtime 引擎的允許載體。
Pod: 是一個抽象而統一的概念,遮蔽底層異構 Container Runtime 技術實現。k8s 的最小工作單元,是 Containers 的 “Container”。
Container:下屬於 Pod,是真正意義上的、常規的容器。
Kubernetes 的元件架構
Kubernetes 是典型的中控分散式架構(Central control distributed architecture),下面分別列舉 Master、Node 的元件。
Master:
-
etcd:提供高可用性、嚴格資料一致性的非關係型資料庫,具有共享配置、服務發現、分散式等特點。常被用於構建服務發現系統。
-
API Server:統一且唯一的 Cluster 北向訪問介面,依靠 CA 認證體系提供身份認證、授權、鑑權等訪問控制功能,統稱 3A(Authentication、Authorization、Admission),是 Kubernets Security Mechanism 的門神。
-
Controller Manager:中央控制管理器,Cluster 的核心管理模組,負責整個 Cluster 的 “運”(e.g. 故障檢測、彈性擴充套件、滾動更新,etc.)
-
Scheduler:資源排程器,按照預設的策略將 Pod 排程到目的(最佳)Node 上啟動。
Node:
-
kubelet:維護 Container 的生命週期,同時也負責儲存(CSI)和網路(CNI)的管理。
-
kube-proxy:為 Service 提供 Cluster 內部的服務發現和負載均衡功能。
-
Container runtime:負責映象管理以及 Pod 和 Container 的執行(CRI)。
Kubernetes 的元件通訊協議/介面
Kubernetes 的分層架構
最後
一圖抵萬語,上文圖源均來自網際網路。實話說,並沒有找到一張筆者滿意的架構圖,還是找個時間自己畫一畫吧。但依舊感謝這些圖的原創作者們的貢獻。
回到主題,Kubernets 的架構和整個部署的複雜度相較於 OpenStack 要更低,從這個角度來看好像的確為企業使用者的運維成本省了不少。當然筆者對 k8s 也只是初學,做不得準。但可以肯定的是,k8s 的核心精髓在於 編排 二字,這是由 Container 的基因決定的。將 Container 當作 VM 來使用,那就是一個天大的誤解了。所以每每看見市場上哪些為容器而容器,毫無編排特徵的產品,筆者實在是難免感慨。