当前位置:首页 > 文章列表 > 科技周边 > 业界新闻 > Kubernetes动态资源分配支持异构加速器

Kubernetes动态资源分配支持异构加速器

来源:17golang原创 2026-11-15 13:00:16 0浏览 收藏

我第一次把这条消息放进升级清单时,差点把它理解成“安装一个新组件,就能自动调度所有 GPU”。实际情况更准确:CNCF 在 2026 年 11 月 10 日的公告中,把 Kubernetes 的工作负载感知调度和 Dynamic Resource Allocation(DRA)列为 AI 基础设施进展;同时,HAMi 进入孵化阶段,负责异构加速器的共享与调度。它们属于同一生态方向,却不是同一个功能开关。

官方地址:https://kubernetes.io/

如果你的集群要混用不同型号 GPU、FPGA 或其他专用设备,DRA 的价值是把“设备属性、可用状态和工作负载声明”拆成可组合对象,让调度器按条件选设备;它不是把旧的设备插件请求语法原样升级,也不会自动替你安装厂商驱动。

这次生态消息到底改变了什么

CNCF 公告提到 Kubernetes 在工作负载感知调度和 DRA 上取得进展,并把 HAMi 的异构加速器共享与调度能力放在同一组 AI 基础设施成果中。对平台团队来说,真正值得关注的是调度模型正在从“节点上有几个某型号资源”转向“这个工作负载需要什么设备属性、容量和配置”。

当前 Kubernetes 官方文档把 DRA 标记为从 v1.35 起稳定的能力;Kubernetes v1.37 的官方更新又说明,DRA Extended Resource 已经进入 GA,可以让传统 extended resource 请求与 DRA 设备匹配。迁移时不要只看新闻标题,应该把 Kubernetes 版本、驱动实现和现有请求方式一起列入变更范围。

公告原文:https://www.cncf.io/announcements/2026/11/10/cncf-hits-major-milestones-with-global-community-growth-record-industry-investment-and-a-new-generation-of-projects-to-build-ai-systems-in-production/

从设备插件到 DRA,几个对象分别负责什么

旧方案通常把设备插件暴露的资源名直接写进 Pod 的 resources.limits。DRA 则把设备目录、筛选条件、申请关系和 Pod 使用关系拆开:

对象职责迁移时要问的问题
DeviceClass给一类设备定义可复用的分类和筛选规则属性是否足以区分显存、架构或互联能力
ResourceClaim工作负载声明要申请的设备条件Claim 的生命周期是否跟 Pod 或模板一致
ResourceSlice驱动向集群公布设备、属性、容量和可分配状态驱动是否能持续提供真实设备状态
Pod引用 ResourceClaim 或 ResourceClaimTemplate是否仍然绕过调度器写入了 spec.nodeName
Kubernetes DRA 中 DeviceClass、ResourceClaim、ResourceSlice、Pod 和设备驱动的关系结构图
图1:DRA 对象与异构加速器驱动之间的关系说明图,不是集群运行截图。

异构设备请求不应只写一个厂商资源名

当工作负载只需要“支持某种计算能力、显存范围和互联属性”的设备时,DRA 可以用结构化参数和 CEL 表达式筛选设备。下面是一个用于说明对象关系的简化 YAML,字段含义应以目标 Kubernetes 版本及设备驱动文档为准;它不是已经在某个集群执行过的结果。

apiVersion: resource.k8s.io/v1
kind: ResourceClaim
metadata:
  name: inference-accelerator
spec:
  devices:
    requests:
    - name: primary
      exactly:
        deviceClassName: accelerator.example.com
        # 用属性表达需求,避免把某个厂商型号写死在业务 Pod 中。
        selectors:
        - cel:
            expression: device.attributes["accelerator.example.com"].memoryGiB >= 24
---
apiVersion: v1
kind: Pod
metadata:
  name: inference-worker
spec:
  containers:
  - name: worker
    image: example/inference-worker:stable
    # 容器通过 ResourceClaim 使用已分配设备,不直接猜测节点名称。
    resources:
      claims:
      - name: primary
  resourceClaims:
  - name: primary
    resourceClaimName: inference-accelerator

这段示例有两个重点:一是把设备选择条件放到 Claim 中,二是让 Pod 引用 Claim,而不是用节点名把调度器绕开。真实落地前要检查设备驱动提供的属性名称、API 版本和字段结构,不能把示例中的域名当成现成驱动。

异构加速器从旧设备插件请求迁移到 DRA 的变更决策和回归检查图
图2:从传统资源请求到 DRA 的迁移决策说明图,展示检查点而非真实运行结果。

升级前最容易忽略的四个风险

  1. 版本和驱动不是一回事。DRA API 进入稳定状态,不代表每个厂商驱动都已经支持相同的 DeviceClass、ResourceSlice 或状态字段。先确认控制面版本、节点组件版本和驱动支持矩阵。
  2. 预绑定 Pod 会绕过正常调度。如果直接设置 spec.nodeName,Pod 可能在 Claim 尚未分配时就被送到节点,最终由 kubelet 反复检查。要固定节点,优先使用能继续经过调度流程的节点选择器。
  3. DRA 资源目前不能按普通 Pod 资源抢占。官方文档明确提示,正在使用 DRA 设备的 Pod 不能被更高优先级的 Pod 通过抢占直接赶走;容量紧张时要把等待和释放时间纳入队列设计。
  4. 旧监控指标可能不覆盖新对象。以前只看节点扩展资源数量,迁移后还要观察 ResourceClaim 状态、ResourceSlice 信息和设备健康状态,否则会出现“节点看起来有资源、Claim 却无法分配”的盲区。

