Kubernetes核心架构
- Mater管理节点:Etcd、Controller Manager、Scheduler
- Node工作节点:Kubelet、Kube-proxy、CRI(容器运行时)、CNI(容器网络插件)、Pod
核心控制平面组件
-
Etcd:键值对高性能安全存储系统,持久化集群中的所有资源对象
- Etcd可以使用集群模式(奇数),成员间可通过Raft共识算法复制请求并达成协议
- Etcd工作原理:
- 客户端调用gRPC方法
- etcd leader利用Raft共识算法向member发送写入请求并得到半数人的响应
- etcd leader将写入命令添加到log中
- etcd根据相应的写操作固化到磁盘中
- etcd将结果返回给客户
- Etcd的选举机制
-
Api Server
- API网关,所有的用户请求、系统组件与集群通信的入口
- 所有资源请求都是调用Api Server的api接口
- 有完整的安全机制:身份验证、授权、准入
- 可通过kubectl命令于Api Server通信
- 一个集群允许有多个Api Server,并可以用Haproxy进行负载均衡
-
Controller Manager
- 是K8S集群的自动化控制中心,将应用运行成用户期望的状态
- 包含30多个控制,工作模式雷同
- 都受Api server的监控
- 控制器是主备模式、Leader Election机制来实现故障转移
- 例如:副本可以允许有多个,但是只有一个leader,其余的副本都是竞争上岗,不断地获取锁(在k8s中,锁是一种资源。控制器的锁在kube-sytem名为kube-controller-manager的Endpoint中)。一旦leader无法工作,其余的副本就会竞争上岗
- Leader Election的时间参数
- leaseDuration:资源锁定后的租约时间
- renewDeadline:leder主动放弃锁
- retryPeriod:在leader更新锁和member获取锁的时间间隔
-
Scheduler
- 负责集群中pod的调度分配
- Leader Election主备模式
- 在kube-sytem的kube-scheduler的Endpoint中
- 如果spec.NodeName为空,就会根据pod的Resources等条件为pod选择最优的节点。在更新节点名字到pod的spec.NodeName字段中
- 调度器调度的两个阶段
- 调度预选(周期)阶段:
- Predicate:硬性条件选择
- 调度绑定:
- Priority:软性条件,根据节点的评分,选择评分高的来调度
- 调度预选(周期)阶段: