當(dāng)你部署完 Kubernetes, 即擁有了一個完整的集群误阻。
一個 Kubernetes 集群包含 集群由一組被稱作節(jié)點(diǎn)的機(jī)器組成。這些節(jié)點(diǎn)上運(yùn)行 Kubernetes 所管理的容器化應(yīng)用雪情。集群具有至少一個工作節(jié)點(diǎn)和至少一個主節(jié)點(diǎn)。
工作節(jié)點(diǎn)托管作為應(yīng)用程序組件的 Pod 俱诸。主節(jié)點(diǎn)管理集群中的工作節(jié)點(diǎn)和 Pod 瞻赶。多個主節(jié)點(diǎn)用于為集群提供故障轉(zhuǎn)移和高可用性。
這張圖表展示了包含所有相互關(guān)聯(lián)組件的 Kubernetes 集群埃叭。控制平面組件(Control Plane Components)
控制平面的組件對集群做出全局決策(比如調(diào)度)摸恍,以及檢測和響應(yīng)集群事件(例如,當(dāng)不滿足部署的 replicas
字段時赤屋,啟動新的 pod)立镶。
控制平面組件可以在集群中的任何節(jié)點(diǎn)上運(yùn)行。然而益缎,為了簡單起見谜慌,設(shè)置腳本通常會在同一個計算機(jī)上啟動所有控制平面組件,并且不會在此計算機(jī)上運(yùn)行用戶容器莺奔。請參閱構(gòu)建高可用性集群中對于多主機(jī) VM 的設(shè)置示例欣范。
kube-apiserver
主節(jié)點(diǎn)上負(fù)責(zé)提供 Kubernetes API 服務(wù)的組件;它是 Kubernetes 控制面的前端令哟。
kube-apiserver 在設(shè)計上考慮了水平擴(kuò)縮的需要恼琼。 換言之,通過部署多個實(shí)例可以實(shí)現(xiàn)擴(kuò)縮屏富。 參見構(gòu)造高可用集群晴竞。
etcd
etcd 是兼具一致性和高可用性的鍵值數(shù)據(jù)庫,可以作為保存 Kubernetes 所有集群數(shù)據(jù)的后臺數(shù)據(jù)庫狠半。
您的 Kubernetes 集群的 etcd 數(shù)據(jù)庫通常需要有個備份計劃噩死。要了解 etcd 更深層次的信息,請參考 etcd 文檔神年。
kube-scheduler
主節(jié)點(diǎn)上的組件已维,該組件監(jiān)視那些新創(chuàng)建的未指定運(yùn)行節(jié)點(diǎn)的 Pod,并選擇節(jié)點(diǎn)讓 Pod 在上面運(yùn)行已日。
調(diào)度決策考慮的因素包括單個 Pod 和 Pod 集合的資源需求垛耳、硬件/軟件/策略約束、親和性和反親和性規(guī)范飘千、數(shù)據(jù)位置堂鲜、工作負(fù)載間的干擾和最后時限。
kube-controller-manager
在主節(jié)點(diǎn)上運(yùn)行控制器的組件护奈。
從邏輯上講缔莲,每個控制器都是一個單獨(dú)的進(jìn)程,但是為了降低復(fù)雜性霉旗,它們都被編譯到同一個可執(zhí)行文件痴奏,并在一個進(jìn)程中運(yùn)行磺箕。
這些控制器包括:
- 節(jié)點(diǎn)控制器(Node Controller): 負(fù)責(zé)在節(jié)點(diǎn)出現(xiàn)故障時進(jìn)行通知和響應(yīng)。
- 副本控制器(Replication Controller): 負(fù)責(zé)為系統(tǒng)中的每個副本控制器對象維護(hù)正確數(shù)量的 Pod抛虫。
- 端點(diǎn)控制器(Endpoints Controller): 填充端點(diǎn)(Endpoints)對象(即加入 Service 與 Pod)松靡。
- 服務(wù)帳戶和令牌控制器(Service Account & Token Controllers): 為新的命名空間創(chuàng)建默認(rèn)帳戶和 API 訪問令牌.
云控制器管理器-(cloud-controller-manager)
cloud-controller-manager 運(yùn)行與基礎(chǔ)云提供商交互的控制器。cloud-controller-manager 二進(jìn)制文件是 Kubernetes 1.6 版本中引入的 alpha 功能建椰。
cloud-controller-manager 僅運(yùn)行云提供商特定的控制器循環(huán)雕欺。您必須在 kube-controller-manager 中禁用這些控制器循環(huán),您可以通過在啟動 kube-controller-manager 時將 --cloud-provider
參數(shù)設(shè)置為 external
來禁用控制器循環(huán)棉姐。
cloud-controller-manager 允許云供應(yīng)商的代碼和 Kubernetes 代碼彼此獨(dú)立地發(fā)展屠列。在以前的版本中,核心的 Kubernetes 代碼依賴于特定云提供商的代碼來實(shí)現(xiàn)功能伞矩。在將來的版本中笛洛,云供應(yīng)商專有的代碼應(yīng)由云供應(yīng)商自己維護(hù),并與運(yùn)行 Kubernetes 的云控制器管理器相關(guān)聯(lián)乃坤。
以下控制器具有云提供商依賴性:
- 節(jié)點(diǎn)控制器(Node Controller): 用于檢查云提供商以確定節(jié)點(diǎn)是否在云中停止響應(yīng)后被刪除
- 路由控制器(Route Controller): 用于在底層云基礎(chǔ)架構(gòu)中設(shè)置路由
- 服務(wù)控制器(Service Controller): 用于創(chuàng)建苛让、更新和刪除云提供商負(fù)載均衡器
- 數(shù)據(jù)卷控制器(Volume Controller): 用于創(chuàng)建、附加和裝載卷湿诊、并與云提供商進(jìn)行交互以編排卷
Node 組件
節(jié)點(diǎn)組件在每個節(jié)點(diǎn)上運(yùn)行狱杰,維護(hù)運(yùn)行的 Pod 并提供 Kubernetes 運(yùn)行環(huán)境。
kubelet
一個在集群中每個節(jié)點(diǎn)上運(yùn)行的代理厅须。它保證容器都運(yùn)行在 Pod 中仿畸。
kubelet 接收一組通過各類機(jī)制提供給它的 PodSpecs,確保這些 PodSpecs 中描述的容器處于運(yùn)行狀態(tài)且健康朗和。kubelet 不會管理不是由 Kubernetes 創(chuàng)建的容器错沽。
kube-proxy
kube-proxy 是集群中每個節(jié)點(diǎn)上運(yùn)行的網(wǎng)絡(luò)代理,實(shí)現(xiàn) Kubernetes Service 概念的一部分。
kube-proxy 維護(hù)節(jié)點(diǎn)上的網(wǎng)絡(luò)規(guī)則眶拉。這些網(wǎng)絡(luò)規(guī)則允許從集群內(nèi)部或外部的網(wǎng)絡(luò)會話與 Pod 進(jìn)行網(wǎng)絡(luò)通信千埃。
如果操作系統(tǒng)提供了數(shù)據(jù)包過濾層并可用的話,kube-proxy會通過它來實(shí)現(xiàn)網(wǎng)絡(luò)規(guī)則镀层。否則镰禾,kube-proxy 僅轉(zhuǎn)發(fā)流量本身皿曲。
容器運(yùn)行環(huán)境(Container Runtime)
容器運(yùn)行環(huán)境是負(fù)責(zé)運(yùn)行容器的軟件唱逢。
Kubernetes 支持多個容器運(yùn)行環(huán)境: Docker、 containerd屋休、cri-o坞古、 rktlet 以及任何實(shí)現(xiàn) Kubernetes CRI (容器運(yùn)行環(huán)境接口)椭迎。
插件(Addons)
插件使用 Kubernetes 資源 (DaemonSet, Deployment等) 實(shí)現(xiàn)集群功能揩局。因?yàn)檫@些提供集群級別的功能,所以插件的命名空間資源屬于 kube-system
命名空間凹髓。
所選的插件如下所述:有關(guān)可用插件的擴(kuò)展列表,請參見插件 (Addons)奶陈。
DNS
盡管并非嚴(yán)格要求其他附加組件易阳,但所有示例都依賴集群 DNS,因此所有 Kubernetes 集群都應(yīng)具有 DNS吃粒。
除了您環(huán)境中的其他 DNS 服務(wù)器之外潦俺,集群 DNS 還是一個 DNS 服務(wù)器,它為 Kubernetes 服務(wù)提供 DNS 記錄徐勃。
Cluster DNS 是一個 DNS 服務(wù)器事示,和您部署環(huán)境中的其他 DNS 服務(wù)器一起工作,為 Kubernetes 服務(wù)提供DNS記錄僻肖。
Kubernetes 啟動的容器自動將 DNS 服務(wù)器包含在 DNS 搜索中肖爵。
用戶界面(Dashboard)
Dashboard 是 Kubernetes 集群的通用基于 Web 的 UI。它使用戶可以管理集群中運(yùn)行的應(yīng)用程序以及集群本身并進(jìn)行故障排除臀脏。
容器資源監(jiān)控
容器資源監(jiān)控將關(guān)于容器的一些常見的時間序列度量值保存到一個集中的數(shù)據(jù)庫中劝堪,并提供用于瀏覽這些數(shù)據(jù)的界面。
集群層面日志
集群層面日志 機(jī)制負(fù)責(zé)將容器的日志數(shù)據(jù)保存到一個集中的日志存儲中揉稚,該存儲能夠提供搜索和瀏覽接口幅聘。
A Kubernetes cluster consists of 集群由一組被稱作節(jié)點(diǎn)的機(jī)器組成。這些節(jié)點(diǎn)上運(yùn)行 Kubernetes 所管理的容器化應(yīng)用窃植。集群具有至少一個工作節(jié)點(diǎn)和至少一個主節(jié)點(diǎn)帝蒿。
工作節(jié)點(diǎn)托管作為應(yīng)用程序組件的 Pod 。主節(jié)點(diǎn)管理集群中的工作節(jié)點(diǎn)和 Pod 巷怜。多個主節(jié)點(diǎn)用于為集群提供故障轉(zhuǎn)移和高可用性葛超。