跳到主要内容
EnterpriseAI Platform

本文说明通过 Helm 在可访问 Chart 和镜像仓库的 Kubernetes 集群中部署 HAMi 商业产品。本文不包含离线安装流程。

💡 安装不等于激活。完成 Helm 安装后,组件可以运行;GPU 虚拟化和调度功能需要完成许可证激活后才能正常使用。

为什么选择在线安装

在线安装适用于具备 Kubernetes、Helm 和镜像仓库运维能力,并需要较高配置自由度的客户。组件版本、部署顺序和 values 配置可由客户按照自身基础设施与变更流程自行管理。

密瓜智能准备的 Zarf 离线包更适用于网络隔离或需要统一交付物的环境;当客户具备自主管理能力,并需要自行维护组件版本、镜像来源及配置时,选择在线 Helm 安装更合适。

部署范围与前置条件

组件选择

组件何时安装说明
HAMi Enterprise所有集群核心调度器与设备插件,必须安装。
NVIDIA GPU Operator使用 NVIDIA GPU,且集群尚未具备驱动与运行时管理能力HAMi 与 GPU Operator 的默认 device-plugin 不能同时启用。
昇腾设备插件使用昇腾节点在 HAMi 安装完成后部署,复用 HAMi 的设备配置 ConfigMap。
Prometheus 监控栈需要采集 HAMi 或 GPU 指标,或部署 HAMi AI Platform集群已有兼容的监控栈时无需重复安装。
HAMi AI Platform需要平台控制台、工作负载管理和监控视图可选;依赖 Gateway API 实现和监控能力。

前置检查

  • Kubernetes 版本不低于 1.24,并且运维终端已配置可用的 kubectl 和 Helm。

  • NVIDIA 节点应已具备 NVIDIA 驱动和 NVIDIA Container Toolkit,或由 NVIDIA GPU Operator 负责安装。

  • 昇腾节点应先完成厂商驱动与运行时配置,并能被 Kubernetes 识别;本文只安装 HAMi 的昇腾设备插件。

  • 安装 NVIDIA GPU Operator 时,必须禁用其默认 device-plugin,避免与 HAMi 冲突。

kubectl cluster-info
kubectl get nodes -o wide
helm version

在线安装

执行以下命令前,先确认当前 kubeconfig context 指向目标集群。建议将每个 Chart 的 values 文件纳入版本管理;中国大陆镜像仓库、商业 Chart 访问方式和生产环境 values 请向密瓜智能技术支持获取。

安装 NVIDIA GPU Operator(仅 NVIDIA 节点)

集群已安装 GPU Operator 时,不要重复安装,并确认 devicePlugin.enabled=false。GPU Operator 25.10 及更高版本默认启用 CDI;下方示例通过 cdi.enabled=false 显式关闭 CDI,以保持非 CDI 部署方式。如需使用 CDI,请移除该参数,并在安装或升级 HAMi 前按照 为 HAMi 启用 NVIDIA CDI 支持 完成 HAMi 侧配置。本手册不重复相关参数和验证步骤。cdi.default 自 GPU Operator 25.10 起已废弃并会被忽略。

helm repo add nvidia https://helm.ngc.nvidia.com/nvidia && helm repo update

helm install --wait --generate-name \
-n gpu-operator --create-namespace \
nvidia/gpu-operator \
--set devicePlugin.enabled=false \
--set dcgmExporter.serviceMonitor.enabled=false \
--set cdi.enabled=false \
--version=v25.10.1

部署 HAMi AI Platform 时,保持 dcgmExporter.serviceMonitor.enabled=false,由平台创建 NVIDIA DCGM Exporter 的 ServiceMonitor。仅部署 HAMi Enterprise、不部署 HAMi AI Platform 时,将该参数设置为 true

示例 values 文件

请自行 mirror NVIDIA GPU Operator 镜像,并替换下方 values 中的镜像信息。

driver:
repository: your-private-registry/nvidia
image: driver
version: "580.105.08"
imagePullSecrets: [ "your-private-registry-secret" ]
manager:
image: k8s-driver-manager
repository: your-private-registry/nvidia/cloud-native
version: v0.9.1

