K8S集群組件


master節點主要由apiserver、controller-manager和scheduler三個組件,以及一個用於集群狀態存儲的etcd存儲服務組成,而每個node節點則主要包含kubelet、kube-proxy及容器引擎等組件。此外,完整的集群服務還依賴於一些附加組件,如kubedns等。

一、master組件

1、apiserver

apiserver負責輸出restful風格的kubernetes api,它是發往集群的所有rest操作命令的接入點,並負責接收、校驗並響應所有的rest請求,結果狀態被持久存儲於etcd中,因此,apiserver是整個集群的網關。

2、cluster state store

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

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

3、controller manager

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

生命周期功能:包括namespace創建和生命周期、event垃圾回收、pod終止相關的垃圾回收、級聯垃圾回收及node垃圾回收等

api業務邏輯:例如,由replicaset執行的pod擴展等。

4、scheduler

k8s是用於部署和管理大規模容器應用的平台,根據集群規模的不同,其托管運行的容器很有可能會數以千計甚至更多。apiserver確認pod對象的創建請求之后,便需要由scheduler根據集群內各節點的可用資源狀態,以及要運行的容器的資源需求做出調度決策。

二、node組件

1、kubelet

kubelet是運行於工作節點之上的守護進程,是node的核心代理程序,它從apiserver接收關於pod對象的配置信息並確保它們處於期望的狀態(desired state,也是目標狀態)。kubelet會在apiserver上注冊當前工作節點,定期向master匯報節點資源使用情況,並通過cadvisor監控容器和節點的資源占用狀況。

2、container runtime

每個node都要提供一個容器運行時環境,它負責下載鏡像並運行容器。kubelet並未固定鏈接至某容器運行時環境,而是以插件的方式載入配置的容器環境,這種方式清晰地定義了各組件的邊界。目前k8s支持的容器運行環境包括docker、rkt、cri-o、fraki等。

3、kube-proxy

每個工作節點都需要運行一個kube-proxy守護進程,它能夠按需為service資源對象生成iptables或ipvs規則,從而捕獲訪問當前service的clusterip的流量並將其轉發至正確的后端pod對象。

三、核心組件

k8s集群還依賴於一組成為“組件”(add-ons)的組件以提供完整的功能,它們通常是由第三方提供的特定應用程序,並且托管運行於k8s集群之上。

kubedns:在k8s集群中調度運行提供dns服務的pod,同一集群中的其他pod可使用此dns服務器解決主機名。k8s自1.11版本開始默認使用coredns項目為集群提供服務注冊和服務發現的動態名稱解析服務,之前的版本中用到的是kube-dns和skydns項目。

dashboard:kubernetes集群的全部功能都要基於web的UI來管理集群中的應用甚至是集群自身。

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

ingress controller:service是一種工作於傳統層的負載均衡器,而ingress是在應用層實現的http(s)負載均衡機制。不過,ingress資源自身並不能進行“流量穿透”,它僅是一組路由規則的集合,這些規則需要通過ingress控制器(ingress controller)發揮作用。目前,此類的可用項目有nginx、traefik、envoy及haproxy等。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM