版本:下一个
升级 HAMi
概述
将 HAMi 升级到新版本需要谨慎操作,以避免影响 GPU 工作负载。本指南涵盖升级流程、兼容性注意事项以及最佳实践。
升级前准备
1. 检查兼容性
确认目标 HAMi 版本与你当前的 Kubernetes 版本以及 NVIDIA 驱动兼容:
# 当前 HAMi 版本
helm list -n kube-system | grep hami
# Kubernetes 版本
kubectl version --short
# NVIDIA 驱动版本(在 GPU 节点上执行)
nvidia-smi | grep "Driver Version"
2. 备份当前配置
在可能需要回滚时,请保存当前 HAMi 配置:
# 备份当前 values
helm get values hami -n kube-system > hami-backup-values.yaml
# 备份 ConfigMap
kubectl get configmap hami-scheduler-device -n kube-system -o yaml > hami-configmap-backup.yaml
# 备份当前状态
kubectl get all -n kube-system -l app=hami -o yaml > hami-state-backup.yaml
3. 清理运行中的工作负载
关键提醒: 升级前必须停止或重新调度所有 GPU 工作负载。在存在运行任务的情况下升级,可能导致段错误(segmentation fault)或不可预测行为。
优雅清理 GPU 工作负载:
# 查找使用 GPU 的 Pod
kubectl get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.containers[]?.resources.limits | select(. != null) | select(has("nvidia.com/gpu"))) | "\(.metadata.namespace) \(.metadata.name)"'
# 删除或重新调度这些 Pod
kubectl delete pods <pod-name> -n <namespace> --grace-period=30
或在可用情况下调度到非 GPU 节点:
# 添加 nodeSelector 强制调度到非 GPU 节点
kubectl patch deployment <deployment-name> -n <namespace> -p '{"spec":{"template":{"spec":{"nodeSelector":{"gpu":"false"}}}}}'
4. 确认 HAMi 组件运行正常
升级前确认所有 HAMi 组件健康:
# 查看 Pod 状态
kubectl get pods -n kube-system -l app=hami
# 查看错误日志
kubectl logs -n kube-system -l app=hami-scheduler --tail=50
kubectl logs -n kube-system -l app=hami-device-plugin --tail=50
升级流程
标准升级(推荐)
大多数场景建议使用标准升级方式:
# 更新 Helm 仓库
helm repo update hami-charts
# 查看可用版本
helm search repo hami-charts/hami --versions
# 获取当前配置(保留自定义配置)
helm get values hami -n kube-system > current-values.yaml
# 执行升级
helm upgrade hami hami-charts/hami -n kube-system -f current-values.yaml
原地升级(使用现有安装)
如果没有自定义 values 文件,可以直接升级:
helm repo update hami-charts
helm upgrade hami hami-charts/hami -n kube-system
卸载后重装(适用于大版本升级)
对于存在破坏性变更的大版本升级,建议先卸载:
# 卸载当前版本
helm uninstall hami -n kube-system
# 更新仓库
helm repo update
# 安装新版本
helm install hami hami-charts/hami -n kube-system
升级后验证
升级完成后,请验证 HAMi 是否正常运行: