游乐游手机版
首页/AI教程/文章详情

HAMI VGPU 系列01 Webhook 组件详解

时间:2026-05-29 15:10
HAMi Webhook 架构与流程说明近期在梳理 HAMi Webhook 模块时,发现许多人对它的处理范围及具体细节理解不够清晰。基于 pkg scheduler webhook go 的当前实现,本文整理了 Webhook 的准入流程与几个关键变更点,希望帮助大家全面掌握这一逻辑。1 Web

HAMi Webhook 架构与流程说明

近期在梳理 HAMi Webhook 模块时,发现许多人对它的处理范围及具体细节理解不够清晰。基于 pkg/scheduler/webhook.go 的当前实现,本文整理了 Webhook 的准入流程与几个关键变更点,希望帮助大家全面掌握这一逻辑。

1. Webhook 处理范围

HAMi Webhook 并非拦截所有 Pod——它仅关注以下三类 Pod:

  • spec.schedulerName 为空的 Pod
  • 已显式指定 HAMi 调度器的 Pod
  • schedulerNamedefault-scheduler,且开启了 ForceOverwriteDefaultScheduler=true 的 Pod

一旦 Pod 已被指派给其他调度器,Webhook 会直接放行,不再执行任何与 HAMi 相关的变更。这个筛选门槛相当清晰:不属于你的职责范围,就不要干预。

2. Webhook 工作时序图

3. 以 NVIDIA 设备为例的变更点

以 NVIDIA 设备实现为例,MutateAdmission 不仅检查资源是否存在,还会直接修改 Pod 和 Container 的内容。核心逻辑如下:

func (dev *NvidiaGPUDevices) MutateAdmission(ctr *corev1.Container, p *corev1.Pod) (bool, error) {/*gpu related */priority, ok := ctr.Resources.Limits[corev1.ResourceName(dev.config.ResourcePriority)]if ok { ctr.Env = append(ctr.Env, corev1.EnvVar{Name:util.TaskPriority,Value: fmt.Sprint(priority.Value()), })}if dev.config.GPUCorePolicy != "" && dev.config.GPUCorePolicy != DefaultCorePolicy { ctr.Env = append(ctr.Env, corev1.EnvVar{Name:util.CoreLimitSwitch,Value: string(dev.config.GPUCorePolicy), })}hasResource := dev.mutateContainerResource(ctr)if dev.defaultExclusiveCoreIfNeeded(ctr) { hasResource = true}if hasResource { // Set runtime class name if it is not set by user and the runtime class name is configured if p.Spec.RuntimeClassName == nil && dev.config.RuntimeClassName != "" {p.Spec.RuntimeClassName = &dev.config.RuntimeClassName }}if !hasResource && dev.config.OverwriteEnv { ctr.Env = append(ctr.Env, corev1.EnvVar{Name:"NVIDIA_VISIBLE_DEVICES",Value: "none", })}return hasResource, nil}

这段代码主要完成了以下操作:

  • 注入任务优先级相关的环境变量
  • 根据 GPUCorePolicy 的配置,注入核心策略对应的环境变量
  • 若容器仅声明了 core/memory/memoryPercentage 而未指定 GPU 数量,可能会自动补上 ResourceCountName
  • 当容器使用 GPU 资源且用户未设置 RuntimeClassName 时,Webhook 自动补全该字段
  • 反之,如果容器未使用此类设备资源,且 OverwriteEnv 功能开启,则注入 NVIDIA_VISIBLE_DEVICES=none

4. 思考

4.1 特权容器不会直接导致整个 Pod 被拒绝

当前实现中,遇到特权容器时,处理方式是“跳过该容器的设备变更逻辑”,而非“直接拒绝整个 Pod”。更准确的表述是:

  • 特权容器不会执行设备注入及相关修改
  • Pod 不会因为某个容器为特权模式而被整体驳回

4.2 未识别到 HAMi 设备资源的 Pod 通常会放行

如果所有设备实现都判定 Pod 未使用 HAMi 管理的资源,那么 Webhook 既不会将其调度器改为 HAMi,也不会因“未申请 vGPU”而直接拒绝。简言之,不涉及自身资源就不做干预。

4.3 nodeName 拒绝是有前提条件的

Webhook 会在 nodeName 已设置时拒绝 Pod,但这一操作有严格前提:必须同时满足两个条件:

  • hasResource = true(表明 Pod 确实使用了 HAMi 设备)
  • 已配置 HAMi 的 SchedulerName

换句话说,并非所有带 nodeName 的 Pod 都会被拦截。

4.4 配额校验当前主要针对 NVIDIA

查看 fitResourceQuota() 的实现,内部注释写明“Only supports NVIDIA”。因此资源配额检查目前主要面向 NVIDIA 资源,其他设备暂未纳入统一校验范围。

5. Webhook 功能总结

整个 Webhook 在 Pod 创建阶段介入准入流程,首先判断 Pod 是否申请了 HAMi 管理的设备资源,然后按需补充资源字段、注入环境变量、设置 RuntimeClassName,最后将需要 HAMi 接管调度的 Pod 改写为 HAMi 调度器处理。

对于已指定其他调度器的 Pod,Webhook 直接放行,不进行干涉;对于使用了 HAMi 设备资源但显式设置了 nodeName 的 Pod,Webhook 会直接拒绝,以防绕过 HAMi 的调度策略。

资源配额检查通过后,Webhook 生成 Patch 返回给 apiserver,随后 Pod 进入后续调度流程。

来源:https://juejin.cn/post/7629644017265426484
上一篇危险化学品安全技术说明书编写与管理指南 下一篇我用付费模型大版本升级五点反思AI非万能药
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
内网RPA离线部署从依赖打包到7×24无人值守踩坑与避坑方案
AI教程 · 2026-07-02

内网RPA离线部署从依赖打包到7×24无人值守踩坑与避坑方案

这三年,内网RPA项目接了不下二十个。每次开局都像闯关——断网、缺依赖、多机同步、定时执行、批量分发、源码保护、AI离线化,八个坑一个比一个深。今天把这些实战经验整理出来,希望能帮正在内网搞自动化的兄弟们少踩点雷。 一、内网无网络环境怎么部署RPA流程:先搞清楚什么叫“真离线” 很多工具宣传“支持本

水利工程师用WorkBuddy写洪水报告效率提升3倍
AI教程 · 2026-07-02

水利工程师用WorkBuddy写洪水报告效率提升3倍

WorkBuddy开发者分享季 水利工程师AI提效实战:用WorkBuddy撰写洪水影响评价报告,效率提升3倍 WorkBuddy 效率 人工智能 开发工具 一、我是谁,为什么需要AI 先介绍一下自己——我是一名水利工程师,在湖南长沙的一家小型水利设计公司任职。当前行业环境不太

日志服务数据加工规则洞察仪表盘使用指南
AI教程 · 2026-07-02

日志服务数据加工规则洞察仪表盘使用指南

数据加工诊断仪表盘 想实时掌握日志服务加工功能的运行状态?直接从加工列表页点击那个“规则洞察”按钮,仪表盘就会立刻呈现出来。入口就在那儿,不绕弯子。 跳转后,你可以按作业名称、实例ID或源LogStore来筛选任务状态。比如下边这张图,展示的是当前实例ID(90c9d47714dbb807d47c1

基于RFID的固定资产管理系统技术架构与工程实践
AI教程 · 2026-07-02

基于RFID的固定资产管理系统技术架构与工程实践

固定资产管理难题是众多企事业单位的普遍困扰,资产数量动辄数千件,且广泛分布于不同部门、楼层乃至园区。传统人工盘点方式在工程维度上始终面临三大关键瓶颈:采集效率低下、数据闭环中断、状态同步滞后。使用条码枪逐一扫描标签,识别距离通常不超过30厘米,操作人员需逐个寻找并扫描,盘点效率完全受限于人力。面对5

WorkBuddy实战用AI搭建A股智能盯盘助手省心高效
AI教程 · 2026-07-02

WorkBuddy实战用AI搭建A股智能盯盘助手省心高效

炒股的朋友们想必都深有体会——每天重复盯盘、查行情、分析板块轮动,这一整套流程下来耗费大量精力。手动翻查数据不仅身心俱疲,还很容易错过关键买卖节点。今天我们就来聊聊如何打造一款趁手的盯盘工具,借助AI替你分担这些重复性工作。 背景:盯盘的核心痛点 股民都有同感——每天不只要查询单只股票的实时行情,还