总体架构:
分为两大部分:
-
master节点:负责提供API通信接口,集群的管理、调度、数据存储
-
node节点:负责容器的运行,运行的生命周期管理
master节点(control plane控制平面):
如何实现高可用:
-
通常部署3个或5个master节点
-
备用master节点通过etcd watch方式监听主节点状态,通过键值更新完成主备切换
核心组件:
-
api server:http请求入口,访问控制、API 注册和发现、etcd数据写入
-
controller manager:维护集群的状态,如故障检测、自动扩展、滚动更新
-
scheduler:资源调度,按调度策略将 Pod 调度到相应的机器上
-
etcd:数据持久化,保存整个集群的状态
node节点(工作节点):
核心组件:
-
kubelet: 维护容器的生命周期,也负责 Volume ( CSI )和网络( CNI )的管理
-
container runtime: 镜像管理, Pod 和容器的真正运行( CRI )
-
kube proxy: 为 Service 提供 集群 内的服务发现和负载均衡
创建一个pod的流程:
-
用户传入yaml文件,调用api server的创建pod接口
-
api server收到请求,将pod信息写入etcd中
-
调度器scheduler会通过api server接口,持续watch pod的创建事件,此时收到了事件通知,发现有新的pod数据,但是pod还未绑定到节点
-
scheduler通过调度算法,计算出pod的运行节点,调用api server,把运行节点信息更新到etcd
-
kubelet同样会通过api server接口持续watch,此时收到了事件通知,发现有新的pod被调度到当前节点
-
kubelet调用触发docker run,根据pod的描述信息拉取镜像,启动容器
-
kubelet启动容器后,把容器信息、事件、状态通过api server更新到etcd中
特点:
-
各组件分工明确
-
仅etcd存储数据,其他组件都是无状态的
-
组件的无状态保证了集群高可用
-
各组件和api server的数据推送都是通过watch机制