本指南详细说明在 Rocky Linux 上部署 Hami 的步骤,包括 Kubernetes 环境准备、NVIDIA 驱动安装、Hami 部署、Kuboard-Prometheus 配置以及 Hami Web UI 部署和问题排查。
1. 准备 Kubernetes 和 Kuboard
- 安装并配置 Kubernetes 集群。
- 部署 Kuboard 作为集群管理界面。
2. 安装 NVIDIA 驱动(版本 560.35.03)
为所有 GPU 安装 NVIDIA 驱动和 CUDA 工具包,执行以下命令:
sudo dnf update -y && sudo dnf upgrade -y
sudo dnf install epel-release -y
sudo dnf config-manager --add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel8/x86_64/cuda-rhel8.repo
sudo dnf install dkms gcc make kernel-devel-$(uname -r) kernel-headers-$(uname -r) -y
sudo yum install -y nvidia-container-runtime
wget https://cn.download.nvidia.com/XFree86/Linux-x86_64/560.35.03/NVIDIA-Linux-x86_64-560.35.03.run
chmod +x NVIDIA-Linux-x86_64-560.35.03.run
sudo ./NVIDIA-Linux-x86_64-560.35.03.run
sudo dnf install -y cuda-toolkit-12-6
sudo dnf install libnccl-2.24.3-1+cuda12.6 libnccl-devel-2.24.3-1+cuda12.6
3. 部署 Hami
3.1 配置 Containerd 使用 NVIDIA 运行时
为所有 GPU 配置 Containerd 使用 NVIDIA 运行时,编辑 /etc/containerd/config.toml
:
[plugins."io.containerd.grpc.v1.cri".containerd]
default_runtime_name = "nvidia"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia]
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.nvidia.options]
BinaryName = "/usr/bin/nvidia-container-runtime"
禁用 Nouveau 驱动,更新 GRUB 配置:
cat /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet rd.driver.blacklist=nouveau"
GRUB_DISABLE_RECOVERY="true"
GRUB_ENABLE_BLSCFG=true
应用 GRUB 配置并重启服务:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo systemctl daemon-reload && systemctl restart containerd && systemctl enable containerd
systemctl restart kubelet && systemctl enable kubelet
3.2 部署 Hami
为 Kubernetes 节点添加 GPU 标签并通过 Helm 安装 Hami:
kubectl label nodes node1 node2 master gpu=on
helm repo add hami-charts https://project-hami.github.io/HAMi/
helm install hami hami-charts/hami --version 2.4.1 -n kube-system
4. 部署 Kuboard-Prometheus
- 在 Kuboard 界面中操作:
- 安装 NFS 并配置存储挂载(Prometheus 安装需要)。
- 导航至:命名空间 → 集群导入 → 套件 → 套件仓库 → 资源层监控套件 → 安装。
5. 部署 Hami Web UI
方法一:直接 Helm 安装
使用外部 Prometheus 地址直接安装 Hami Web UI:
helm install my-hami-webui hami-webui/hami-webui --set externalPrometheus.enabled=true --set externalPrometheus.address="http://<Prometheus-IP>:9090" -n kube-system
方法二:使用自定义 values.yaml
配置文件
创建 values.yaml
文件,内容如下:
# Hami Web UI 默认配置文件
replicaCount: 1
image:
frontend:
repository: projecthami/hami-webui-fe-oss
pullPolicy: IfNotPresent
tag: "v1.0.3"
backend:
repository: projecthami/hami-webui-be-oss
pullPolicy: IfNotPresent
tag: "v1.0.3"
imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""
namespaceOverride: ""
serviceAccount:
create: true
annotations: {}
name: ""
podAnnotations: {}
podSecurityContext: {}
securityContext: {}
service:
type: ClusterIP
port: 3000
ingress:
enabled: false
className: ""
annotations: {}
hosts:
- host: chart-example.local
paths:
- path: /
pathType: ImplementationSpecific
tls: []
resources:
frontend:
limits:
cpu: 1000m
memory: 2000Mi
requests:
cpu: 200m
memory: 500Mi
backend:
limits:
cpu: 100m
memory: 300Mi
requests:
cpu: 50m
memory: 250Mi
env:
frontend:
- name: TZ
value: "Asia/Shanghai"
backend:
- name: TZ
value: "Asia/Shanghai"
serviceMonitor:
enabled: true
interval: 15s
honorLabels: false
additionalLabels:
jobRelease: hami-webui-prometheus
relabelings: []
hamiServiceMonitor:
enabled: true
interval: 15s
honorLabels: false
additionalLabels:
jobRelease: hami-webui-prometheus
svcNamespace: kube-system
relabelings: []
nodeSelector: {}
tolerations: []
affinity: {}
dcgm-exporter:
enabled: true
extraArgs:
- "--collectors=/etc/dcgm-exporter/default-counters.csv"
- "--collectors=/etc/dcgm-exporter/dcp-metrics-included.csv"
serviceMonitor:
enabled: true
interval: 15s
honorLabels: false
additionalLabels:
jobRelease: hami-webui-prometheus
nodeSelector:
gpu: "on"
customMetricsConfig:
- "DCGM_FI_PROF_GR_ENGINE_ACTIVE"
- "DCGM_FI_PROF_PIPE_TENSOR_ACTIVE"
- "DCGM_FI_PROF_DRAM_ACTIVE"
- "DCGM_FI_PROF_PCIE_TX_BYTES"
- "DCGM_FI_PROF_PCIE_RX_BYTES"
kube-prometheus-stack:
enabled: false
crds:
enabled: false
defaultRules:
create: false
alertmanager:
enabled: false
grafana:
enabled: false
kubernetesServiceMonitors:
enabled: false
nodeExporter:
enabled: false
prometheusOperator:
enabled: false
prometheus:
prometheusSpec:
serviceMonitorSelector:
matchLabels:
jobRelease: hami-webui-prometheus
externalPrometheus:
enabled: true
address: "http://<Prometheus-IP>:9090"
使用配置文件安装:
helm install my-hami-webui hami-webui/hami-webui -f values.yaml -n kube-system
6. Hami Web UI 部署问题排查
6.1 常见问题及解决方案
问题 1:Prometheus 服务不可用
- 现象:使用以下命令安装后,Prometheus 仅收集到节点信息,无法获取完整数据:
helm install my-hami-webui hami-webui/hami-webui --set externalPrometheus.enabled=true --set externalPrometheus.address="http://prometheus-kube-prometheus-prometheus.monitoring.svc.cluster.local:9090" -n kube-system
- 解决方法:检查 Prometheus 地址是否正确,确认命名空间和网络配置无误。
问题 2:Prometheus 采集数据不完整
- 现象:
hami-webui-be-oss
Pod 日志显示服务不可用,指标数据不全。 - 原因:Kubernetes NVIDIA 指标字段格式错误,例如:
GPU-12120c50-7f19-ae45-f201-046654a2c68e,10,24564,100,NVIDIA-NVIDIA GeForce RTX 4090,0,true,0,hami-core
- 解决方法:修改字段,移除第 8 字段(
hami-core
),调整为:GPU-12120c50-7f19-ae45-f201-046654a2c68e,10,24564,100,NVIDIA-NVIDIA GeForce RTX 4090,0,true
确保 Prometheus 能正确解析逗号分隔的字段。
问题 3:DCGM-Exporter Pod 数据采集失败
- 现象:DCGM-Exporter Pod 报错,部分服务状态为 down,未采集到数据。
- 解决方法:
- 暴露监控端口,检查服务状态。
- 查看 Pod 日志,定位具体错误。
- 如问题未解决,卸载并重新安装 Prometheus。
问题 4:使用 Kuboard-Prometheus 成功采集数据
- 解决方法:通过 Kuboard 安装 Prometheus,配置正确 IP 地址,启动服务。
- 验证:检查 Pod 日志,确保数据采集成功。
通用排查建议
- 确认 Prometheus 的存储挂载正确。
- 查看 Pod 日志以获取详细错误信息。
- 确保服务间网络连通性及命名空间配置正确。