主节点是负责管理Kubernetes集群。
为了容错,集群中可以有多个主节点。多个主节点使系统处于高可用性模式,一个主节点用于执行任务,其他主节点作为备份。
主节点使用etcd存储、管理集群状态,所有的主节点都连接到etcd。
如图所示,主节点由4个部分组成:
- API server
- Scheduler
- Controller manager
- ETCD
API server/API服务器
- 所有管理任务通过主节点内的API服务器执行。
- API服务器的接口是REST接口。
- 命令请求处理之后,结果状态存储在分布式键值对数据库中。
Scheduler/调度器
- 调度器将任务分配到工作节点。它存储了每个工作节点的资源使用信息。
- 调度器以Pod和Service的形式调度任务。
- 在调度任务之前,调度器还会考虑任务相关的服务质量、数据位置、关联、反关联等。
Controller/控制管理器
- 是一个管理Kubernetes集群的守护进程。
- 控制管理器还执行生命周期功能,如名称空间创建和生命周期、事件垃圾收集、pod垃圾收集、级联删除垃圾收集、节点垃圾收集等。
- 基本上,控制器监视所管理对象的状态,如果对象的当前状态不满足期望状态,那么控制器将采取纠正步骤确保对象达到期望状态。
ETCD
- etcd是一个用于存储集群状态的分布式键值对数据库。
- 它可以是Kubernetes主服务器的一部分,也可以在外部配置。
- etcd是用go语言编写的。在Kubernetes中,除了存储集群状态(基于Raft Consensus算法)之外,它还用于存储配置细节,如子网、配置映射、保密信息等。
- Raft是一种共识算法,作为Paxos算法的替代方案而设计。共识问题是指,在多个服务器上,如何就某个取值达成一致,是状态机复制场景中的常见问题。Raft定义了三种不同的角色(领导者、追随者和候选者),并通过选出的领导者达成共识。