我会这样安排一轮灰度迁移

  1. 先盘点现有设备插件、扩展资源名、节点标签、容器运行时和驱动版本,记录哪些业务真的依赖设备型号,哪些只依赖显存或架构能力。
  2. 在非生产节点安装支持 DRA 的驱动并观察 ResourceSlice 是否能描述预期设备;这一步只做资源目录和状态检查,不把业务流量切过去。
  3. 为一类低风险工作负载创建独立 ResourceClaim,验证 Claim 的分配、Pod 调度、设备注入和释放是否闭环。
  4. 把调度结果、Claim 状态、设备健康、Pod 重启和等待时长纳入同一张回归表,尤其记录设备不可用时的失败原因。
  5. 只有在灰度完成后,才考虑启用 DRA Extended Resource 或把旧请求逐批迁移;保留回滚路径,不要一次性删除旧设备插件。

我个人更倾向于先让 DRA 管理“属性复杂、型号混杂”的工作负载,继续让简单、成熟的单型号业务使用原有方式。这样能把迁移收益和故障半径控制在可解释范围内。

迁移清单:先确认能不能迁,再决定要不要迁

  • 控制面和节点版本是否满足目标 DRA 能力,Feature Gate 或 API 组是否按目标版本处理。
  • 设备驱动是否支持 DRA,并能发布准确的设备属性、容量和健康状态。
  • DeviceClass 的筛选条件是否描述了业务真正需要的能力,而不是复制硬件商品名。
  • ResourceClaim、ResourceClaimTemplate 和 Pod 的命名空间、生命周期与回收策略是否清楚。
  • 是否覆盖设备不足、设备损坏、Claim 删除、Pod 重建、节点维护和调度超时等回归场景。
  • 是否保留传统请求方式和回滚窗口,且监控、告警、排队策略已经同步调整。

常见问题

DRA 是不是 HAMi 的替代品?

不是。DRA 是 Kubernetes 的资源分配与调度能力;HAMi 是围绕异构加速器共享和调度的生态项目。二者可以在同一 AI 基础设施版图中出现,职责和安装方式仍需分别阅读官方文档。

用了 DRA 就能自动支持所有 GPU 吗?

不能。还需要兼容的设备驱动、节点上的设备、正确的 DeviceClass/Claim 定义,以及与目标 Kubernetes 版本匹配的控制面配置。

现有 extended resource 请求必须马上改掉吗?

不必。Kubernetes v1.37 的 DRA Extended Resource 已进入 GA,但是否迁移取决于驱动支持、设备模型复杂度和回滚要求。先盘点和灰度,比一次性替换更稳妥。

参考资料:https://kubernetes.io/docs/concepts/resource-management/dynamic-resource-allocation/;https://kubernetes.io/blog/2026/09/03/kubernetes-v1-37-dra-updates/;https://www.cncf.io/announcements/2026/11/10/cncf-hits-major-milestones-with-global-community-growth-record-industry-investment-and-a-new-generation-of-projects-to-build-ai-systems-in-production/

版本声明
本文转载于:17golang原创 如有侵犯,请联系study_golang@163.com删除
CNCF新一代AI基础设施项目进入生产阶段CNCF新一代AI基础设施项目进入生产阶段
上一篇
CNCF新一代AI基础设施项目进入生产阶段
Rust 1.100稳定never类型后旧版edition有哪些兼容影响
下一篇
Rust 1.100稳定never类型后旧版edition有哪些兼容影响
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • PubMedQA数据集详解:生物医学问答基准、功能与应用指南
    PubMedQA
    深入了解PubMedQA生物医学问答数据集,涵盖其核心功能、使用方法及在临床决策、药物研发等场景的应用,助力提升NLP模型性能。
    1037次使用
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    1035次使用
  • LMArena是什么?伯克利AI模型评估平台使用指南与功能解析
    LMArena
    LMArena是加州大学伯克利分校推出的AI模型匿名评测平台。通过盲测投票机制,用户可对比不同大模型回答并生成实时排行榜,助力开发者优化模型及用户选择最佳AI工具。
    1179次使用
  • 斯坦福HELM:大语言模型Holistic Evaluation整体评估框架详解
    HELM
    深入了解斯坦福推出的HELM(Holistic Evaluation of Language Models)大模型评测体系。本文解析其核心功能、安装配置步骤及应用场景,涵盖准确性、公平性、鲁棒性等多维度指标,助力开发者全面优化语言模型性能。
    1139次使用
  • MMBench详解:多模态大模型基准测试、功能特点与使用指南
    MMBench
    MMBench是由上海人工智能实验室等机构联合推出的多模态基准测试平台,提供细粒度能力评估、大规模数据集及VLMEvalKit工具。本文详细介绍其核心功能、安装使用方法及应用场景,助力开发者全面评估多模态模型性能。
    982次使用