1. 基于资源请求与限制的调度
这是Kubernetes最基础的调度策略,通过为Pod设置resources.requests(启动所需最小资源)和resources.limits(最大可使用资源),调度器会根据节点资源剩余量(如CPU、内存)选择符合条件的节点。例如,若节点剩余内存为2Gi,而Pod请求1Gi,则该节点可能被选中。这种方式能避免资源过度分配,保障Pod稳定运行。
2. 亲和性与反亲和性调度
requiredDuringSchedulingIgnoredDuringExecution,必须满足)和“软性偏好”(preferredDuringSchedulingIgnoredDuringExecution,尽量满足)。例如,要求数据库Pod调度到带“ssd=true”标签的节点。3. 污点(Taints)与容忍度(Tolerations)调度
kubectl taint命令给节点打上“污点”(如node-role.kubernetes.io/master:NoSchedule),标记节点的特殊属性(如主节点不调度普通Pod、节点维护中)。普通Pod默认无法调度到有污点的节点。tolerations字段声明可容忍的污点,允许被调度到有对应污点的节点。例如,运维Pod可容忍主节点的污点,从而部署在主节点上。4. 调度器插件扩展
Kubernetes默认调度器支持通过插件扩展功能,常见插件包括:
5. 服务质量(QoS)分级
根据Pod的资源请求与限制设置QoS级别,分为三类:
requests等于limits(如cpu: "1", memory: "2Gi"),优先级最高,保障关键应用(如数据库)的资源需求。requests小于limits(如cpu: "0.5", memory: "1Gi"),适用于一般应用(如Web服务),资源需求波动较大。requests和limits,优先级最低,适用于批处理任务(如日志收集),在资源紧张时最先被驱逐。6. 优先级与抢占(Priority and Preemption)
priorityClassName(如high-priority),数值越高优先级越高。调度时优先选择高优先级Pod。7. 节点规划与资源配额
cpu: "4", memory: "8Gi", pods: "10"),防止某个命名空间占用过多集群资源,保障集群整体稳定性。8. Horizontal Pod Autoscaler(HPA)
根据CPU利用率、内存使用量或自定义指标(如QPS)自动调整Pod副本数。例如,当Pod的CPU利用率超过70%时,HPA自动增加副本数(如从3个扩到5个);当利用率低于30%时,减少副本数(如从5个缩到3个),实现资源的动态调度。