Kubernetes系統架構及組件功能
Kubernetes集羣包含有節點代理kubelet和Master組件(APIs, scheduler, etc),一切都基於分佈式的存儲系統。
Kubernetes節點有運行應用容器必備的服務,而這些都是受Master的控制。
每次個節點上當然都要運行Docker。Docker來負責所有具體的映像下載和容器運行
Kubernetes主要由以下幾個核心組件組成:
- etcd保存了整個集羣的狀態;
- Kube-apiserver:Kubernetes API,集羣的統一入口,以HTTP API提供接口服務,所有對象資源的增刪改查和監控操作都交給APIServer處理後再提交給Etcd存儲。官網介紹apiserver提供了資源操作的唯一入口,並提供認證、授權、訪問控制、API註冊和發現等機制;
- Kube-controller manager處理集羣中常規後臺任務,一個資源對應一個控制器,而Controller manager就是負責管理這些控制器的。官網介紹controller manager負責維護集羣的狀態,比如故障檢測、自動擴展、滾動更新等;
- Kube-scheduler:根據調度算法爲新創建的Pod選擇一個Node節點。官網介紹是負責資源的調度,按照預定的調度策略將Pod調度到相應的機器上;
- kubelet:是Master在Node節點上的Agent,管理本機運行容器的生命週期,比如創建容器、Pod掛載數據卷、下載secret,獲取容器和節點狀態等工作。kubelet將每個pod轉換成一組容器。官網介紹:負責維護容器的生命週期,同時也負責Volume(CVI)和網絡(CNI)的管理;
- Container runtime負責鏡像管理以及Pod和容器的真正運行(CRI);
- kube-proxy:在Node節點上實現Pod網絡代理,維護網絡規則和四層負載均衡工做。官網介紹:負責爲Service提供cluster內部的服務發現和負載均衡,維護網絡規則;
- docker或rocket/rkt:運行容器。
第三方服務
- etcd:分佈式鍵值存儲系統,用於保持集羣狀態,比如Pod、Service等對象信息。
除了核心組件,還有一些Add-ons:
- kube-dns負責爲整個集羣提供DNS服務
- Ingress Controller爲服務提供外網入口
- Heapster提供資源監控
- Dashboard提供GUI
- Federation提供跨可用區的集羣
- Fluentd-elasticsearch提供集羣日誌採集、存儲與查詢