本文介紹了Kubernetes集群所需的各種二進制組件。
Master 組件
Master組件提供集群的管理控制中心。Master 組件提供全局決策(比如調度),以及檢測(比如健康檢查)和響應集群時間(比如副本不夠時,的調用replication controller啟動新的pod
Master組件可以在集群中任何節(jié)點上運行。但是為了簡單起見,通常在一臺VM/機器上啟動所有Master組件,并且不會在此VM/機器上運行用戶容器。請參考 構建高可用群集以來構建multi-master-VM。
kube-apiserver
kube-apiserver用于暴露Kubernetes API。任何的資源請求/調用操作都是通過kube-apiserver提供的接口進行。請參閱構建高可用群集。
kube-apiserver 是 Kubernetes 最重要的核心組件之一,主要提供以下的功能
- 提供集群管理的 REST API 接口,包括認證授權、數據校驗以及集群狀態(tài)變更等
-
提供其他模塊之間的數據交互和通信的樞紐(其他模塊通過 API Server 查詢或修改數據,只有 API Server 才直接操作 etcd)
kube-apiserver.png
kube-scheduler
kube-scheduler 監(jiān)視新創(chuàng)建沒有分配到Node的Pod,為Pod選擇一個Node。
調度器需要充分考慮諸多的因素:
- 公平調度
- 資源高效利用
- QoS
- affinity 和 anti-affinity
- 數據本地化(data locality)
- 內部負載干擾(inter-workload interference)
- deadlines
kube-controller-manager
kube-controller-manager運行管理控制器,它們是集群中處理常規(guī)任務的后臺線程。邏輯上,每個控制器是一個單獨的進程,但為了降低復雜性,它們都被編譯成單個二進制文件,并在單個進程中運行。
kube-controller-manager 由一系列的控制器組成:
- Replication Controller
- Node Controller
- CronJob Controller
- Daemon Controller
- Deployment Controller
- Endpoint Controller
- Garbage Collector
- Namespace Controller
- Job Controller
- Pod AutoScaler
- RelicaSet
- Service Controller
- ServiceAccount Controller
- StatefulSet Controller
- Volume Controller
- Resource quota Controller
cloud-controller-manager
云控制器管理器負責與底層云提供商的平臺交互。云控制器管理器是Kubernetes版本1.6中引入的.我們大部分情況都是在自己公司的內網部署kubernetes集群.所以不做過多的描述.
云控制器管理器僅運行云提供商特定的(controller loops)控制器循環(huán)??梢酝ㄟ^將--cloud-provider flag設置為external啟動kube-controller-manager ,來禁用控制器循環(huán)。
cloud-controller-manager 具體功能:
- 節(jié)點(Node)控制器
- 路由(Route)控制器
- Service控制器
- 卷(Volume)控制器
etcd
etcd是Kubernetes提供默認的存儲系統(tǒng),保存所有集群數據,使用時需要為etcd數據提供備份計劃。需要進一步深入了解, 參考 etcd documentation.
Node組件
節(jié)點組件運行在Node,提供Kubernetes運行時環(huán)境,以及維護Pod。
kubelet
在集群中的每個Node上運行的代理。 它確保容器在pod中運行。
kubelet提供的一系列PodSpecs集合規(guī)范,并確保這些PodSpecs中描述的容器運行正常。 kubelet不管理非由Kubernetes創(chuàng)建的容器.
kubelet是主要的節(jié)點代理,它會監(jiān)視已分配給節(jié)點的pod,具體功能:
- 安裝Pod所需的volume。
- 下載Pod的Secrets。
- Pod中運行的 docker(或experimentally,rkt)容器。
- 定期執(zhí)行容器健康檢查。
- Reports the status of the pod back to the rest of the system, by creating a mirror pod if necessary.
-
Reports the status of the node back to the rest of the system.
kubelet.png
kube-proxy
kube-proxy通過在主機上維護網絡規(guī)則并執(zhí)行連接轉發(fā)來實現Kubernetes服務抽象。

容器運行時
容器運行時是負責運行容器的軟件。Kubernetes 支持多種容器運行時: Docker, containerd, cri-o, rktlet 以及任何實現了Kubernetes CRI (Container Runtime Interface)的容器運行時.
插件 Addons
插件(Addon)是實現集群pod和Services功能的 。Pod由Deployments,ReplicationController等進行管理。Namespace 插件對象是在kube-system Namespace中創(chuàng)建。
下面有一些常用的插件描述, 有關可用插件的擴展列表,請參閱Addons.
DNS
雖然不嚴格要求使用插件,但Kubernetes集群都應該具有 cluster DNS。
群集 DNS是一個DNS服務器,能夠為 Kubernetes services提供 DNS記錄。
由Kubernetes啟動的容器自動將這個DNS服務器包含在他們的DNS searches中。
Web UI (Dashboard)
Dashboard 是Kubernetes集群的基于Web的通用UI。 它允許用戶管理和解決群集中運行的應用程序以及群集本身。
容器資源監(jiān)測
Container Resource Monitoring記錄基于時間序列的有關資源監(jiān)控,數據會存儲于一個時間序列數據庫,并提供瀏覽該數據的UI。

Cluster-level Logging
Cluster-level logging 負責保存容器日志,搜索/查看日志。


