用 Kamaji + HAMi 做多租户 GPU Kubernetes:控制面隔离,显卡按 MB 与算力百分比切分

2026年10月23日,CNCF 博客刊发 Anish Bista 的实践文,讨论 GPU 团队常碰到的两难:给每个团队单独拉一套 Kubernetes,控制面成本堆很高;全员挤进一个共享集群,隔离又偏弱。更麻烦的是,Kubernetes 默认按「整张卡」分配 GPU,只要 4 GB 显存的 Pod,也可能占住一张 80 GB 的卡。[1]

文中的解法是把两件开源工具叠在一起,各自管一层:

  • Kamaji:把每个租户的 Kubernetes 控制面跑成管理集群里的 Pod,租户不共享 API Server。

  • HAMi:允许 Pod 按显存(MB)和算力(百分比)申请 GPU 切片,多只 Pod 可挤进同一张卡。

作者在一台没有物理 GPU 的机器上,用 HAMi 的 mock device plugin 模拟显卡,搭出两个完全隔离的租户集群,并让它们通过 HAMi 调度分数 GPU 工作负载;文中称相关 8 项测试全部通过。[1]

架构怎么咬合

管理侧用一个 kind 集群托管 Kamaji 与各租户控制面;每个租户的 worker 是单独容器,经 kind 网络加入。租户之间不共享节点,也不共享 API Server;共享的主要是管理集群和 kamaji-etcd(各租户数据分置)。[1]

关键接合点在于:租户的 API Server 住在管理集群里,而 HAMi 的 webhook 住在租户 worker 上。创建 GPU Pod 时,API Server 要通过 Kamaji 的 Konnectivity 隧道回伸到租户侧。作者写明,证明这条路径可通,是本次实验的核心目标。[1]

没有真卡怎么测共享

HAMi 的真实 device plugin 要跟 NVIDIA 驱动对话;mock 插件跳过硬件发现,靠节点注解登记假卡的 gpumem / gpucores 容量,后续 webhook、调度与配额逻辑与真机一致。文中给了两组对照:tenant-a 模拟 1×A100 80 GB,tenant-b 模拟 2×L4 24 GB。[1]

验证示例里,三只各要 20000 MB 显存、30% 算力的 Pod,可以同时落到同一张 mock 卡上;再要第 4 只同规格 Pod,会因 CardInsufficientCore 挂起;显存要到 90000 MB 则报 CardInsufficientMemory。另有用例确认租户之间互相不可见。[1]

对通信、算力方向的同学,可以把这篇文章当成「控制面多租户 + GPU 切分」的实验说明书:Kamaji 解决「谁的集群」,HAMi 解决「卡怎么切」。真要上生产,还要换成真实 device plugin,并单独评估隔离边界、配额与运维成本;文中版本号与命令以原文仓库步骤为准。

说明:本稿解释架构与实验结论,不替代原文逐步命令;模拟卡与真机驱动行为仍有差距。

来源

[1] Multi-tenant GPU Kubernetes on simulated hardware with Kamaji and HAMi,Anish Bista,CNCF Blog,2026年10月23日。

#Kamaji #HAMi #GPU #Kubernetes #多租户 #科普解读

排序方式 :

成为第一条评论!

Nobody's responded to this post yet. Add your thoughts and get the conversation going.