toolkit:
repository: your-private-registry/nvidia/k8s
image: container-toolkit
version: v1.18.1
imagePullSecrets: [ "your-private-registry-secret" ]

devicePlugin:
enabled: false
repository: your-private-registry/nvidia
image: k8s-device-plugin
version: v0.18.1
imagePullSecrets: [ "your-private-registry-secret" ]

dcgmExporter:
repository: your-private-registry/nvidia/k8s
image: dcgm-exporter
version: 4.4.2-4.7.0-distroless
serviceMonitor:
enabled: false

gfd:
repository: your-private-registry/nvidia
image: k8s-device-plugin
version: v0.18.1
imagePullSecrets: [ "your-private-registry-secret" ]

migManager:
repository: your-private-registry/nvidia/cloud-native
image: k8s-mig-manager
version: v0.13.1
imagePullSecrets: [ "your-private-registry-secret" ]

vgpuDeviceManager:
repository: your-private-registry/nvidia/cloud-native
image: vgpu-device-manager
version: v0.4.1
imagePullSecrets: [ "your-private-registry-secret" ]

vfioManager:
repository: your-private-registry/nvidia
image: cuda
version: 13.0.1-base-ubi9
imagePullSecrets: [ "your-private-registry-secret" ]
driverManager:
image: k8s-driver-manager
repository: your-private-registry/nvidia/cloud-native
version: v0.9.1

sandboxDevicePlugin:
repository: your-private-registry/nvidia
image: kubevirt-gpu-device-plugin
version: v1.4.0
imagePullSecrets: [ "your-private-registry-secret" ]

validator:
repository: your-private-registry/nvidia
image: gpu-operator
imagePullSecrets: [ "your-private-registry-secret" ]

node-feature-discovery:
image:
# source: registry.k8s.io/nfd/node-feature-discovery:v0.18.2
repository: your-private-registry/nfd/node-feature-discovery
tag: v0.18.2
pullPolicy: IfNotPresent
imagePullSecrets:
- name: your-private-registry-secret

operator:
repository: your-private-registry/nvidia
image: gpu-operator
imagePullSecrets: [ "your-private-registry-secret" ]
initContainer:
image: cuda
repository: your-private-registry/nvidia
version: 13.0.1-base-ubi9

cdi:
enabled: false

安装监控栈(按需)

集群尚无 Prometheus 或兼容监控系统,且需要指标采集时,可以安装 kube-prometheus-stack

helm install prometheus \
oci://ghcr.io/prometheus-community/charts/kube-prometheus-stack \
--version 72.3.0 \
--namespace monitoring \
--create-namespace \
--set alertmanager.enabled=false \
--set grafana.enabled=false

示例 values 文件

请自行 mirror kube-prometheus-stack 镜像,并替换下方 values 中的镜像信息。

global:
imageRegistry: your-private-registry
imagePullSecrets:
- name: your-private-registry-secret

alertmanager:
enabled: false

grafana:
enabled: false

安装 HAMi Enterprise

helm install hami \
oci://dynamia-ai-registry.cn-hangzhou.cr.aliyuncs.com/public/charts/hami-enterprise \
--version 2.9.0-r3 \
--namespace hami-system \
--create-namespace

示例 values 文件

以下配置通过 global.imageRegistryglobal.imagePullSecrets 统一设置镜像仓库和拉取 Secret。请先将 Chart 所需镜像同步到私有仓库,并保持 Chart 默认的 repository 路径。

nameOverride: "hami"
fullnameOverride: "hami"

global:
imageRegistry: your-private-registry
imagePullSecrets:
- your-private-registry-secret
imageTag: "v2.9.0-r3"

scheduler:
enabled: true
leaderElect: false
service:
type: ClusterIP

devicePlugin:
enabled: true
service:
type: ClusterIP

完整配置项见 HAMi Helm Chart Values Reference

安装昇腾设备插件(仅昇腾节点)

本步骤必须在 HAMi 安装完成后执行。以下配置复用 hami-scheduler-device,避免设备配置由多个 Chart 同时管理。

nameOverride: "ascend-device-plugin"
fullnameOverride: "ascend-device-plugin"

image:
repository: dynamia-ai-registry.cn-hangzhou.cr.aliyuncs.com/public/dynamia-ai/ascend-device-plugin
tag: "v1.3.0"
pullPolicy: IfNotPresent

config:
create: false
existingDeviceConfigMapName: hami-scheduler-device
helm install ascend-device-plugin \
oci://dynamia-ai-registry.cn-hangzhou.cr.aliyuncs.com/public/dynamia-ai/charts/ascend-device-plugin \
--version 0.1.1 \
--namespace hami-system \
-f ascend-device-plugin.yaml

启用 GPU 节点

HAMi device-plugin 仅在带有 gpu=on 标签的节点上启动。对每个需要由 HAMi 管理的 GPU 或昇腾节点执行:

kubectl label nodes <node-name> gpu=on

安装 HAMi AI Platform(可选)

仅在需要平台控制台时执行。本节不适用于只部署 HAMi Enterprise 的集群。

安装 Envoy Gateway

helm install eg \
oci://docker.io/envoyproxy/gateway-helm \
--version v1.6.2 \
--namespace envoy-gateway-system \
--create-namespace \
--set global.images.envoyGateway.image=docker.io/envoyproxy/gateway:v1.6.2 \
--set global.image.ratelimit.image=docker.io/envoyproxy/ratelimit:99d85510 \
--set config.envoyGateway.gateway.controllerName=gateway.envoyproxy.io/gatewayclass-controller \
--set config.envoyGateway.provider.type=Kubernetes

安装 HAMi AI Platform

helm install kantaloupe \
oci://dynamia-ai-registry.cn-hangzhou.cr.aliyuncs.com/public/charts/kantaloupe-chart \
--version 0.20.1 \
--namespace kantaloupe-system \
--create-namespace \
--set fullnameOverride=kantaloupe

示例 values 文件

以下配置通过 global.imageRegistryglobal.imagePullSecrets 统一设置镜像仓库和拉取 Secret。请先将 Chart 所需镜像同步到私有仓库,并保持 Chart 默认的 repository 路径。生产部署前,还必须替换示例域名、证书名称和 JWT 配置。

fullnameOverride: kantaloupe

global:
imageRegistry: your-private-registry
imagePullSecrets:
- your-private-registry-secret

apiserver:
leaderElection:
enabled: false
logLevel: 5

auth:
enabled: true
jwtSecret: dev-secret

cloudtty:
enabled: true

gateway:
enabled: true
hostnames:
- dashboard.hami.run
apiserverHostnames:
- api.hami.run
apiserverCors:
enabled: true
allowCredentials: true
allowOrigins:
- https://dashboard.dynamia.ai
- https://dashboard.hami.run
envoy:
proxy:
image:
repository: envoyproxy/envoy
tag: distroless-v1.36.3
service:
ports:
http:
nodePort: 30080
https:
nodePort: 30443
type: NodePort
listeners:
- name: http
port: 80
protocol: HTTP
- name: https
port: 443
protocol: HTTPS
tls:
certificateRef:
name: dashboard-hami-run-tls
redirectFromHttp: true

mpu:
enabled: false

平台的服务暴露、平台管理员、认证与监控配置见 kantaloupe Helm Chart Values Reference

安装后检查

核心组件

kubectl -n hami-system get pods
kubectl -n gpu-operator get pods
kubectl -n monitoring get pods
kubectl -n kantaloupe-system get pods

未部署的可选组件对应 Namespace 可能不存在,可忽略其查询结果。已部署组件的 Pod 应处于 RunningCompleted 状态。

节点与监控

kubectl describe node <node-name>
kubectl api-resources --api-group=monitoring.coreos.com

如果使用 Prometheus,ServiceMonitor 的标签必须匹配 Prometheus.spec.serviceMonitorSelector;如果使用 VictoriaMetrics,标签必须匹配 VMServiceScrape.spec.serviceScrapeSelector

可以在监控系统中查询以下 NVIDIA 相关指标,确认采集结果非空:

  • DCGM_FI_DEV_GPU_UTIL

  • HostCoreUtilization

  • GPUDeviceCoreAllocated

HAMi AI Platform(可选)

kubectl -n kantaloupe-system get pods
kubectl -n kantaloupe-system get svc

按部署时配置的服务入口访问平台,确认控制台可以正常打开。

许可证申请与激活

获取许可证信息

申请许可证前,任选以下一种方法获取授权申请信息。两种方法作用相同,无需重复执行。

方法一:运行收集脚本

在所有已选组件启动后执行。运行环境需要 kubectljq

curl -fsSLO https://public.hami.run/collect-hami-license-info.sh
bash collect-hami-license-info.sh

将脚本输出的 JSON 发送给密瓜智能售前或技术支持以申请许可证。

方法二:通过 HAMi AI Platform 获取(可选)

仅在已安装 HAMi AI Platform 时使用。

  1. 使用平台管理员账号登录 HAMi AI Platform。

  2. 进入「License 与系统信息」。

  3. 按页面提示获取授权申请信息。

  4. 将授权申请信息发送给密瓜智能销售或技术支持人员。

导入并验证许可证

通过任一方法申请并收到 License 文件后,将其保存到可以访问目标集群的运维机器,并创建 License Secret:

kubectl create secret generic hami-license \
--from-file=license=/path/to/license-file \
-n hami-system

kubectl label secret hami-license \
hami.io/license="true" \
-n hami-system
kubectl get secret hami-license -n hami-system
kubectl get events --field-selector involvedObject.name=hami-license -n hami-system

事件中出现 LicenseValid 表示许可证校验通过。NVIDIA 节点还可以检查许可证注册信息:

kubectl get nodes -o custom-columns='NODE:.metadata.name,LICENSE:.metadata.annotations.hami\.io/nvidia-license'

在线示例工作负载验证

运行以下示例前,确认目标集群能够拉取测试镜像 nvidia/cuda:12.4.0-base-ubuntu22.04。如果集群使用私有镜像仓库,请先将该镜像同步到私有仓库,并修改示例中的镜像地址。

kubectl delete pod hami-smoke --ignore-not-found

kubectl apply -f - <<'EOF'
apiVersion: v1
kind: Pod
metadata:
name: hami-smoke
spec:
restartPolicy: Never
containers:
- name: cuda
image: nvidia/cuda:12.4.0-base-ubuntu22.04
command: ["sh", "-c", "nvidia-smi && sleep 30"]
resources:
limits:
nvidia.com/gpu: 1
nvidia.com/gpumem: 2000
EOF

kubectl wait --for=condition=Ready pod/hami-smoke --timeout=180s
kubectl logs hami-smoke

Pod 进入 Ready 状态且日志正常输出 GPU 信息,表示 HAMi 已完成 GPU 调度,容器内的 NVIDIA 运行时可以正常访问 GPU。验证完成后删除测试 Pod。

kubectl delete pod hami-smoke

常见问题

现象检查与处理
hami-device-plugin 未运行确认节点已添加 gpu=on 标签,并检查 kubectl -n hami-system get pods
hami-device-plugin 反复重启检查 NVIDIA GPU Operator 是否仍启用了默认 device-plugin;应设置 devicePlugin.enabled=false
镜像拉取失败检查目标集群到镜像仓库的网络连通性、镜像地址和标签,以及所需的 imagePullSecrets
查不到 HAMi 指标检查 Prometheus 或 VictoriaMetrics 的监控对象选择器是否匹配 ServiceMonitor 标签。
工作负载持续 Pending检查许可证是否已激活、节点是否已添加 gpu=on 标签、可用加速器资源,以及 kubectl describe pod 输出的事件。

获取支持

  • 邮箱:info@dynamia.ai

  • 售前 / 技术支持:400-026-7800

  • 已签订商业合同的客户可通过专属支持渠道提交问题。