Kubernetes關鍵組件及運行流程

Kubernetes集羣各模塊通訊方式。 html

Kubernetes集羣各模塊,主要分爲客戶端,Master節點,Node節點,etcd集羣。 git

Kubernetes關鍵字程序員

Master(主節點): 控制Kubernetes節點的機器,也是建立做業任務的地方。github

Node(節點): 這些機器在Kubernetes主節點的控制下執行被分配的任務。在Node上運行的服務進程包括docker daemonKubeletKube-Proxy算法

Pod: 由一個或多個容器構成的集合,做爲一個總體被部署到一個單一節點。同一個 pod 中的容器共享 IP 地址、進程間通信(IPC)、主機名以及其它資源(如內存)。Pod 將底層容器的網絡和存儲抽象出來,使得集羣內的容器遷移更爲便捷。Kubernetes的其它組件幫助你對 pod 進行負載均衡,以保證有合適數量的容器支撐你的工做負載。Pod的生命週期是經過Replication Controller來管理的。在整個過程當中,Pod處於4種狀態之一:Pending, Running, Succeeded, Failed。docker

Labels: Service經過Label找到Pod組後端

Replication controller(複製控制器): 控制一個 pod 在集羣上運行的實例數量。確保任什麼時候候Kubernetes集羣中有指定數量的Pod副本在運行, 若是少於指定數量的Pod副本,Replication Controller會啓動新的Pod,反之會殺死多餘的以保證數量不變。api

Service(服務): 將服務內容與具體的pod分離。Kubernetes服務代理負責自動將服務請求分發到正確的pod處,無論pod移動到集羣中的什麼位置,甚至能夠被替換掉。Service是定義一系列Pod以及訪問這些Pod的策略的一層抽象。 緩存

Kubelet: 這個守護進程從master或者其餘地方獲取本節點須要達到什麼狀態, 運行在各個工做節點上,負責獲取容器列表,運行的副本數量, 網絡或者存儲如何配置,保證被聲明的容器已經啓動而且正常運行。網絡

kubectl: 這是 Kubernetes 的命令行配置工具。

kube-proxy: 實現集羣網絡服務負載均衡

Volume(存儲卷): Volume是Pod中可以被多個容器訪問的共享目錄。

Namespace(命名空間): 經過將系統內部的對象「分配」到不一樣的Namespace中,造成邏輯上的不一樣分組,便於在共享使用整個集羣的資源同時還能分別管理。

Annotation(註解):與Label相似,但Label定義的是對象的元數據,而Annotation則是用戶任意定義的「附加」信息。

Kubernetes關鍵組件

Master三個組件:

第1、apiserver[資源操做入口]

做爲kubernetes系統的入口,封裝了核心對象的增刪改查操做,以RESTFul接口方式提供給外部客戶和內部組件調用。 它維護的REST對象將持久化到etcd(一個分佈式強一致性的key/value存儲)。

第2、scheduler[集羣分發調度器]

集羣調度器,負責集羣的資源調度,爲新建的Pod分配機器。

1.scheduler收集和分析當前Kubernetes集羣中全部Node節點的資源(內存、CPU)負載狀況,而後依此分發新建的Pod到Kubernetes集羣中可用的節點。

2.實時監測Kubernetes集羣中未分發和已分發的全部運行的Pod。

3.scheduler也監測Node節點信息,因爲會頻繁查找Node節點,Scheduler會緩存一份最新的信息在本地。

4.scheduler在分發Pod到指定的Node節點後,會把Pod相關的信息Binding寫回API Server

第3、controller-manager[內部管理控制中心]

負責執行各類控制器,目前有兩類:

(1) endpoint-controller:按期關聯service和Pod(關聯信息由endpoint對象維護),保證service到Pod的映射老是最新的。

(2) replication-controller:按期關聯replicationController和Pod,保證replicationController定義的複製數量與實際運行Pod的數量老是一致的。

Node兩個組件:

kubelet結構圖

第1、kubelet[節點上的Pod管家]:

1.負責Node節點上pod的建立、修改、監控、刪除等全生命週期的管理

2.定時上報本Node的狀態信息給API Server。

3.kubelet是Master和Node之間的橋樑,接收Master分配給它的commands和work,經過kube-apiserver間接與Etcd集羣交互,讀取配置信息。

第1、proxy[負載均衡、路由轉發]:

1.Proxy是爲了解決外部網絡可以訪問跨機器集羣中容器提供的應用服務而設計的,運行在每一個Node上。 Proxy提供TCP/UDP sockets的proxy,每建立一種Service,Proxy主要從etcd獲取Services和Endpoints的配置信息),而後根據配置信息在Node上啓動一個Proxy的進程並監聽相應的服務端口,當外部請求發生時,Proxy會根據Load Balancer將請求分發到後端正確的容器處理。

2.Proxy不但解決了同一主宿機相同服務端口衝突的問題,還提供了Service轉發服務端口對外提供服務的能力,Proxy後端使用了隨機、輪循負載均衡算法。

k8s執行流程

master work flow

1.Kubecfg將特定的請求,好比建立Pod,發送給Kubernetes Client。

2.Kubernetes Client將請求發送給API server。

3.API Server根據請求的類型,好比建立Pod時storage類型是pods,而後依此選擇何種REST Storage API對請求做出處理。

4.REST Storage API對的請求做相應的處理。

5.將處理的結果存入高可用鍵值存儲系統Etcd中。

6.在API Server響應Kubecfg的請求後,Scheduler會根據Kubernetes Client獲取集羣中運行Pod及Node信息。

7.依據從Kubernetes Client獲取的信息,Scheduler將未分發的Pod分發到可用的Minion/Node節點上。

參考文檔

歡迎關注公號:程序員的金融圈

一個探討技術,金融,賺錢的小圈子,爲你提供最有味道的內容,日日更新!

相關文章
相關標籤/搜索