Master節點
Master節點是Kubernetes叢集的控制節點,在生産環境中不建議部署叢集核心元件外的任何Pod,公司業務的Pod更是不建議部署到Master節點上,以免更新或者維護時對業務造成影響。
Master節點的元件包括:
APIServer:APIServer是整個叢集的控制中樞,提供叢集中各個子產品之間的資料交換,并将叢集狀态和資訊存儲到分布式鍵-值(key-value)存儲系統Etcd叢集中。同時它也是叢集管理、資源配額、提供完備的叢集安全機制的入口,為叢集各類資源對象提供增删改查以及watch的REST API接口。APIServer作為Kubernetes的關鍵元件,使用Kubernetes API和 JSON over HTTP提供Kubernetes的内部和外部接口。
Scheduler:Scheduler是叢集Pod的排程中心,主要是通過排程算法将Pod配置設定到最佳的節點(Node),它通過APIServer監聽所有Pod的狀态,一旦發現新的未被排程到任何Node節點的Pod(PodSpec.NodeName為空),就會根據一系列政策選擇最佳節點進行排程,對每一個Pod建立一個綁定(binding),然後被排程的節點上的Kubelet負責啟動該Pod。Scheduler是叢集可插拔式元件,它跟蹤每個節點上的資源使用率以確定工作負載不會超過可用資源。是以Scheduler必須知道資源需求、資源可用性以及其他限制和政策,例如服務品質、親和力/反關聯性要求、資料位置等。Scheduler将資源供應與工作負載需求相比對以維持系統的穩定和可靠,是以Scheduler在排程的過程中需要考慮公平、資源高效利用、效率等方面的問題。
Controller Manager: Controller Manager是叢集狀态管理器(它的英文直譯名為控制器管理器),以保證Pod或其他資源達到期望值。當叢集中某個Pod的副本數或其他資源因故障和錯誤導緻無法正常運作,沒有達到設定的值時,Controller Manager會嘗試自動修複并使其達到期望狀态。Controller Manager包含NodeController、ReplicationController、EndpointController、NamespaceController、ServiceAccountController、ResourceQuotaController、ServiceController和TokenController,該控制器管理器可與API伺服器進行通信以在需要時建立、更新或删除它所管理的資源,如Pod、服務斷點等。
Etcd: Etcd由CoreOS開發,用于可靠地存儲叢集的配置資料,是一種持久性、輕量型、分布式的鍵-值(key-value)資料存儲元件。Etcd作為Kubernetes叢集的持久化存儲系統,叢集的災難恢複、狀态資訊存儲都與其密不可分,是以在Kubernetes高可用叢集中,Etcd的高可用是至關重要的一部分,在生産環境中建議部署為大于3的奇數個數的Etcd,以保證資料的安全性和可恢複性。Etcd可與Master元件部署在同一個節點上,大規模叢集環境下建議部署在叢集外,并且使用高性能伺服器來提高Etcd的性能和降低Etcd同步資料的延遲。
Node節點
Node節點也被稱為Worker或Minion,是主要負責部署容器(工作負載)的單機(或虛拟機),叢集中的每個節點都必須具備容器的運作環境(runtime),比如Docker及其他元件等。
Kubelet作為守護程序運作在Node節點上,負責監聽該節點上所有的Pod,同時負責上報該節點上所有Pod的運作狀态,確定節點上的所有容器都能正常運作。當Node節點當機(NotReady狀态)時,該節點上運作的Pod會被自動地轉移到其他節點上。
Node節點包括:
Kubelet: 負責與Master通信協作,管理該節點上的Pod。