CentOS上K8s的资源调度主要通过kube-scheduler组件实现,核心流程和策略如下:
-
调度流程
- 过滤阶段:根据节点资源(CPU/内存)、亲和性/反亲和性、污点/容忍度等规则筛选候选节点。
- 打分阶段:对候选节点按资源利用率、负载均衡、优先级等策略评分,选择最高分节点。
- 绑定阶段:将Pod绑定到目标节点,由kubelet执行创建。
-
核心调度策略
- 资源请求与限制:通过
requests(最低需求)和limits(最大限制)控制Pod资源分配。
- 亲和性与反亲和性:
- 节点亲和性:指定Pod调度到特定标签的节点(如
nodeSelector)。
- Pod亲和性/反亲和性:控制Pod与其他Pod的分布(如避免单点故障)。
- 污点与容忍度:节点标记污点(如维护状态),仅允许有对应容忍度的Pod调度。
- 优先级与抢占:高优先级Pod可抢占低优先级Pod的资源。
-
扩展与优化
- 调度插件:通过插件(如
NodeResourcesFit、PodTopologySpread)自定义调度逻辑,例如按CPU拓扑分布Pod。
- 资源拓扑感知:利用CPU拓扑(如NUMA)优化调度,减少跨节点通信延迟。
- 监控与调优:结合Prometheus等工具监控资源使用,动态调整调度策略。
关键命令与配置:
- 查看调度事件:
kubectl get events
- 编辑调度器配置:修改
/etc/kubernetes/manifests/kube-scheduler.yaml(需重启集群)。
- 自定义调度策略:通过
KubeSchedulerConfiguration配置文件调整插件参数。
以上策略可确保CentOS上K8s集群的资源高效分配与高可用性。