资源调度优化实战:地理调度、亲和/反亲和与定制调度器,别再把集群当“老虎机”

简介: 资源调度优化实战:地理调度、亲和/反亲和与定制调度器,别再把集群当“老虎机”

资源调度优化实战:

地理调度、亲和/反亲和与定制调度器,别再把集群当“老虎机”

我是 Echo_Wish,一个在运维这条路上,被调度坑过、救过火、背过锅的老运维。

我先说一句可能有点扎心的话:

90% 的集群“资源不够”,不是机器不够,而是调度太随缘。

很多团队的真实状态是这样的👇

  • 机器买了一堆
  • 集群也上了
  • Kubernetes 也部署了
  • 结果:

    • 有的节点快被压死
    • 有的节点在“养老”
    • 跨地域访问延迟飙升
    • 一出故障就是“玄学”

为什么?
因为调度策略从来没认真想过

今天这篇文章,咱不讲调度器源码(那玩意看完只会更焦虑),我只围绕三个真正能救命的实战点聊清楚:

  1. 地理调度:让流量少走弯路
  2. 亲和 / 反亲和:让 Pod 知道该跟谁混、该躲谁
  3. 定制调度器:当默认调度真的不懂你业务时

咱用运维人能听懂的方式讲。


一、地理调度:别再让“北京用户请求广州机器”

1️⃣ 这是个真实到离谱的问题

我遇到过一个系统:

  • 用户主要在 华东
  • 机器分布在 北京 + 上海
  • 服务部署随缘

结果就是:

  • 用户在上海
  • 请求被调度到北京
  • RTT 高、超时多、投诉多

开发第一反应:

“是不是 JVM GC 有问题?”

运维一看:

“哥们,你这请求在全国旅游。”


2️⃣ 地理调度的核心思想很简单

一句话总结:

请求在哪,服务尽量在哪

在 Kubernetes 里,地理信息本质上就是 Node Label

kubectl label node node-shanghai region=shanghai
kubectl label node node-beijing region=beijing

3️⃣ Pod 侧约束:我只想待在“本地”

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      nodeSelector:
        region: shanghai

这是最简单粗暴的地理调度

适合场景:

  • 单地域服务
  • 边缘计算
  • CDN 辅助服务

4️⃣ 更现实的玩法:优先就近,而不是“非此即彼”

affinity:
  nodeAffinity:
    preferredDuringSchedulingIgnoredDuringExecution:
    - weight: 100
      preference:
        matchExpressions:
        - key: region
          operator: In
          values:
          - shanghai

意思是:

优先上海,不行再说

这才是生产该有的态度。


📌 Echo_Wish 的感受

地理调度不是“优化”,而是“止血”
你不做,用户体验迟早替你付出代价。


二、亲和 / 反亲和:Pod 也是“社交动物”

1️⃣ 为什么 Pod 需要“亲疏远近”?

现实中有三类需求非常常见:

  1. 强依赖组件

    • Web ↔ Cache
    • API ↔ Sidecar
  2. 高可用隔离

    • 同一服务的副本不能在同一台机器
  3. 资源竞争隔离

    • CPU 怪兽和 IO 怪兽别住一起

如果你全靠默认调度:
👉 等着事故找你吧


2️⃣ Pod 亲和:兄弟,咱住近点

affinity:
  podAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchLabels:
          app: redis
      topologyKey: kubernetes.io/hostname

含义是:

这个 Pod 必须和 redis 在同一节点

适合场景:

  • 本地缓存
  • 高频 RPC
  • Sidecar 模式

3️⃣ Pod 反亲和:兄弟,对不起,咱得分开住

affinity:
  podAntiAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
    - labelSelector:
        matchLabels:
          app: order-service
      topologyKey: kubernetes.io/hostname

这个配置,救过无数系统的命

它能保证:

  • 同一个服务的副本
  • 不会被调度到同一节点

节点挂一个,服务还活着。


4️⃣ 强约束 vs 软约束,别一刀切

preferredDuringSchedulingIgnoredDuringExecution:

这是我个人最推荐的写法。

理由很简单:

可用性 > 完美性

很多事故,都是“约束太严格,结果调度不出来 Pod”。


📌 Echo_Wish 的一句话总结

亲和是为了性能,反亲和是为了命
能不用反亲和的系统,说明你还没被打过。


三、定制调度器:当默认调度器真的不懂你业务

1️⃣ 什么时候你才需要它?

我先劝退一波人:

80% 的集群,不需要自定义调度器

但如果你有以下情况之一👇

  • GPU / FPGA / 专用卡
  • 特殊网络拓扑
  • 强 SLA / 强优先级
  • 成本感知调度(抢占 + 计费)

那默认调度器真的不懂你。


2️⃣ 最低成本方式:Scheduler Extender

--scheduler-extender-url=http://extender:8080

Extender 负责两件事:

  • Filter:哪些节点不能用
  • Score:哪些节点更合适

示例逻辑(伪代码):

def score(nodes, pod):
    for node in nodes:
        if node.has_gpu and pod.need_gpu:
            score[node] += 100
        if node.cpu_usage > 80:
            score[node] -= 50

