基本架構

任何優秀的項目都離不開優秀的架構設計。本小節將介紹 Kubernetes 在架構方面的設計考慮。

基本考慮

如果讓我們自己從頭設計一套容器管理平台,有如下幾個方面是很容易想到的:

  • 分散式架構,保證延伸性;
  • 邏輯集中式的控制平面 + 物理分散式的執行平面;
  • 一套資源調度系統,管理哪個容器該指派到哪個節點上;
  • 一套對容器內服務進行抽像和 HA 的系統。

執行原理

下面這張圖完整展示了 Kubernetes 的執行原理。

Kubernetes 架構
圖 1.21.5.1 - Kubernetes 架構

可見,Kubernetes 首先是一套分散式系統,由多個節點組成,節點分為兩類:一類是屬於管理平面的主節點/控制節點(Master Node);一類是屬於執行平面的工作節點(Worker Node)。

顯然,複雜的工作肯定都交給控制節點去做了,工作節點負責提供穩定的作業介面和能力抽像即可。

從這張圖上,我們沒有能發現 Kubernetes 中對於控制平面的分散式實作,但是由於資料後端自身就是一套分散式的資料庫(Etcd),因此可以很容易延伸到分散式實作。

控制平面

主節點服務

主節點上需要提供如下的管理服務:

  • apiserver 是整個系統的對外介面,提供一套 RESTful 的 Kubernetes API,供用戶端和其它元件叫用;
  • scheduler 負責對資源進行調度,指派某個 pod 到某個節點上。是 pluggable的,意味著很容易選擇其它實作方式;
  • controller-manager 負責管理控制器,包括 endpoint-controller(重新整理服務和 pod 的關聯資訊)和 replication-controller(維護某個 pod 的複製為設定的數值)。

Etcd

這裡 Etcd 即作為資料後端,又作為信息中間件。

透過 Etcd 來儲存所有的主節點上的狀態資訊,很容易實作主節點的分散式延伸。

元件可以自動的去偵測 Etcd 中的數值變化來獲得通知,並且獲得更新後的資料來執行相應的作業。

工作節點

  • kubelet 是工作節點執行作業的 agent,負責具體的容器生命週期管理,根據從資料庫中取得的資訊來管理容器,並上報 pod 執行狀態等;
  • kube-proxy 是一個簡單的網路存取代理,同時也是一個 Load Balancer。它負責將存取到某個服務的請求具體指派給工作節點上的 Pod(同一類標籤)。
Proxy 代理對服務的請求
圖 1.21.5.2 - Proxy 代理對服務的請求

results matching ""

    No results matching ""