||
k8s APIServer负责对外提供k8s API服务,它运行在master节点上。任何对资源的增删改查都要交给APIServer处理后才能提交给etcd。
APIServer总体上由两部分组成:HTTP/HTTPS服务和一些功能性插件。这些功能性插件又分为两种:一部分与底层IaaS平台(Cloud Provide)相关;
另一部分与资源管理控制(Admission Control)相关。
2. Scheduler
Scheduler的作用是根据特定的调度算法将pod调度到minion节点上,这一过程也被称为绑定。Scheduler调度器的输入是待调度的pod和可用的工作节点列表,输出则是一个已经绑定了pod的节点,这个节点是通过调度算法在工作节点列表中选择的最优节点。
工作节点从哪里来?工作节点并不是由k8s创建,它是由IaaS平台创建,或者就是由用户管理的物理机或者虚拟机。但是k8s会创建一个Node对象,用来描述这个工作节点。描述的具体信息由创建Node对象的配置文件给出。一旦用户创建节点的请求被成功处理,k8s又会立即在内部创建一个Minion对象,再去检查该节点的健康状况。只有那些当前可用的minion才会被认为是一个有效的节点并允许pod调度到上面运行。
工作节点可以通过资源配置文件或者kubectl命令行工具来创建。k8s主要维护工作节点的两个属性:spec和status来描述一个工作节点的期望状态和当前状态。其中,所谓的当前状态信息由3个信息组成:HostIp、Node Phase和Node Condition。
工作节点的动态维护过程依靠Node Controller来完成,它是k8s Controller Manager下属的一个控制器。它会一直不断的检查k8s已知的每台minion节点是否正常工作,如果一个之前已经失败的节点在这个检查循环中被检查为可以工作的,那么node Controller会把这个节点添加到工作节点中,繁殖node Controller会从工作节点中删除这个节点。
负责Scheduler调度工作的核心进程是Scheduler server,在启动Scheduler server之前,需要进行一些初始化操作,这些操作的结果将作为调度器的配置信息传入,包括:
Controller Manager运行在集群的Master节点上,是基于pod API的一个独立服务,它重点实现service Endpoint(服务端点)的动态更新。管理着k8s集群中各种控制节点,包括之前提到的replication Controller和node Controller。
与APIServer相比,APIServer负责接受用户请求并创建对应的资源,而Controller Manager在系统中扮演的角色是在一旁旁默默的管控这些资源,确保他们永远保持在预期的状态。它采用各种管理器定时的对pod、节点等资源进行预设的检查,然后判断出于预期的是否一致,若不一致,则通知APIServer采取行动,比如重启、迁移、删除等。
4. kubeletkubelet组件工作在k8s的minion上,负责管理和维护在这台主机上运行着的所有容器。
kube-proxy提供两种功能,一是提供算法将客服端流量负载均衡到service对应的一组后端pod。二是使用etch的watch机制,实现服务发现功能,维护一张从service到Endpoint的映射关系,从而保证后端pod的ip变化不会对访问者的访问造成影响。