k8s调度的过程,各组件之间的配合解析

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

图片描述如下:

文字描述如下:

1. ​用户提交Pod请求
  • 组件:​ kubectlAPI Serveretcd
  • 流程:​
    • 用户通过kubectl提交Pod配置。
    • kubectl将请求发送至API Server
    • API Server验证请求后,将Pod信息写入etcd,此时Pod状态为Pending(未调度)。
2. ​调度器检测未调度的Pod
  • 组件:​ SchedulerAPI Server
  • 流程:​
    • Scheduler通过Watch机制监听API Server,筛选nodeName为空的Pod。
    • 发现待调度Pod后,开始调度决策。
3. ​调度决策​
  • 组件:​ Scheduler
  • 流程:​
    • 过滤(Predicates):​ 排除不满足条件的节点(如资源不足、污点不容忍、节点Selector不匹配)。
    • 打分(Priorities):​ 对剩余节点评分(如资源均衡、亲和性策略),选择最优节点。
4. ​绑定Pod到目标节点
  • 组件:​ SchedulerAPI Serveretcd
  • 流程:​
    • 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 ManagerAPI 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生命周期管理,与容器运行时协作。
  • 声明式设计:各组件通过监听和更新资源状态,实现最终一致性。
相关推荐
p***c9491 小时前
微服务展望
微服务·云原生·架构
AKAMAI1 小时前
企业如何平衡AI创新与风险
人工智能·云原生·云计算
天草二十六_简村人3 小时前
docker安装index-tts,实现文本转语音的本地私有化部署
运维·docker·ai·容器·ai编程
观望过往3 小时前
Docker 全面技术指南:从基础概念到企业级应用实践
运维·docker·容器
java_logo5 小时前
MONGO-EXPRESS Docker 容器化部署指南
linux·运维·mongodb·docker·容器·express
稚辉君.MCA_P8_Java6 小时前
Sqoop 实现的功能是什么
java·服务器·架构·kubernetes·sqoop
IT瑞先生6 小时前
Docker容器使用手册——进阶篇(下)
运维·docker·容器
G***66916 小时前
后端服务网格部署,Istio安装与配置
云原生·istio
_abcdef7 小时前
Kubernetes K8s
云原生·容器·kubernetes
java_logo7 小时前
Kubernetes Dashboard Docker 容器化部署指南
运维·mysql·docker·云原生·容器·kubernetes·php