- Kubernetes進階實戰
- 馬永亮
- 1810字
- 2019-03-13 14:20:35
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等。
- Learning Single:page Web Application Development
- Node.js Design Patterns
- 零基礎搭建量化投資系統:以Python為工具
- Linux核心技術從小白到大牛
- 軟件測試項目實戰之性能測試篇
- 羅克韋爾ControlLogix系統應用技術
- x86匯編語言:從實模式到保護模式(第2版)
- Android 7編程入門經典:使用Android Studio 2(第4版)
- Python數據分析(第2版)
- The DevOps 2.4 Toolkit
- Spring Boot企業級項目開發實戰
- 執劍而舞:用代碼創作藝術
- Solr Cookbook(Third Edition)
- Service Mesh實戰:基于Linkerd和Kubernetes的微服務實踐
- 機器學習微積分一本通(Python版)