官术网_书友最值得收藏!

1.3 Kubernetes集群組件

一個典型的Kubernetes集群由多個工作節點(worker node)和一個集群控制平面(control plane,即Master),以及一個集群狀態存儲系統(etcd)組成。其中Master節點負責整個集群的管理工作,為集群提供管理接口,并監控和編排集群中的各個工作節點。各節點負責以Pod的形式運行容器,因此,各節點需要事先配置好容器運行依賴到的所有服務和資源,如容器運行時環境等。Kubernetes的系統架構如圖1-11所示。

圖1-11 Kubernetes系統組件

Master節點主要由apiserver、controller-manager和scheduler三個組件,以及一個用于集群狀態存儲的etcd存儲服務組成,而每個Node節點則主要包含kubelet、kube-proxy及容器引擎(Docker是最為常用的實現)等組件。此外,完整的集群服務還依賴于一些附加組件,如KubeDNS等。

1.3.1 Master組件

Kubernetes的集群控制平面由多個組件組成,這些組件可統一運行于單一Master節點,也可以以多副本的方式同時運行于多個節點,以為Master提供高可用功能,甚至還可以運行于Kubernetes集群自身之上。Master主要包含以下幾個組件。

(1)API Server

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

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

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

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

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

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

?□生命周期功能:包括Namespace創建和生命周期、Event垃圾回收、Pod終止相關的垃圾回收、級聯垃圾回收及Node垃圾回收等。

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

(4)調度器(Scheduler)

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

圖1-12 Kubernetes調度器

1.3.2 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守護進程,它能夠按需為Service資源對象生成iptables或ipvs規則,從而捕獲訪問當前Service的ClusterIP的流量并將其轉發至正確的后端Pod對象。

1.3.3 核心附件

Kubernetes集群還依賴于一組稱為“附件”(add-ons)的組件以提供完整的功能,它們通常是由第三方提供的特定應用程序,且托管運行于Kubernetes集群之上,如圖1-11所示。下面列出的幾個附件各自為集群從不同角度引用了所需的核心功能。

?□KubeDNS:在Kubernetes集群中調度運行提供DNS服務的Pod,同一集群中的其他Pod可使用此DNS服務解決主機名。Kubernetes自1.11版本開始默認使用CoreDNS項目為集群提供服務注冊和服務發現的動態名稱解析服務,之前的版本中用到的是kube-dns項目,而SkyDNS則是更早一代的項目。

?□Kubernetes Dashboard:Kubernetes集群的全部功能都要基于Web的UI,來管理集群中的應用甚至是集群自身。

?□Heapster:容器和節點的性能監控與分析系統,它收集并解析多種指標數據,如資源利用率、生命周期事件等。新版本的Kubernetes中,其功能會逐漸由Prometheus結合其他組件所取代。

?□Ingress Controller:Service是一種工作于傳統層的負載均衡器,而Ingress是在應用層實現的HTTP(s)負載均衡機制。不過,Ingress資源自身并不能進行“流量穿透”,它僅是一組路由規則的集合,這些規則需要通過Ingress控制器(Ingress Controller)發揮作用。目前,此類的可用項目有Nginx、Traefik、Envoy及HAProxy等。

主站蜘蛛池模板: 瓦房店市| 滨海县| 苏尼特左旗| 南昌县| 衡阳市| 潼关县| 深水埗区| 石景山区| 兰溪市| 阿城市| 漳州市| 无为县| 常宁市| 嘉禾县| 武义县| 麻阳| 察隅县| 海晏县| 台东县| 怀仁县| 巴青县| 屯门区| 来宾市| 三河市| 平远县| 清丰县| 嘉善县| 文山县| 烟台市| 东台市| 广安市| 镇原县| 达拉特旗| 连州市| 石河子市| 明光市| 马尔康县| 长治县| 阿巴嘎旗| 万安县| 濮阳县|