从云原生走向 AI 原生:一套面向未来的架构方法论 → 阅读《AI 原生基础设施》

部署配置

已发行

HAMi 通过 Helm Chart 提供一键部署能力,涵盖调度器、设备插件、Webhook 和监控组件,支持灵活的配置管理。

部署概述

HAMi 采用模块化部署架构,核心组件包括:

组件部署方式说明
Scheduler ExtenderDeployment(多副本)GPU 感知调度器扩展
Device PluginDaemonSet每个加速器节点一个实例
Mutating WebhookDeployment准入控制与注入
MonitorDeployment指标采集与暴露

所有组件通过 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 GPUnvidia-container-toolkit
Ascend NPUAscend Docker Runtime
Cambricon MLUCambricon Docker Runtime
Hygon DCUHygon 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: false

Webhook 配置

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=nvidia

Ascend NPU

devicePlugin:
  ascend:
    enabled: true
    vnpu:
      enabled: true
      # VNPU 核心配置
      coreResourceName: "huawei.com/Ascend910B3-core"

# 节点标签要求
# kubectl label nodes <node-name> accelerator=ascend

Cambricon MLU

devicePlugin:
  cambricon:
    enabled: true

# 节点标签要求
# kubectl label nodes <node-name> accelerator=cambricon

Hygon 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 资源请求。

参考资料

创建于 2026/06/04 更新于 2026/06/04 1340 字 阅读约 3 分钟