Master组件
Master组件是集群的控制平台
- master负责进群中的全局决策(调度)
- master组件探测并响应集群使劲按,例如,当Deployment的实际Pod副本数量未达到replicas字段的规定的时候,启动一个新的pod
master组件可以运行于集群的任何机器上,但是为了简洁性,通常在同一台机器上运行所有的master组件,且不在此机器上运行用户的容器。
kube-apiserver
此组件提供k8s API,这是kubernetes控制平台的前端,可以水平扩展,通过部署更多的实例达到性能要求。kubectl/kubernetes dashboard /kuboard等k8s管理工具就是通过api实现对集群的管理。
etcd
支持一致性和高可用的键值对存储组件,集群的所有配置都存储在etcd中。
kube-scheduler
此组件监控所有的新创建尚未的分配到节点上的Pod,并且自动为pod选择一个核实的节点区运行。
影响调度的因素有:
- 单个或者多个pod资源要求
- 硬件、软件、策略的限制
- 亲和与反亲和的预定
- 数据本地化的要求
- 工作负载间的相互作用
kube-controller-manager
此组件运行了所有的控制器。
逻辑上来说,每一个控制器都是一个独立的进程,但是为了降低复杂度,这些控制器都被合并运行到一个进程里面。
其中包含的控制器有;
- 节点控制器:负责监听节点停机的事件并作出对应响应
- 副本控制器,负责为集群中的每一个副本控制器对象(Replication Conroller Object)维护期望的POD副本数
- 端点(Endpoints)控制器,负责为端点对象(Endponts Object,连接service和pod)赋值
- Service Account & Token 控制器:负责为新的名称空间创建default Service Account以及API Access Token
cloud-controller-manager
此组件中运行了与具体云基础设施供应商互动的控制器,它只运行特定于云基础设施供应商的控制器,默认k8s集群不安装cloud-controller-manager
Node组件
node组件运行在每一个节点上,包括master和worker节点,负责运维运行中pod并负责提供k8s运行环境。
kubelet
此组件是运行在每一个集群节点上的代理程序,它确保pod 中的容器处于运行状态。kubelet通过多种途径获取PodSpec定义,并确保PodSpec定义中所描述的容器处于运行和监控的状态。
kube-proxy
kube-proxy 是一个网络代理程序,运行在集群的每一个节点上,是实现kubernets Service概念的重要部分。
kube-proxy在节点上维护网络规则,这些规则可以在集群内外正确的于Pod进行网络通信。如果操作系统中存在packet filtering layer,kube-porxy将使用这一特性,(iptabes代理模式),否则,kube-proxy将自行转发网络请求(User space代理模式)
容器引擎
容器引擎负责运行容器,支持多种容器,包括docker,containderd,cri-o,rktlet以及任何实现的k8s容器引擎接口的容器引擎。
Addons
Addons使用k8s资源( DaemonSet,Deployment等)实现进群的功能特性。由于提供集群级别的功能特性,addons使用到的kubernetes 资源都放在kube-system名称空间下。
以下为常用的Addons
DNS
除了DNS Addon以外,其他的addon都不是必须的,所有的kubernetes 集群都应该有Cluster DNS
Cluster DNS 是一个 DNS 服务器,是对您已有环境中其他 DNS 服务器的一个补充,存放了 Kubernetes Service 的 DNS 记录。
Kubernetes 启动容器时,自动将该 DNS 服务器加入到容器的 DNS 搜索列表中。
Web UI (Dashboard)
Dashboard (opens new window)是一个Kubernetes集群的 Web 管理界面。用户可以通过该界面管理集群。