Kubernetes集群包含有節(jié)點代理kubelet和Master組件(APIs, scheduler, etc)择卦,一切都基于分布式的存儲系統(tǒng)呕缭。
Kubernetes主要由以下幾個核心組件組成:
etcd保存了整個集群的狀態(tài);
apiserver提供了資源操作的唯一入口智玻,并提供認證、授權、訪問控制妄壶、API注冊和發(fā)現(xiàn)等機制;
controller manager 負責維護集群的狀態(tài)寄狼,比如故障檢測丁寄、自動擴展、滾動更新等泊愧;
scheduler 負責資源的調(diào)度伊磺,按照預定的調(diào)度策略將Pod調(diào)度到相應的機器上;
kubelet 負責維護容器的生命周期删咱,同時也負責Volume(CVI)和網(wǎng)絡(CNI)的管理屑埋;
Container runtime 負責鏡像管理以及Pod和容器的真正運行(CRI);
kube-proxy 負責為Service提供cluster內(nèi)部的服務發(fā)現(xiàn)和負載均衡
除了核心組件痰滋,還有一些推薦的Add-ons:
kube-dns 負責為整個集群提供DNS服務
Ingress Controller 為服務提供外網(wǎng)入口
Heapster 提供資源監(jiān)控
Dashboard 提供GUI
Federation 提供跨可用區(qū)的集群
Fluentd-elasticsearch 提供集群日志采集摘能、存儲與查詢
分層架構
核心層:Kubernetes最核心的功能,對外提供API構建高層的應用敲街,對內(nèi)提供插件式應用執(zhí)行環(huán)境
應用層:部署(無狀態(tài)應用团搞、有狀態(tài)應用、批處理任務多艇、集群應用等)和路由(服務發(fā)現(xiàn)逻恐、DNS解析等)
管理層:系統(tǒng)度量(如基礎設施、容器和網(wǎng)絡的度量),自動化(如自動擴展梢莽、動態(tài)Provision等)以及策略管理(RBAC萧豆、Quota、PSP昏名、NetworkPolicy等)
接口層:kubectl命令行工具涮雷、客戶端SDK以及集群聯(lián)邦
生態(tài)系統(tǒng):在接口層之上的龐大容器集群管理調(diào)度的生態(tài)系統(tǒng),可以劃分為兩個范疇Kubernetes外部:日志轻局、監(jiān)控洪鸭、配置管理、CI仑扑、CD览爵、Workflow、FaaS镇饮、OTS應用蜓竹、ChatOps等
Kubernetes內(nèi)部:CRI、CNI储藐、CVI俱济、鏡像倉庫、Cloud Provider钙勃、集群自身的配置和管理等
kubelet
kubelet負責管理pods和它們上面的容器蛛碌,images鏡像、volumes辖源、etc蔚携。
kube-proxy
每一個節(jié)點也運行一個簡單的網(wǎng)絡代理和負載均衡(詳見services FAQ )。 正如Kubernetes API里面定義的這些服務(詳見the services doc)也可以在各種終端中以輪詢的方式做一些簡單的TCP和UDP傳輸克饶。
服務端點目前是通過DNS或者環(huán)境變量( Docker-links-compatible 和 Kubernetes{FOO}_SERVICE_HOST 及 {FOO}_SERVICE_PORT 變量都支持)酝蜒。這些變量由服務代理所管理的端口來解析。
Kubernetes控制面板
Kubernetes控制面板可以分為多個部分彤路。目前它們都運行在一個master 節(jié)點秕硝,然而為了達到高可用性,這需要改變洲尊。不同部分一起協(xié)作提供一個統(tǒng)一的關于集群的視圖。
etcd
所有master的持續(xù)狀態(tài)都存在etcd的一個實例中奈偏。這可以很好地存儲配置數(shù)據(jù)坞嘀。因為有watch(觀察者)的支持,各部件協(xié)調(diào)中的改變可以很快被察覺惊来。
Kubernetes API Server
API服務提供Kubernetes API 的服務丽涩。這個服務試圖通過把所有或者大部分的業(yè)務邏輯放到不兩只的部件中從而使其具有CRUD特性。它主要處理REST操作,在etcd中驗證更新這些對象(并最終存儲)矢渊。
Scheduler
調(diào)度器把未調(diào)度的pod通過binding api綁定到節(jié)點上继准。調(diào)度器是可插拔的,并且我們期待支持多集群的調(diào)度矮男,未來甚至希望可以支持用戶自定義的調(diào)度器移必。
Kubernetes控制管理服務器
所有其它的集群級別的功能目前都是由控制管理器所負責。例如毡鉴,端點對象是被端點控制器來創(chuàng)建和更新崔泵。這些最終可以被分隔成不同的部件來讓它們獨自的可插拔。
replicationcontroller是一種建立于簡單的 podAPI之上的一種機制猪瞬。一旦實現(xiàn)憎瘸,我們最終計劃把這變成一種通用的插件機制。