Kubernetes 總體架構圖算法
Kube-Master 的工做流程圖
後端
Kubecfg 將特定的請求發送給 Kubernetes Client(好比:建立 Pod 的請求)。緩存
Kubernetes Client 將請求發送給 API Server。安全
API Server 會根據請求的類型選擇用何種 REST API 對請求做出處理(好比:建立 Pod 時 Storage 類型是 Pods 時,其對應的就是 REST Storage API)。網絡
REST Storage API 會對請求做相應的處理並將處理的結果存入高可用鍵值存儲系統 Etcd 中。架構
在 API Server 響應 Kubecfg 的請求後,Scheduler 會根據 Kubernetes Client 獲取的集羣中運行 Pod 及 Minion / Node 信息將未分發的 Pod 分發到可用的 Minion / Node 節點上。負載均衡
API Server 提供了資源對象的惟一操做入口,其它全部組件都必須經過它提供的 API 來操做資源數據。只有 API Server 會與存儲通訊,其它模塊都必須經過 API Server 訪問集羣狀態。工具
API Server 做爲 Kubernetes 系統的入口,封裝了核心對象的增刪改查操做。API Server 以 RESTFul 接口方式提供給外部客戶和內部組件調用,API Server 再對相關的資源數據(全量查詢 + 變化監聽)進行操做,以達到實時完成相關的業務功能。google
以 API Server 爲 Kubernetes 入口的設計主要有如下好處:1. 保證了集羣狀態訪問的安全。2. API Server 隔離了集羣狀態訪問和後端存儲實現,這樣 API Server 狀態訪問的方式不會由於後端存儲技術 Etcd 的改變而改變,讓後端存儲方式選擇更加靈活,方便了整個架構的擴展。spa
Controller Manager 用於實現 Kubernetes 集羣故障檢測和恢復的自動化工做。Controller Manager 主要負責執行如下各類控制器:
Replication Controller
Replication Controller 的做用主要是按期關聯 Replication Controller (RC) 和 Pod,以保證集羣中一個 RC (一種資源對象) 所關聯的 Pod 副本數始終保持爲與預設值一致。
Node Controller
Kubelet 在啓動時會經過 API Server 註冊自身的節點信息,並定時向 API Server 彙報狀態信息。API Server 在接收到信息後將信息更新到 Etcd 中。
Node Controller 經過 API Server 實時獲取 Node 的相關信息,實現管理和監控集羣中的各個 Node 節點的相關控制功能。
ResourceQuota Controller
資源配額管理控制器用於確保指定的資源對象在任什麼時候候都不會超量佔用系統上物理資源。
Namespace Controller
用戶經過 API Server 能夠建立新的 Namespace 並保存在 Etcd 中,Namespace Controller 定時經過 API Server 讀取這些 Namespace 信息來操做 Namespace。
好比:Namespace 被 API 標記爲優雅刪除,則將該 Namespace 狀態設置爲 Terminating 並保存到 Etcd 中。同時 Namespace Controller 刪除該 Namespace 下的 ServiceAccount、RC、Pod 等資源對象。
Service Account Controller
Service Account Controller (服務帳號控制器),主要在命名空間內管理 ServiceAccount,以保證名爲 default 的 ServiceAccount 在每一個命名空間中存在。
Token Controller
Token Controller(令牌控制器)做爲 Controller Manager 的一部分,主要用做:監聽 serviceAccount 的建立和刪除動做以及監聽 secret 的添加、刪除動做。
Service Controller
Service Controller 是屬於 Kubernetes 集羣與外部平臺之間的一個接口控制器,Service Controller 主要用做監聽 Service 的變化。
好比:建立的是一個 LoadBalancer 類型的 Service,Service Controller 則要確保外部的雲平臺上對該 Service 對應的 LoadBalancer 實例被建立、刪除以及相應的路由轉發表被更新。
Endpoint Controller
Endpoints 表示了一個 Service 對應的全部 Pod 副本的訪問地址,而 Endpoints Controller 是負責生成和維護全部 Endpoints 對象的控制器。
Endpoint Controller 負責監聽 Service 和對應的 Pod 副本的變化。按期關聯 Service 和 Pod (關聯信息由 Endpoint 對象維護),以保證 Service 到 Pod 的映射老是最新的。
Scheduler 主要用於收集和分析當前 Kubernetes 集羣中全部 Minion / Node 節點的資源 (包括內存、CPU 等) 負載狀況,而後依據資源佔用狀況分發新建的 Pod 到 Kubernetes 集羣中可用的節點。
Scheduler 會實時監測 Kubernetes 集羣中未分發和已分發的全部運行的 Pod。
Scheduler 會實時監測 Minion / Node 節點信息,因爲會頻繁查找 Minion/Node 節點,Scheduler 同時會緩存一份最新的信息在本地。
Scheduler 在分發 Pod 到指定的 Minion / Node 節點後,會把 Pod 相關的信息 Binding 寫回 API Server,以方便其它組件使用。
Kubelet 結構圖
負責 Node 節點上 Pod 的建立、修改、監控、刪除等全生命週期的管理。
定時上報本地 Node 的狀態信息給 API Server。
Kubelet 是 Master API Server 和 Minion / Node 之間的橋樑,接收 Master API Server 分配給它的 Commands 和 Work。
Kubelet 經過 Kube ApiServer 間接與 Etcd 集羣交互來讀取集羣配置信息。
Kubelet 在 Node 上作的主要工做具體以下:1. 設置容器的環境變量、給容器綁定 Volume、給容器綁定 Port、根據指定的 Pod 運行一個單一容器、給指定的 Pod 建立 Network 容器。2. 同步 Pod 的狀態,從 cAdvisor 獲取 Container Info、 Pod Info、 Root Info、 Machine info。3. 在容器中運行命令、殺死容器、刪除 Pod 的全部容器。
Proxy 是爲了解決外部網絡可以訪問集羣中容器提供的應用服務而設計的,Proxy 運行在每一個 Minion / Node 上。
Proxy 提供 TCP / UDP 兩種 Sockets 鏈接方式 。每建立一個 Service,Proxy 就會從 Etcd 獲取 Services 和 Endpoints 的配置信息(也能夠從 File 獲取),而後根據其配置信息在 Minion / Node 上啓動一個 Proxy 的進程並監聽相應的服務端口。當外部請求發生時,Proxy 會根據 Load Balancer 將請求分發到後端正確的容器處理。
Proxy 不但解決了同一宿主機相同服務端口衝突的問題,還提供了 Service 轉發服務端口對外提供服務的能力。Proxy 後端使用隨機、輪循等負載均衡算法進行調度。
Kubectl 是 Kubernetes 的 客戶端的工具。 經過 Kubectl 命令對 API Server 進行操做,API Server 響應並返回對應的命令結果,從而達到對 Kubernetes 集羣的管理。
本文在 「Kubernetes 總架構圖」的基礎上整理和修改。
http://www.google.com
http://t.cn/RdHiHXX
http://t.cn/RdHimG5
http://t.cn/RdHRDq8