温馨提示×

centos上k8s资源调度策略有哪些

小樊
50
2025-08-31 01:48:09
栏目: 智能运维

1. 基于资源请求与限制的调度
这是Kubernetes最基础的调度策略,通过为Pod设置resources.requests(启动所需最小资源)和resources.limits(最大可使用资源),调度器会根据节点资源剩余量(如CPU、内存)选择符合条件的节点。例如,若节点剩余内存为2Gi,而Pod请求1Gi,则该节点可能被选中。这种方式能避免资源过度分配,保障Pod稳定运行。

2. 亲和性与反亲和性调度

  • 节点亲和性(Node Affinity):通过节点标签将Pod调度到特定节点(如“带SSD存储”“高性能CPU”),分为“硬性要求”(requiredDuringSchedulingIgnoredDuringExecution,必须满足)和“软性偏好”(preferredDuringSchedulingIgnoredDuringExecution,尽量满足)。例如,要求数据库Pod调度到带“ssd=true”标签的节点。
  • Pod亲和性/反亲和性(Pod Affinity/Anti-Affinity):Pod亲和性将相关Pod调度到同一节点(如“前端与后端服务在同一节点,减少网络延迟”);Pod反亲和性将Pod分散到不同节点(如“订单服务副本分布在3个不同节点,避免单点故障”)。

3. 污点(Taints)与容忍度(Tolerations)调度

  • 污点:通过kubectl taint命令给节点打上“污点”(如node-role.kubernetes.io/master:NoSchedule),标记节点的特殊属性(如主节点不调度普通Pod、节点维护中)。普通Pod默认无法调度到有污点的节点。
  • 容忍度:Pod通过tolerations字段声明可容忍的污点,允许被调度到有对应污点的节点。例如,运维Pod可容忍主节点的污点,从而部署在主节点上。

4. 调度器插件扩展
Kubernetes默认调度器支持通过插件扩展功能,常见插件包括:

  • podTopologySpread:将Pod均匀分布到不同节点、可用区或拓扑域(如NUMA节点),实现负载均衡和高可用。例如,将3个副本分散到3个不同可用区,避免单可用区故障影响所有副本。
  • GPU调度插件(如k8s-device-plugin):针对需要GPU资源的Pod(如AI训练任务),自动识别节点上的GPU设备并进行分配,确保GPU资源合理利用。

5. 服务质量(QoS)分级
根据Pod的资源请求与限制设置QoS级别,分为三类:

  • Guaranteedrequests等于limits(如cpu: "1", memory: "2Gi"),优先级最高,保障关键应用(如数据库)的资源需求。
  • Burstablerequests小于limits(如cpu: "0.5", memory: "1Gi"),适用于一般应用(如Web服务),资源需求波动较大。
  • BestEffort:未设置requestslimits,优先级最低,适用于批处理任务(如日志收集),在资源紧张时最先被驱逐。

6. 优先级与抢占(Priority and Preemption)

  • 优先级:为Pod设置priorityClassName(如high-priority),数值越高优先级越高。调度时优先选择高优先级Pod。
  • 抢占:当资源不足时,高优先级Pod可以抢占低优先级Pod的资源(驱逐低优先级Pod),确保自身运行。例如,生产环境的核心服务Pod可抢占测试环境的Pod资源。

7. 节点规划与资源配额

  • 节点规划:根据应用需求划分节点类型(如计算节点、存储节点、控制平面节点)。计算节点选择高CPU/内存配置,存储节点选择SSD/HDD存储,控制平面节点确保高可用(多节点部署)。
  • 资源配额(ResourceQuotas):通过命名空间限制资源使用(如cpu: "4", memory: "8Gi", pods: "10"),防止某个命名空间占用过多集群资源,保障集群整体稳定性。

8. Horizontal Pod Autoscaler(HPA)
根据CPU利用率、内存使用量或自定义指标(如QPS)自动调整Pod副本数。例如,当Pod的CPU利用率超过70%时,HPA自动增加副本数(如从3个扩到5个);当利用率低于30%时,减少副本数(如从5个缩到3个),实现资源的动态调度。

0