Hami 部署指南(基于 Rocky Linux)

本指南详细说明在 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 界面中操作:
    1. 安装 NFS 并配置存储挂载(Prometheus 安装需要)。
    2. 导航至:命名空间 → 集群导入 → 套件 → 套件仓库 → 资源层监控套件 → 安装。

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,未采集到数据。
  • 解决方法
    1. 暴露监控端口,检查服务状态。
    2. 查看 Pod 日志,定位具体错误。
    3. 如问题未解决,卸载并重新安装 Prometheus。

问题 4:使用 Kuboard-Prometheus 成功采集数据

  • 解决方法:通过 Kuboard 安装 Prometheus,配置正确 IP 地址,启动服务。
  • 验证:检查 Pod 日志,确保数据采集成功。

通用排查建议

  • 确认 Prometheus 的存储挂载正确。
  • 查看 Pod 日志以获取详细错误信息。
  • 确保服务间网络连通性及命名空间配置正确。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