Kubernetes的调度过程涉及多个组件的协作,确保Pod被分配到合适的节点上运行。整个过程,各个组件各司其职,通过API Server协作,共同完成Pod的调度和运行。其中调度器负责决策,kubelet负责执行,控制器确保状态一致,etcd作为存储中枢,API Server作为通信枢纽。
图片描述如下:

文字描述如下:
1. 用户提交Pod请求
- 组件:
kubectl
、API Server
、etcd
- 流程:
- 用户通过
kubectl
提交Pod配置。 kubectl
将请求发送至API Server
。API Server
验证请求后,将Pod信息写入etcd
,此时Pod状态为Pending
(未调度)。
- 用户通过
2. 调度器检测未调度的Pod
- 组件:
Scheduler
、API Server
- 流程:
Scheduler
通过Watch
机制监听API Server
,筛选nodeName
为空的Pod。- 发现待调度Pod后,开始调度决策。
3. 调度决策
- 组件:
Scheduler
- 流程:
- 过滤(Predicates): 排除不满足条件的节点(如资源不足、污点不容忍、节点Selector不匹配)。
- 打分(Priorities): 对剩余节点评分(如资源均衡、亲和性策略),选择最优节点。
4. 绑定Pod到目标节点
- 组件:
Scheduler
、API Server
、etcd
- 流程:
Scheduler
将目标节点信息通过API Server
更新Pod配置。API Server
将更新后的Pod信息写入etcd
。
5. 节点执行Pod创建
- 组件:
kubelet
、容器运行时
、kube-proxy
- 流程:
- 目标节点的
kubelet
通过Watch
监听到新Pod,调用容器运行时(如Docker/containerd)创建容器。 kubelet
持续监控Pod状态,并上报至API Server
。kube-proxy
根据Service配置更新网络规则(如iptables/IPVS),确保Pod网络通信。
- 目标节点的
6. 状态维护与故障处理
- 组件:
Controller Manager
、API Server
- 流程:
Controller Manager
中的控制器监控Pod状态,确保实际状态与期望一致。- 若节点故障,控制器触发重新调度流程,由
Scheduler
重新分配Pod。
7. 其他协作机制
- 存储卷绑定:
PersistentVolume
控制器管理存储卷与Pod的绑定。 - 镜像拉取:
kubelet
根据ImagePullSecrets
从镜像仓库拉取镜像。
用户 -> kubectl -> API Server -> etcd (存储Pod)
↓
Scheduler (监听Pod/Node状态) -> API Server -> etcd (更新nodeName)
↓
kubelet (创建容器) -> 容器运行时
↓
kube-proxy (配置网络)
↓
Controller Manager (确保状态一致)
组件协作示意图
关键点总结
- API Server :作为集群的中枢,所有组件通过它与
etcd
交互。- Scheduler:仅负责决策,不直接操作Pod或节点。
- kubelet:负责Pod生命周期管理,与容器运行时协作。
- 声明式设计:各组件通过监听和更新资源状态,实现最终一致性。