面包屑图标 当前位置: 首页
AI资讯
热点详情

vivo AI计算平台K8s分级配额管理实践技术深度解析

AI热点日报
AI热点日报时间:2026-07-09
热点解读

针对原生Kubernetes资源配额管理在复杂业务场景下的局限,vivoAI计算平台自研了BizGroupResourceQuota方案。该方案通过分级配额树、硬件型号限定、资源使用时长控制及以部署对象为粒度的校验,解决了多层级组织架构、资源争抢与预算管理难题,已在全部在线业务落地。

vivo AI 计算平台在快速发展的过程中,发现原生 Kubernetes 资源配额管理(ResourceQuota)难以满足复杂业务场景的需求。本文将深入分析原生 ResourceQuota 的不足,并详细阐述 vivo 自研的 BizGroupResourceQuota(业务组资源配额)方案,该方案通过分级管理、细粒度控制等机制,优雅地解决了多层级组织架构、硬件型号限制、资源使用时长等配额管理难题。

背景与挑战:原生 ResourceQuota 的四个短板

Kubernetes 原生提供的 ResourceQuota 功能,虽然基于命名空间进行配额管理,简单易用,但在复杂生产环境中逐渐暴露出 四个关键短板

  1. 无法满足层级化业务组织架构的资源配额管理: ResourceQuota 与扁平化的命名空间绑定,难以支持树状业务结构(如总公司→事业部→项目组)的配额逐级下发与分配。
  2. 以 Pod 对象为粒度进行限额,可能导致部分 Pod 创建成功、部分失败: 在部署 Deployment、TFJob 等需要批量创建 Pod 的应用时,ResourceQuota 按单个 Pod 逐一检查,容易造成部分 Pod 因配额不足创建失败而部分成功,导致部署流程异常中断。理想的状态应是:要么全部成功创建,要么直接拒绝并返回配额不足提示。
  3. 无法针对具体 CPU 核型号和 GPU 卡型号进行配额管理: 原生 ResourceQuota 的资源粒度过于粗放,无法区分不同性能、不同成本的硬件型号(如 CPU 的 A1、A2、A4,GPU 的 T4、V100、A30、A100),导致高性能资源被随意占用。
  4. 无法限制资源使用时长: ResourceQuota 仅能限制“当前时刻”的资源占用量,无法约束业务对资源的持续使用时长(例如 GPU 卡时)。在离线训练场景中,这加剧了资源争抢,难以进行精细化的预算管理。

小提示: 问题2中提到的“部分 Pod 创建成功”现象,在大型分布式训练任务中风险尤为突出,可能导致任务状态混乱,并遗留孤立 Pod 造成资源浪费。

解决方案:BizGroupResourceQuota 分级配额管理方案

针对上述四个问题,vivo AI 平台设计了 BizGroupResourceQuota(简称 bizrq)方案,通过自定义 Kubernetes CRD 实现。该方案的核心思路是将配额管理与业务组织架构对齐,并提供更精细化的控制能力。

下图是一个 bizrq 配额的配置示例:

下面逐一解析 bizrq 方案的 关键特性

  • ① bizrq name(全局唯一标识): bizrq 对象是集群范围(cluster scope)的资源,不与命名空间绑定。实际应用中,bizrq name 可以对应业务组 ID,为树状结构的管理奠定基础。
  • ② 父 bizrq name(构建配额树): 通过配置“父 bizrq name”,可以形成一棵“bizrq 树”。子 bizrq 的配额必须从父 bizrq 的剩余额度中申请,从而实现层级化的配额下发与分配。当父 bizrq name 为空字符串时,该 bizrq 即为树的根节点。

  • ③ 默认配额示例: bizrq 完全兼容原生 ResourceQuota 的配置方式,例如 limits.cpurequests.memory 等,使用体验保持一致。
  • CPU 核型号配额示例: 这是关键扩展。bizrq 允许配置具体型号的 CPU 核配额,例如 limits.cpu.A4
    • 累加机制: 当申请 limits.cpu.A4 资源时,其使用量会同时累加到通用资源 limits.cpu 和具体型号资源 limits.cpu.A4 的已用额度中。
    • 双重限额生效: 例如,将 limits.cpu 配置为 10 核,limits.cpu.A4 配置为 4 核。申请 4 核 A4 后,两个配额均显示已用 4 核。此时无法再申请 A4 资源(限额已满),但仍可申请 6 核非 A4 型号的 CPU。
    • 配置限制: 不建议将 limits.cpu.A4 的配额设置得大于 limits.cpu,因为申请 A4 时,系统同样会检查通用 limits.cpu 的剩余额度。
  • GPU 卡型号配额示例: 其工作原理与 CPU 型号配额完全一致,支持对不同型号(如 limits.nvidia.com/gpu.A30)进行精细化控制。
  • ⑥、⑦ 核时/卡时配额示例: 这是解决“使用时长”问题的关键。bizrq 引入了“虚拟现金”机制,通过 cash/ 前缀来定义核时或卡时配额。
    • 例如: 配置 cash/limits.cpu: 100 表示该业务组拥有 100 个 CPU 核时。可以理解为 1 个核运行 100 小时,或 100 个核运行 1 小时。
    • GPU 卡时: 同理,cash/limits.nvidia.com/gpu: 500 表示 500 个 GPU 卡时。
  • ⑧ 关联部署对象: bizrq 不再以 Pod 为粒度进行校验,而是以 Deployment、Argo Rollout、TFJob 等上层部署对象 为粒度。通过部署对象上的 label biz.group.resource.quota 来关联具体的 bizrq 对象。
  • ⑨、⑩ 指定资源型号: 为了实现型号配额,需要为部署对象添加声明资源型号的 label,例如 biz.group.resource.quota/cpu-type: "A4"biz.group.resource.quota/gpu-type: "A30"

