雲計算:Kubernetes集群組件

Kubernetes集群組件

一個典型的Kubernetes 集群由多個工作節點( worker node )和一個集群控制平面(control plane ,即Master ),以及一個集群狀態存儲系統( etcd )組成。

其中Master 節點負責整個集群的管理工作,為集群提供管理接口, 並監控和編排集群中的各個工作節點。各節點負責以Pod 的形式運行容器,因此,各節點需要事先配置好容器運行依賴到的所有服務和資源,如容器運行時環境等。

Kubernetes 的系統架構如圖1-1 l 所示。

Master 節點主要由apiserver 、controller-manager 和scheduler 三個組件,以及一個用於集群狀態存儲的etcd 存儲服務組成,而每個No de 節點則主要包含ku belet 、kube-proxy 及

容器引擎( Docker 是最為常用的實現) 等組件。此外, 完整的集群服務還依賴於一些附加組件,如KubeDNS 等。


雲計算:Kubernetes集群組件

Master 組件

Kubernetes 的集群控制平面由多個組件組成,這些組件可統一運行於單一Master 節點,

也可以以多副本的方式同時運行於多個節點,以為Master 提供高可用功能,甚至還可以運

行於Kubernetes 集群自身之上。Master 主要包含以下幾個組件。

( 1 ) API Server

API Server 負責輸出RESTful風格的Kubemetes API ,它是發往集群的所有REST操作命令的接人點,並負責接收、校驗並響應所有的阻ST 請求,結果狀態被持久存儲於etcd中。因此, API Server 是整個集群的網關。

( 2 )集群狀態存儲( Cluster State Store)

Kubemetes 集群的所有狀態信息都需要持久存儲於存儲系統etcd 中, 不過, etcd 是由CoreOS 基於Raft 協議開發的分佈式鍵值存儲,可用於服務發現、共享配置以及一致性保障(如數據庫主節點選擇、分佈式鎖等) 。因此, etcd 是獨立的服務組件,並不隸屬於Kubernetes 集群自身。生產環境中應該以etcd 集群的方式運行以確保其服務可用性。

etcd 不僅能夠提供鍵值數據存儲,而且還為其提供了監昕( watch )機制,用於監聽和推送變更。Kubernetes 集群系統中, etcd 中的鍵值發生變化時會通知到API Server ,並由其通過watchAPI 向客戶端輸出。基於watch 機制, Kubernetes 集群的各組件實現了高效協同。

( 3 )控制器管理器( Controller Manager)

Kubernetes 中, 集群級別的大多數功能都是由幾個被稱為控制器的進程執行實現的,這幾個進程被集成於kube- controller-manager 守護進程中。由控制器完成的功能主要包括生命週期功能和API 業務邏輯,具體如下。

l 生命週期功能:包括Names pace 創建和生命週期、Eve nt 垃圾回收、Pod 終止相關的垃圾回收、級聯垃圾回收及Node 垃圾回收等。

l API 業務邏輯:例如,由ReplicaSet 執行的Pod 擴展等。

( 4 )調度器( Scheduler)

Kubernetes 是用於部署和管理大規模容器應用的平臺,根據集群規模的不同, 其託管運行的容器很可能會數以千計甚至更多。API Server 確認Pod 對象的創建請求之後,便需要由Scheduler 根據集群內各節點的可用資源狀態,以及要運行的容器的資源需求做出調度決策,其工作邏輯如圖1-12 所示。另外, Kubernetes 還支持用戶自定義調度器。


雲計算:Kubernetes集群組件

Node 組件

Node 負責提供運行容器的各種依賴環境,並接受Master 的管理。每個Node 主要由以

下幾個組件構成。

Node 負責提供運行容器的各種依賴環境,並接受Master 的管理。每個Node 主要由以

下幾個組件構成。

( 1 ) Node 的核心代理程序kubelet

kubelet 是運行於工作節點之上的守護進程,它從API Server 接收關於Pod 對象的配

置信息並確保它們處於期望的狀態( desired state ,後文不加區別地稱之為“目標狀態”) 。

kubelet 會在API Server 上註冊當前工作節點,定期向Master 彙報節點資源使用情況,並通

過cAdvisor 監控容器和節點的資源佔用狀況。

( 2 )容器運行時環境

每個Node 都要提供一個容器運行時( Container Runtime )環境,它負責下載鏡像並運

行容器。kubelet 並未固定鏈接至某容器運行時環境,而是以插件的方式載入配置的容器環

境。這種方式清晰地定義了各組件的邊界。目前, Kubernetes 支持的容器運行環境至少包括

Docker 、RKT 、cri-o 和Fraki 等。

( 3 ) kube-proxy

每個工作節點都需要運行一個kube-proxy 守護進程,它能夠按需為Serv ice 資源對象生

成iptables 或ipvs 規則,從而捕獲訪問當前Service 的ClusterIP 的流量並將其轉發至正確的後端Pod 對象。


分享到:


相關文章: