部署配置
已发行
HAMi 通过 Helm Chart 提供一键部署能力,涵盖调度器、设备插件、Webhook 和监控组件,支持灵活的配置管理。
部署概述
HAMi 采用模块化部署架构,核心组件包括:
| 组件 | 部署方式 | 说明 |
|---|---|---|
| Scheduler Extender | Deployment(多副本) | GPU 感知调度器扩展 |
| Device Plugin | DaemonSet | 每个加速器节点一个实例 |
| Mutating Webhook | Deployment | 准入控制与注入 |
| Monitor | Deployment | 指标采集与暴露 |
所有组件通过 Helm Chart 统一管理,一条命令即可完成部署。
前置条件
Kubernetes 集群
- Kubernetes >= 1.18
- kubectl 命令行工具已配置
- 集群网络正常,DNS 解析可用
Helm
- Helm 3 已安装
helm version
# version.BuildInfo{Version:"v3.14.0", ...}GPU 节点要求
以 NVIDIA GPU 为例:
| 项目 | 要求 |
|---|---|
| GPU 驱动 | >= 510.47 |
| CUDA 版本 | >= 11.6 |
| 容器运行时 | nvidia-container-toolkit 已安装 |
| 操作系统 | Linux(推荐 Ubuntu 20.04+/CentOS 7+) |
# 验证 GPU 驱动
nvidia-smi
# 验证容器运行时
nvidia-ctk --version异构设备要求
| 设备类型 | 驱动/运行时 |
|---|---|
| NVIDIA GPU | nvidia-container-toolkit |
| Ascend NPU | Ascend Docker Runtime |
| Cambricon MLU | Cambricon Docker Runtime |
| Hygon DCU | Hygon Docker Runtime |
Helm Chart 部署
安装
# 添加 HAMi Helm 仓库
helm repo add hami-charts https://project-hami.github.io/hami-charts
helm repo update
# 安装 HAMi(默认配置)
helm install hami hami-charts/hami -n hami-system --create-namespace
# 验证安装
kubectl get pods -n hami-system自定义安装
# 下载默认 values 以便自定义
helm show values hami-charts/hami > values.yaml
# 使用自定义配置安装
helm install hami hami-charts/hami -n hami-system -f values.yaml配置管理
全局配置
# values.yaml - 全局配置
global:
# 镜像仓库
imageRegistry: ""
imagePullSecrets: []
# HAMi 版本
version: "v2.5.0"调度器配置
scheduler:
enabled: true
replicas: 2
image:
repository: projecthami/hami
tag: v2.5.0
# 调度策略
policy:
nodeSchedulerPolicy: binpack # binpack | spread
gpuSchedulerPolicy: binpack # binpack | spread | topology
# 资源超卖配置
overcommit:
enabled: true
deviceMemoryScaling: 1.0 # 显存超卖系数
deviceCoreScaling: 1.0 # 算力超卖系数
# 优先级
priorityClassName: "system-cluster-critical"
# 反亲和性(高可用)
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: hami-scheduler
topologyKey: kubernetes.io/hostname设备插件配置
devicePlugin:
enabled: true
image:
repository: projecthami/hami
tag: v2.5.0
# NVIDIA GPU 配置
nvidia:
enabled: true
# GPU 切分配置
splitCount: 10 # 每张 GPU 最多分配给 10 个 Pod
# 显存配置
memory:
scaling: 1.0 # 显存缩放因子
# MIG 策略
migStrategy: "none" # none | single | mixed
# Ascend NPU 配置
ascend:
enabled: false
# VNPU 配置
vnpu:
enabled: false
# Cambricon MLU 配置
cambricon:
enabled: false
# Hygon DCU 配置
hygon:
enabled: falseWebhook 配置
webhook:
enabled: true
image:
repository: projecthami/hami
tag: v2.5.0
service:
type: ClusterIP
port: 443
# TLS 证书管理
certManager:
enabled: true # 推荐使用 cert-manager监控配置
monitor:
enabled: true
image:
repository: projecthami/hami
tag: v2.5.0
service:
type: ClusterIP
port: 41991
# Prometheus ServiceMonitor
serviceMonitor:
enabled: true
namespace: monitoring
interval: 15s设备特定配置
NVIDIA GPU
devicePlugin:
nvidia:
enabled: true
splitCount: 10
memory:
scaling: 1.0
migStrategy: "none"
# 节点标签要求
# kubectl label nodes <node-name> accelerator=nvidiaAscend NPU
devicePlugin:
ascend:
enabled: true
vnpu:
enabled: true
# VNPU 核心配置
coreResourceName: "huawei.com/Ascend910B3-core"
# 节点标签要求
# kubectl label nodes <node-name> accelerator=ascendCambricon MLU
devicePlugin:
cambricon:
enabled: true
# 节点标签要求
# kubectl label nodes <node-name> accelerator=cambriconHygon DCU
devicePlugin:
hygon:
enabled: true
# 节点标签要求
# kubectl label nodes <node-name> accelerator=hygon手动部署(高级)
如果无法使用 Helm,可以手动部署各组件:
Kubernetes 清单部署
# 下载清单文件
kubectl apply -f https://raw.githubusercontent.com/project-hami/hami/main/charts/hami/templates/scheduler/scheduler.yaml
kubectl apply -f https://raw.githubusercontent.com/project-hami/hami/main/charts/hami/templates/device-plugin/device-plugin.yaml
kubectl apply -f https://raw.githubusercontent.com/project-hami/hami/main/charts/hami/templates/scheduler/webhook.yaml注意事项
- 手动部署需自行管理 TLS 证书
- 需要正确配置 RBAC 权限
- 建议优先使用 Helm 简化运维
部署验证
检查组件状态
# 检查所有 Pod 状态
kubectl get pods -n hami-system
# 预期输出:
# NAME READY STATUS RESTARTS AGE
# hami-scheduler-xxxxxx-xxxxx 1/1 Running 0 2m
# hami-device-plugin-xxxxx 1/1 Running 0 2m
# hami-webhook-xxxxxx-xxxxx 1/1 Running 0 2m
# hami-monitor-xxxxxx-xxxxx 1/1 Running 0 2m检查节点设备注册
# 查看节点设备注解
kubectl get node <gpu-node-name> -o jsonpath='{.metadata.annotations}' | jq .
# 检查 GPU 资源
kubectl get nodes -o wide
kubectl describe node <gpu-node-name> | grep -A 10 "Allocatable"运行测试工作负载
# 创建测试 Pod
cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
name: gpu-test
spec:
containers:
- name: cuda
image: nvidia/cuda:12.0.0-base-ubuntu22.04
command: ["nvidia-smi"]
resources:
limits:
nvidia.com/gpu: 1
nvidia.com/gpumem: 2000
restartPolicy: Never
EOF
# 检查结果
kubectl logs gpu-test升级策略
# 查看当前版本
helm list -n hami-system
# 升级到新版本
helm repo update
helm upgrade hami hami-charts/hami -n hami-system -f values.yaml
# 查看升级历史
helm history hami -n hami-system
# 回滚
helm rollback hami <revision> -n hami-system升级注意事项
- 调度器升级期间,正在运行的 Pod 不受影响
- 设备插件升级会导致该节点上的 GPU 资源短暂不可用
- 建议在维护窗口期进行升级
- 升级前备份
values.yaml
卸载
# 卸载 HAMi
helm uninstall hami -n hami-system
# 清理命名空间
kubectl delete namespace hami-system小结
本章介绍了 HAMi 的部署与配置:
- Helm Chart:一键部署 调度器、设备插件、Webhook、监控统一管理
- 灵活配置:全局、调度器、设备插件、监控、Webhook 各层级独立配置
- 多厂商支持:通过配置开关启用不同设备后端
- 部署验证:检查组件状态、设备注册和测试工作负载
- 升级与回滚:Helm 原生支持滚动升级
下一章将介绍如何在 Pod 中声明 GPU 资源请求。