kube-scheduler 调度流程
创建 Pod 后,kube-scheduler 分两步选出节点:1
过滤
排除不满足硬性条件的节点,例如资源不足、端口冲突、节点标签不匹配。
2
打分
对剩余节点按策略打分,例如资源均衡程度、镜像是否已存在,选得分最高的节点。
资源请求与限制
requests 是调度依据,limits 是运行上限:
- CPU:可压缩资源。超限只会被限流,容器变慢但不会死。
- 内存:不可压缩资源。超限会触发 OOM,容器被直接杀掉重启。
QoS 三个等级
Kubernetes 根据 requests 和 limits 的配置,把 Pod 分为三级:亲和性调度
nodeAffinity:选择节点
required 是硬条件,preferred 是软倾向,尽量满足但不强制。
podAffinity 与 podAntiAffinity:选择邻居
污点与容忍
污点是节点的”拒绝标志”,Pod 必须有对应容忍才能调度上去。常用于专用节点。拓扑分布约束
topologySpreadConstraints 让副本在节点、可用区之间均匀分布:
HPA 自动扩缩
HPA 根据指标自动调整副本数。先确保集群装了 metrics-server。VPA 与 Cluster Autoscaler
- VPA:纵向扩缩,自动调整 Pod 的 requests 和 limits 数值。
- Cluster Autoscaler:调整集群本身,节点不够时加节点,空闲时减节点。