常见问题: 我的部署对象需要申请内存型号(例如 A4 机型的内存)该如何配置?
回答: bizrq 同样支持内存型号的限额。只需在 bizrq 配置中添加类似 limits.memory.A4 的条目,并在部署对象的 label 上设置 biz.group.resource.quota/memory-type: "A4" 即可,其行为与 CPU/GPU 型号配额完全一致。

实现原理:借鉴与创新

bizrq 方案在设计上借鉴了原生 ResourceQuota 的优秀思想,并针对新需求进行了扩展。理解原生 ResourceQuota 的实现原理,是深入理解 bizrq 的关键。

原生 ResourceQuota 实现原理

原生 ResourceQuota 由两个核心组件组成:

  • ResourceQuota Controller: 运行在 Controller Manager 中,负责“打扫战场”,实时监听 Pod 等对象的生命周期事件(如 Pod 删除、完成),并刷新对应的 ResourceQuota 状态(status.used),确保配额信息与实际使用情况最终一致。此外,它还会每 5 分钟进行一次全量刷新,防止数据不一致。
  • QuotaAdmission Controller: 作为一个准入控制器运行在 API Server 中,负责“把守关口”。它拦截 Pod 的创建请求,检查是否会导致配额超额。若超额则拒绝;若通过,则先尝试将资源增量更新到 ResourceQuota 的 status 中(使用乐观锁),更新成功后才放行请求。

核心机制:乐观锁保证并发安全

QuotaAdmission 和 ResourceQuota Controller 都会更新 status,因此存在并发冲突。K8s 使用 乐观锁 来解决这一问题:

  1. 每次更新请求时,都会携带资源对象的 resourceVersion
  2. API Server 通过 etcd 事务确保仅当 resourceVersion 与 etcd 中当前版本一致时,更新才成功。
  3. 如果更新失败(说明被其他请求修改了),QuotaAdmission 会进行重试,直到成功或超时。

这种方式比悲观锁(分布式锁)更高效,能够支持更高的并发请求。

小提示: 乐观锁虽然高效,但在高并发写场景下,少量请求重试属于正常现象。K8s 的 client-go 库提供了 RetryOnConflict 工具函数,可方便地实现重试逻辑。这是开发者需要理解和掌握的重要技巧。

BizGroupResourceQuota (bizrq) 实现架构

参考原生 ResourceQuota,bizrq 也划分为三个模块:

  • bizrq controller: 与原生 Controller 类似,负责监听 bizrq 对象和上层部署对象(如 Deployment)的事件,刷新 bizrq 的状态,并每 5 分钟进行一次全量刷新。其状态(status)相比原生增加了 selfUsed(自身使用量,不包含子 bizrq 的配额)和 lastReconcileTime(上次刷新时间),用于支持“核时/卡时”的计算。
  • bizrq validating admission webhook: 这是一个准入 Webhook,专门负责校验 bizrq 对象自身的管理操作(CRUD)。
    • 创建/更新校验: 检查 bizrq name 全局唯一、父 bizrq 是否存在及其配额是否充足、子 bizrq 的资源类型集合是否为父 bizrq 的子集等。
    • 删除校验: 仅允许删除叶子节点的 bizrq,防止误删父节点导致整个配额树混乱。
  • object validating admission webhook: 这是另一个准入 Webhook,负责拦截 上层部署对象(Deployment 等)的创建和更新请求。
    • 从部署对象中提取 副本数PodTemplate 中的资源请求量 以及 资源型号 label,计算出所需的资源增量。
    • 根据 biz.group.resource.quota label 找到对应的 bizrq,检查其剩余额度是否充足。
    • 若超额,则直接拒绝整个部署请求,从而有效避免了“部分 Pod 创建成功”的尴尬局面。

