实验 9: 使用 Kueue 管理 HAMi vGPU 队列
本实验把 HAMi GPU 切分与 Kueue 准入控制接到一起。HAMi 为 Pod 分配显存和算力切片,Kueue 在 Job 准入前统计这些切片。你将提交三个相同规格的 Job:前两个正常运行,第三个因为 vGPU、显存和算力配额已经用完而保持挂起。
文中的输出来自一套实际环境:Kubernetes 1.36.1、containerd 2.2.4、Kueue 0.18.1、HAMi 2.9.0,GPU 为一张 15 GiB Tesla T4。
版本相关的 API
本实验使用 Kueue 0.18.1 提供的 v1beta2 API 和 ResourceTransformation 配置。若使用其他 Kueue 版本,请先核对对应版本的发布说明。
你将学到什么
- 以 DRA 兼容模式安装 HAMi 2.9.0;
- 验证
4 GiB / 50%扩展资源请求如何转换为 DRAResourceClaim; - 把 HAMi 按单个 vGPU 表达 的显存和算力请求转换成 Kueue 总量配额;
- 在准入阶段挂起超额 Job,避免 Pod 进入调度阶段后才 Pending。
实验概览
前提条件
- Kubernetes 1.36 集群,已安装 Kueue 0.18.1,并启用
batch/job集成。 - 一个 NVIDIA GPU 节点。本文验证环境使用 15 GiB Tesla T4。
- GPU Operator 或等价组件已提供 NVIDIA 驱动和 GPU Feature Discovery 标签。
- NVIDIA Device Plugin 已关闭。本实验由 HAMi 接管 GPU 设备路径。
- 有权限安装集群级资源、编辑 Kueue manager 配置的
kubectl和 Helm 环境。 - 已安装 cert-manager,HAMi DRA webhook 需要用它签发 TLS 证书。
tutorials/labs/examples/09-kueue-hami-vgpu/中的实验清单。
如果 GPU Operator 管理 GPU 节点,安装或升级时需关闭它的 device plugin:
--set devicePlugin.enabled=false
步骤 1: 以 DRA 兼容模式安装 HAMi
创建实验命名空间。通过 GPU Feature Discovery 标签选择 T4 节点,不要照抄验证环境里的节点名,然后为 HAMi 添加标签:
kubectl create namespace hami-kueue-demo
export GPU_NODE=$(kubectl get nodes -l nvidia.com/gpu.product=Tesla-T4 \
-o jsonpath='{.items[0].metadata.name}')
test -n "${GPU_NODE}" && echo "GPU_NODE=${GPU_NODE}"
kubectl label node "${GPU_NODE}" gpu=on --overwrite
安装 HAMi 2.9.0,开启 DRA,关闭传统 device plugin:
helm repo add hami-charts https://project-hami.github.io/HAMi/
helm repo update
helm install hami hami-charts/hami \
--namespace hami-system \
--create-namespace \
--version 2.9.0 \
--set dra.enabled=true \
--set devicePlugin.enabled=false
important
不要同时开 启 HAMi DRA 和传统 device plugin 模式。如果 NVIDIA 驱动直接安装在主机上,而不是由 GPU Operator 管理,还需设置 hami-dra.drivers.nvidia.containerDriver=false。
等待三个 DRA 组件启动:
kubectl get pods -n hami-system
NAME READY STATUS
hami-dra-driver-kubelet-plugin-fb4zm 1/1 Running
hami-hami-dra-monitor-7b8df84bd-jsjrd 1/1 Running
hami-hami-dra-webhook-7bb65cbcc5-g5742 1/1 Running