温馨提示×

Ubuntu Kubernetes资源调度如何优化

小樊
32
2025-12-20 14:50:24
栏目: 智能运维

Ubuntu 上 Kubernetes 资源调度优化实战指南

一 基础与节点选择

  • 为节点打上稳定的标签(如disktype=ssd、region=cn-beijing-1、instance-type=c5.large、gpu=nvidia),在 Pod 中使用 nodeSelector 做基础定向;需要更灵活规则时使用 nodeAffinity,通过 requiredDuringSchedulingIgnoredDuringExecution(硬规则)与 preferredDuringSchedulingIgnoredDuringExecution(软规则)组合,实现“必须满足/尽量满足”的调度语义。示例:将工作负载调度到 SSD 节点或具备特定硬件的节点。对于专用资源(如 GPU)节点,给节点添加污点(如 key=value:NoSchedule),仅允许声明了相应容忍的 Pod 进入,实现资源隔离与专用化。以上策略均为 Kubernetes 原生调度能力,适用于 Ubuntu 节点。

二 提升高可用与拓扑分布

  • 使用 podAntiAffinity 将同一应用的副本分散到不同节点,降低单点故障风险;对强耦合服务可用 podAffinity 将相关 Pod 拉近以降低网络时延。示例:对标签为 app=web 的副本,要求不同节点分布(topologyKey 使用 kubernetes.io/hostname)。进一步通过 Topology Spread Constraints 在更高层级(如 zone/rack)控制最大不均衡度(maxSkew),实现跨故障域的均匀分布。结合 污点与容忍NoExecute 效果,可在节点异常时快速驱逐不健康 Pod,避免级联影响。

三 资源配置与 QoS 管理

  • 为容器设置合理的 requests/limits:requests 用于调度器选择节点,limits 用于运行时限制;内存超限会被 OOMKilled,CPU 超限会被 CPU 限流。示例:requests cpu=500m、memory=256Mi;limits cpu=1、memory=512Mi。通过 QoS 分类提升稳定性:
    • Guaranteed(requests=limits):关键业务优先保障;
    • Burstable(requests<limits):允许突发;
    • BestEffort(未设 requests/limits):低优先级。
      在命名空间级用 LimitRange 设置默认/最小请求与限制,用 ResourceQuota 控制总配额,防止租户/团队超额占用。节点侧通过 kubelet 资源预留(system-reserved、kube-reserved)保障系统组件与内核稳定。

四 节点稳定性与驱逐策略

  • Ubuntu 上调整 kubelet 驱逐参数以应对资源紧张:设置 –eviction-hard(如 memory.available<500Mi、nodefs.available<1Gi、imagefs.available<10%)、–eviction-soft–eviction-soft-grace-period 实现“先告警后驱逐”,并通过 –eviction-minimum-reclaim 保证每次回收后节点保留最低可用资源;配合 –system-reserved–kube-reserved 预留资源,避免系统/控制面受影响。驱逐时按 QoSPod 优先级 选择目标:优先驱逐 BestEffort,其次 Burstable(且使用量超过 requests),最后才是 Guaranteed(通常仅在超限或内存极度紧张时)。节点压力缓解后,状态会在 eviction-pressure-transition-period 内稳定,避免频繁状态抖动影响调度。

五 调度器扩展与自动扩缩

  • 在调度框架启用或调优评分插件(如 NodeResourcesBalancedAllocation)提升节点资源均衡度;对多租户/多队列场景引入 Capacity Scheduling 做容量预留与资源共享;对批处理/分布式训练引入 Gang Scheduling 实现“全有或全无”的协同调度,避免部分就绪导致资源死锁。结合 HPA(基于 CPU/内存/自定义指标)VPA(自动调 requests/limits)Cluster Autoscaler(节点自动扩缩) 实现闭环弹性;若节点负载长期不均,可使用 Descheduler 对已运行 Pod 做二次重调度,配合 kubectl drain/uncordon 做维护期安全排空与恢复。对成本敏感场景,可设置 资源优先级(如优先使用包年包月/高性能实例,再回退到按量/抢占式实例),并在缩容时逆序释放,兼顾性能与成本。

0