核时/卡时配额的实现细节

  • 计算方式: bizrq controller 在每次刷新状态时,根据 lastReconcileTime 和 Pod 的实际运行时长,结合 Pod 的资源请求量,计算出该业务组的累计“核时”或“卡时”使用量,并更新到 status.used 中。
  • 超额判断: object validating admission webhook 检查相应的“cash”资源是否已超额(如 bizrq.status.used['cash/limits.cpu'] >= bizrq.status.hard['cash/limits.cpu'])。若超额,则拒绝新的部署请求。
  • 非强制停止: 当“现金”配额耗尽时,系统不会强制关停正在运行的业务。平台通过监控告警通知业务方,由业务方自行决定后续处理(如缩减资源、申请更多配额等)。

常见问题: “核时”配额的计算是否完全精确?如果 Pod 被意外删除,会导致计算不准确吗?
回答: bizrq 的“核时”计算并非完全精确。例如,如果一个 Pod 被突然删除,下一次 controller 刷新时,该 Pod 的运行时长将不再被累加。但由于 controller 每 5 分钟刷新一次,误差范围很小,对于绝大多数业务场景(如预算管理、资源分配)来说,完全可以接受。如果需要百分百精确,则需引入更复杂的计费系统。

开发工具与实践落地

开发工具: 整个 bizrq 方案基于 kubebuilder 脚手架进行开发,该工具极大地简化了 CRD、Controller 和 Webhook 的开发工作。同时,使用 code-generator 生成了方便其他 Go 应用集成的客户端代码。

落地情况: 目前,bizrq 分级配额管理方案已在 vivo AI 平台的所有在线业务场景全面落地。通过将 bizrq 与业务的实际组织架构(项目-服务-流水线)相结合,实现了直观、用户可自助管理的分级配额界面。

后续,团队将持续完善 bizrq,计划支持更多类型的部署对象(如 StatefulSet、TFJob),优化自动扩缩容(HPA)场景下的校验逻辑,并提供更完善的配额迁移、借用流程以及资源碎片分析功能。

至此,我们详细介绍了 vivo AI 计算平台如何通过自研的 BizGroupResourceQuota 方案,弥补原生 ResourceQuota 的不足,构建了一套灵活、强大且易于管理的资源配额体系。这套方案的核心在于将配额管理与业务的“组织树”对齐,并通过细粒度的型号和时长控制,解决了资源争抢与管理效率低下的难题。

热点追踪提示词
你是一名 AI 行业编辑,请围绕下面这条热点输出一份资讯解读:
热点:vivo AI计算平台K8s分级配额管理实践技术深度解析要求:
1. 先用一句话解释这条热点在讲什么
2. 再总结它为什么重要
3. 说明会影响哪些 AI 产品或内容方向
4. 最后给出 3 个适合资讯站使用的标题
来源:https://m.elecfans.com/article/2025583.html
vivo

游乐网为非赢利性网站,所展示的游戏/软件/文章内容均来自于互联网或第三方用户上传分享,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系youleyoucom@outlook.com。

相关热点
AI热点2026-07-09 18:48
Cuspera按需匹配企业个性化软件解决方案

Cuspera平台帮助商务经理用关键词描述业务需求,基于同行和专家反馈自动排序,生成个性化软件推荐报告。核心功能包括个性化推荐、同行专家见解、AI生成报告及软件对比,简化选型调研过程。

AI热点2026-07-09 18:48
Turnitin全球领先论文查重防剽窃系统

说起论文查重工具,Turnitin无疑是全球范围内最受信赖的防剽窃系统之一。今天,我们通过两个维度快速解析——它究竟服务于哪些人群,以及具备哪些核心功能。目标用户群体实际上,Turnitin的覆盖范围远比许多人想象的广泛。除了大学生用于毕业论文查重外,个人创作者、教育机构、出版商、政府机关、非营利组

AI热点2026-07-09 18:48
Kits AI 专业高效人工智能声音生成与训练工具包

需求人群 简而言之,凡是涉及声音创作、音频处理、语音合成的相关工作,Kits AI都能胜任。无论是专业音乐制作人、音频工程师,还是热衷于AI语音合成技术的爱好者,都能在平台上找到契合自己需求的功能。 使用场景 比如,你手边有一首现成歌曲,希望将其中的人声单独提取出来进行重新混音?Kits AI便能轻

AI热点2026-07-09 18:48
Claude 2 AI API全球访问平台

Claudeai ai 这个平台,说白了就是通过 API 让你在全球任何地方都能用上 Claude 2 人工智能,不需要走什么特殊通道。它由 Anthropic AI 开发的 Claude 2 驱动,但本身并不属于 Anthropic,而是像官方服务那样把接口开放出来——关键是没有地区限制。 什么是

延伸阅读