3️⃣ 真·定制调度器(慎重)

spec:
  schedulerName: my-scheduler

然后你自己实现:

  • 队列
  • 过滤
  • 打分
  • 绑定

我说句大实话:

这一步不是技术难,是责任重

一旦出问题:

  • 全集群 Pod 卡住
  • 恢复成本极高

📌 我的真实建议

能靠 Label + Affinity 解决的,
千万别上定制调度器。


四、把调度当“系统设计”,而不是 YAML 技巧

很多人学调度,学的是:

  • 字段
  • 参数
  • 示例

但真正该学的是:

  • 你的业务怕什么?
  • 是延迟?
  • 是单点?
  • 是成本?
  • 是资源争抢?

然后反推:

  • 地理调度解决“远”
  • 反亲和解决“死”
  • 定制调度解决“特殊”

五、写在最后:调度,是运维真正的“内功”

我常跟新人说一句话:

不会调度的运维,
迟早会被“资源不够”这四个字压垮。

而真正成熟的运维,会越来越少喊:

  • “再买点机器”
    而是多问一句:
  • “调度是不是在浪费资源?”
目录
相关文章
|
存储 大数据 API
大数据隐私保护策略:加密、脱敏与访问控制实践
【4月更文挑战第9天】本文探讨了大数据隐私保护的三大策略:数据加密、数据脱敏和访问控制。数据加密通过加密技术保护静态和传输中的数据,密钥管理确保密钥安全;数据脱敏通过替换、遮蔽和泛化方法降低敏感信息的敏感度;访问控制则通过用户身份验证和权限设置限制数据访问。示例代码展示了数据库、文件系统和API访问控制的实施方式,强调了在实际应用中需结合业务场景和平台特性定制部署。
4502 0
|
4月前
|
设计模式 人工智能 程序员
【架构演进】智能体来了(西南总部)深度解析:多智能体协作(Multi-Agent)系统的设计哲学与工程实践
本文探讨AI架构从单体大模型向多智能体系统(MAS)的范式跃迁,基于“智能体来了(西南总部)”技术研判,解析角色解耦、消息路由与共享记忆等核心设计,揭示如何构建高效协作的“数字蜂群”,推动分布式AI从理论走向工程化落地。
535 2
|
4月前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU云服务器怎么样?云服务器性能、应用场景及收费标准和活动价格参考
阿里云GPU云服务器通过GPU与CPU协同计算,为人工智能、高性能计算等领域提供强大支持,具备覆盖广、计算能力强、网络性能出色等优势,适用于直播转码、图片渲染、AI训练推理等场景,单实例可提供高达1000 TFLOPS混合精度计算性能。其计费方式灵活,包括包年包月、按量付费等。2026年特惠活动期间,新人可享T4、V100卡最低包月5折起,目录价直降最高25%,用户可结合优惠券进一步降低成本,实现高效上云。
452 7
|
4月前
|
消息中间件 运维 监控
Kafka 最佳实践:分区策略、重试、幂等生产者
Kafka 最佳实践:分区策略、重试、幂等生产者
332 3
|
4月前
|
运维 安全 Linux
Xshell-7.0.0164.exe 使用步骤详解(附连接与常见问题)
Xshell 7是一款功能强大的SSH客户端,用于远程连接Linux服务器、虚拟机或网络设备。通过简单安装与配置,用户可快速建立安全会话。支持密码和密钥登录,具备多标签、复制粘贴、文件传输(配合Xftp)和操作日志记录等实用功能,是运维管理的高效工具。
|
消息中间件 存储 负载均衡
AI 推理场景的痛点和解决方案
一个典型的推理场景面临的问题可以概括为限流、负载均衡、异步化、数据管理、索引增强 5 个场景。通过云数据库 Tair 丰富的数据结构可以支撑这些场景,解决相关问题,本文我们会针对每个场景逐一说明。
4278 149
AI 推理场景的痛点和解决方案
|
4月前
|
存储 人工智能 数据库
Agentic Memory 实践:用 agents.md 实现 LLM 持续学习
利用 agents.md 文件实现LLM持续学习,让AI Agent记住你的编程习惯、偏好和常用信息,避免重复指令,显著提升效率。每次交互后自动归纳经验,减少冷启动成本,跨工具通用,是高效工程师的必备技能。
536 17
Agentic Memory 实践:用 agents.md 实现 LLM 持续学习
|
人工智能 运维 搜索推荐
杭州速车携手蚂蚁百宝箱,快速抢滩文旅AI新市场
杭州速车科技依托蚂蚁百宝箱,打造“福小厝”等9个文旅智能体,实现从技术服务商向“AI+场景”转型。通过低代码平台快速交付,覆盖导览、打卡、营销等场景,服务超10万用户,助力景区提升体验与消费转化。
356 0
|
4月前
|
Linux
Linux系统之cat命令基本使用
Linux系统之cat命令基本使用
1093 10
Linux系统之cat命令基本使用

热门文章

最新文章