从云原生走向 AI 原生:一套面向未来的架构方法论 → 阅读《AI 原生基础设施》

放置策略:标签、污点、优先级与公平性

草稿

计数回答“多少块”,标签回答“哪种”,拓扑回答“哪个物理实例”;放置策略就是把这些答案写成可审计的 Kubernetes 对象。

标签与亲和性

nodeSelector 简单而精确。节点亲和性(Node Affinity)更富表达力:required 规则保护正确性,preferred 规则表达性能偏好。为架构、内存档位、互连域、可用区和生命周期阶段使用稳定标签。

不要把 GPU UUID 写进应用 YAML
避免在普通应用 YAML 里写死 GPU UUID。平台应暴露资源抽象,让分配器去选择设备,这正是DRA把选择标准变成声明式属性的原因。

污点与容忍

当普通工作负载不应消耗 GPU 节点时给它们打污点(taint);给属于该池的工作负载加容忍(toleration)。容忍说的是“我可以在这里运行”,不是说“这是最好的节点”,把它与选择器或亲和性配对使用。设备插件路径下的典型组合:GPU 节点打 nvidia.com/gpu: NoSchedule 污点,GPU 工作负载带相应容忍。

优先级与抢占:一件锋利的工具

PriorityClass 让调度器偏袒更重要的 Pod。抢占(preemption)可以驱逐低优先级 Pod 腾出空间,但结果就是干扰。把它用于明确的业务关键性,并配合配额、检查点、优雅终止和容量余量。一个更大的数字不会让工作负载更正确

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: ai-serving-critical
value: 100000
preemptionPolicy: PreemptLowerPriority
globalDefault: false
description: "Critical online inference; use sparingly"

对批量训练,排队与成组准入(gang admission)可能比抢占正在运行的作业更有用(Volcano 与 Kueue 的核心语义,见控制面各章);对在线推理,应预留容量,而不是假设抢占能满足延迟 SLO。

配额是社会架构

一个共享 GPU 集群是一个多租户系统。ResourceQuota、命名空间所有权、排队策略、公平份额调度、计费返还(chargeback)或展示计费(showback)定义了谁能消耗稀缺容量。没有这些控制,最激进的工作负载就会变成调度器意外选出的产品经理。

apiVersion: v1
kind: ResourceQuota
metadata:
  name: gpu-team-quota
  namespace: ai-team
spec:
  hard:
    requests.nvidia.com/gpu: "8"
    limits.nvidia.com/gpu: "8"
    requests.cpu: "64"
    requests.memory: 512Gi

总结

放置策略是控制面的“软”层:它不改变资源本身,只决定资源流向谁、流向哪里。标签防错配、污点防侵占、优先级保关键、配额保公平;四件工具与调度问题域的硬约束共同构成完整的放置语言。

创建于 2026/08/30 更新于 2026/08/30 836 字 阅读约 2 分钟