HAMi Enterprise 2.9.0-rc2
| Chart 版本 | Chart 声明的 appVersion | 发布日期 |
|---|---|---|
2.9.0-rc2 | 2.9.0-rc2 | 2026 年 6 月 8 日 |
本次为 patch 版本,以下变化以 HAMi Enterprise v2.9.0-rc1 为比较基线。
软件变更
- 调整显存自动扩容的分配粒度。 对已设置
CUDA_MEMORY_AUTO_ADJUST=true的容器,自动调整的显存目标按 1024 MiB(1 GiB)向上取整。例如,1536 MiB 调整为 2048 MiB,已为 2048 MiB 时保持不变。显存自动扩容是已有能力,本次修改其调整粒度,不会为其他容器自动启用该能力。 - Alibaba PPU 纳入授权管理。 新工作负载分配 PPU 时检查设备授权状态;无有效授权的设备不再参与分配。已有 PPU 部署升级前应确认相应授权有效。
Chart 变更
| 配置或标识 | 2.9.0-rc1 | 2.9.0-rc2 |
|---|---|---|
| Chart 名称 | hami | hami-enterprise |
| 安装包 | hami-2.9.0-rc1.tgz | hami-enterprise-2.9.0-rc2.tgz |
schedulerName 默认值 | hami-scheduler | hami-enterprise-scheduler |
| 企业组件默认镜像仓库 | ghcr.io/dynamia-ai/hami | ghcr.io/dynamia-ai/hami-enterprise |
global.imageTag 默认值 | v2.9.0-rc1 | v2.9.0-rc2 |
调度器 app.kubernetes.io/component | hami-scheduler | hami-enterprise-scheduler |
设备插件 app.kubernetes.io/component | hami-device-plugin | hami-enterprise-device-plugin |
app.kubernetes.io/name 默认值 | hami | hami-enterprise |
镜像仓库调整对应 scheduler.extender.image.repository、devicePlugin.image.repository 和 devicePlugin.monitor.image.repository。使用自建镜像仓库时,需要同步目标镜像并调整这些配置,不能只更新标签。
Chart 更名还改变了默认资源名称。例如,Helm release 名为 hami 且未设置名称覆盖时,调度器 Deployment 从 hami-scheduler 变为 hami-hami-enterprise-scheduler,设备插件 DaemonSet 从 hami-device-plugin 变为 hami-hami-enterprise-device-plugin。
升级说明
升级前保存当前 Helm values 和资源清单,用目标 Chart 及实际 release 名称渲染后对比资源名称、选择器和 Service 引用。在维护窗口内完成旧资源与新资源的切换,避免两套调度器或设备插件同时管理同一批工作负载和节点。
- 工作负载若显式填写
spec.schedulerName: hami-scheduler,应与目标部署的schedulerName保持一致:修改工作负载模板使用新默认值,或在 Chart 中显式保留旧名称。Webhook 不会把显式填写的旧 HAMi 调度器名称自动改为新名称。 - 使用
nameOverride或fullnameOverride保留旧资源名,并不会同时保留旧选择器。若渲染结果中同名 Deployment 或 DaemonSet 的.spec.selector有变化,需要安排重建,不能原地修改该字段。 - 按旧组件标签筛选 Pod 的监控、巡检和自动化脚本需要同步更新;自定义 Service 或 Webhook 集成也需要核对目标资源名称。
- 已启用显存自动扩容的工作负载,应按新的 1 GiB 粒度检查可分配显存余量和容量预期。
已知限制
本版新增的 values 校验将以下配置限定为 null,传入有效的非空配置也会导致 Helm 校验失败:
| 配置 | 受影响的自定义值 |
|---|---|
devicePlugin.nvidiaDriverRoot、devicePlugin.nvidiaHookPath | 驱动根目录或 hook 路径字符串 |
devicePlugin.gdrcopyEnabled、devicePlugin.gdsEnabled、devicePlugin.mofedEnabled | 布尔值 |
scheduler.admissionWebhook.whitelistNamespaces | 命名空间列表 |
scheduler.admissionWebhook.namespaceSelector.matchLabels | 标签映射 |
依赖这些配置的部署不能直接沿用自定义 values 安装本版;该校验问题在 2.9.0-r3 中修复。不要为通过校验而删除仍有业务用途的配置。
安装包通过约定的交付渠道获取。查看Chart 与 appVersion 对应关系或软件中心。
Values 说明
以下参数说明取自 Chart 2.9.0-rc2 发布包随附的 README,保留原文。默认配置以该版本的 values.yaml 为准。
展开参数表
| Key | Type | Default | Description |
|---|---|---|---|
| dcuResourceCores | string | "hygon.com/dcucores" | |
| dcuResourceMem | string | "hygon.com/dcumem" | |
| dcuResourceName | string | "hygon.com/dcunum" | |
| devicePlugin.createRuntimeClass | bool | false | |
| devicePlugin.deviceCoreScaling | int | 1 | |
| devicePlugin.deviceListStrategy | string | "envvar" | |
| devicePlugin.deviceMemoryScaling | int | 1 | |
| devicePlugin.deviceSplitCount | int | 10 | |
| devicePlugin.disablecorelimit | string | "false" | |
| devicePlugin.enabled | bool | true | |
| devicePlugin.extraArgs[0] | string | "-v=4" | |
| devicePlugin.extraEnvs | object | {} | |
| devicePlugin.gdrcopyEnabled | string | nil | |
| devicePlugin.gdsEnabled | string | nil | |
| devicePlugin.gpuOperatorToolkitReady.enabled | bool | false | |
| devicePlugin.gpuOperatorToolkitReady.hostPath | string | "/run/nvidia/validations" | |
| devicePlugin.image.pullPolicy | string | "IfNotPresent" | |
| devicePlugin.image.pullSecrets | list | [] | |
| devicePlugin.image.registry | string | "ghcr.io" | |
| devicePlugin.image.repository | string | "dynamia-ai/hami-enterprise" | |
| devicePlugin.image.tag | string | "" | |
| devicePlugin.libPath | string | "/usr/local/vgpu" | |
| devicePlugin.migStrategy | string | "none" | |
| devicePlugin.mofedEnabled | string | nil | |
| devicePlugin.monitor.ctrPath | string | "/usr/local/vgpu/containers" | |
| devicePlugin.monitor.extraArgs[0] | string | "-v=4" | |
| devicePlugin.monitor.extraEnvs | object | {} | |
| devicePlugin.monitor.image.pullPolicy | string | "IfNotPresent" | |
| devicePlugin.monitor.image.pullSecrets | list | [] | |
| devicePlugin.monitor.image.registry | string | "ghcr.io" | |
| devicePlugin.monitor.image.repository | string | "dynamia-ai/hami-enterprise" | |
| devicePlugin.monitor.image.tag | string | "" | |
| devicePlugin.monitor.resources | object | {} | |
| devicePlugin.monitor.resyncInterval | string | "5m" | |
| devicePlugin.nodeConfiguration.config | string | "{\n \"nodeconfig\": [\n {\n \"name\": \"your-node-name\",\n \"operatingmode\": \"hami-core\",\n \"devicememoryscaling\": 1,\n \"devicesplitcount\": 10,\n \"preconfigureddevicememory\": 0,\n \"migstrategy\": \"none\",\n \"filterdevices\": {\n \"uuid\": [],\n \"index\": []\n },\n \"enablegetpreferredallocation\": false\n }\n ]\n}\n" | |
| devicePlugin.nodeConfiguration.externalConfigName | string | "" | |
| devicePlugin.nvidiaDriverRoot | string | nil | |
| devicePlugin.nvidiaHookPath | string | nil | |
| devicePlugin.nvidiaNodeSelector.gpu | string | "on" | |
| devicePlugin.passDeviceSpecsEnabled | bool | false | |
| devicePlugin.pluginPath | string | "/var/lib/kubelet/device-plugins" | |
| devicePlugin.podAnnotations | object | {} | |
| devicePlugin.preConfiguredDeviceMemory | int | 0 | |
| devicePlugin.resources | object | {} | |
| devicePlugin.runtimeClassName | string | "" | |
| devicePlugin.service.annotations | object | {} | |
| devicePlugin.service.httpPort | int | 31992 | |
| devicePlugin.service.labels | object | {} | |
| devicePlugin.service.type | string | "NodePort" | |
| devicePlugin.tolerations | list | [] | |
| devicePlugin.updateStrategy.rollingUpdate.maxUnavailable | int | 1 | |
| devicePlugin.updateStrategy.type | string | "RollingUpdate" | |
| devices.alibaba.customresources[0] | string | "alibaba.com/ppu" | |
| devices.alibaba.customresources[1] | string | "alibaba.com/ppu-memory" | |
| devices.alibaba.customresources[2] | string | "alibaba.com/gpu-core" | |
| devices.alibaba.enabled | bool | true | |
| devices.alibaba.ppuCorePolicy | string | "default" | |
| devices.amd.customresources[0] | string | "amd.com/gpu" | |
| devices.amd.customresources[1] | string | "amd.com/gpumem" | |
| devices.ascend.customresources[0] | string | "huawei.com/Ascend910A" | |
| devices.ascend.customresources[10] | string | "huawei.com/Ascend910B4-memory" | |
| devices.ascend.customresources[11] | string | "huawei.com/Ascend910B4-core" | |
| devices.ascend.customresources[12] | string | "huawei.com/Ascend910B4-1" | |
| devices.ascend.customresources[13] | string | "huawei.com/Ascend910B4-1-memory" | |
| devices.ascend.customresources[14] | string | "huawei.com/Ascend910B4-1-core" | |
| devices.ascend.customresources[15] | string | "huawei.com/Ascend310P" | |
| devices.ascend.customresources[16] | string | "huawei.com/Ascend310P-memory" | |
| devices.ascend.customresources[17] | string | "huawei.com/Ascend310P-core" | |
| devices.ascend.customresources[18] | string | "huawei.com/Ascend910C" | |
| devices.ascend.customresources[19] | string | "huawei.com/Ascend910C-memory" | |
| devices.ascend.customresources[1] | string | "huawei.com/Ascend910A-memory" | |
| devices.ascend.customresources[20] | string | "huawei.com/Ascend910C-core" | |
| devices.ascend.customresources[2] | string | "huawei.com/Ascend910A-core" | |
| devices.ascend.customresources[3] | string | "huawei.com/Ascend910B2" | |
| devices.ascend.customresources[4] | string | "huawei.com/Ascend910B2-memory" | |
| devices.ascend.customresources[5] | string | "huawei.com/Ascend910B2-core" | |
| devices.ascend.customresources[6] | string | "huawei.com/Ascend910B3" | |
| devices.ascend.customresources[7] | string | "huawei.com/Ascend910B3-memory" | |
| devices.ascend.customresources[8] | string | "huawei.com/Ascend910B3-core" | |
| devices.ascend.customresources[9] | string | "huawei.com/Ascend910B4" | |
| devices.ascend.enabled | bool | false | |
| devices.ascend.extraArgs | list | [] | |
| devices.ascend.hamiVnpuCore | bool | false | |
| devices.ascend.image | string | "" | |
| devices.ascend.imagePullPolicy | string | "IfNotPresent" | |
| devices.ascend.nodeSelector.ascend | string | "on" | |
| devices.ascend.runtimeClassName | string | "" | |
| devices.ascend.tolerations | list | [] | |
| devices.awsneuron.customresources[0] | string | "aws.amazon.com/neuron" | |
| devices.awsneuron.customresources[1] | string | "aws.amazon.com/neuroncore" | |
| devices.enflame.customresources[0] | string | "enflame.com/vgcu" | |
| devices.enflame.customresources[1] | string | "enflame.com/vgcu-percentage" | |
| devices.enflame.customresources[2] | string | "enflame.com/gcu" | |
| devices.enflame.enabled | bool | true | |
| devices.iluvatar.customresources[0] | string | "iluvatar.ai/BI-V100-vgpu" | |
| devices.iluvatar.customresources[10] | string | "iluvatar.ai/MR-V50.vCore" | |
| devices.iluvatar.customresources[11] | string | "iluvatar.ai/MR-V50.vMem" | |
| devices.iluvatar.customresources[1] | string | "iluvatar.ai/BI-V100.vCore" | |
| devices.iluvatar.customresources[2] | string | "iluvatar.ai/BI-V100.vMem" | |
| devices.iluvatar.customresources[3] | string | "iluvatar.ai/BI-V150-vgpu" | |
| devices.iluvatar.customresources[4] | string | "iluvatar.ai/BI-V150.vCore" | |
| devices.iluvatar.customresources[5] | string | "iluvatar.ai/BI-V150.vMem" | |
| devices.iluvatar.customresources[6] | string | "iluvatar.ai/MR-V100-vgpu" | |
| devices.iluvatar.customresources[7] | string | "iluvatar.ai/MR-V100.vCore" | |
| devices.iluvatar.customresources[8] | string | "iluvatar.ai/MR-V100.vMem" | |
| devices.iluvatar.customresources[9] | string | "iluvatar.ai/MR-V50-vgpu" | |
| devices.iluvatar.enabled | bool | false | |
| devices.kunlun.customresources[0] | string | "kunlunxin.com/xpu" | |
| devices.kunlun.customresources[1] | string | "kunlunxin.com/vxpu" | |
| devices.kunlun.customresources[2] | string | "kunlunxin.com/vxpu-memory" | |
| devices.kunlun.enabled | bool | true | |
| devices.mthreads.customresources[0] | string | "mthreads.com/vgpu" | |
| devices.mthreads.enabled | bool | true | |
| devices.nvidia.gpuCorePolicy | string | "default" | |
| devices.nvidia.libCudaLogLevel | int | 2 | |
| devices.vastai.customresources[0] | string | "vastaitech.com/va" | |
| devices.vastai.enabled | bool | true | |
| dra.enabled | bool | false | |
| enflameResourceNameVGCU | string | "enflame.com/vgcu" | |
| enflameResourceNameVGCUPercentage | string | "enflame.com/vgcu-percentage" | |
| fullnameOverride | string | "" | |
| global.annotations | object | {} | |
| global.gpuHookPath | string | "/usr/local" | |
| global.imagePullSecrets | list | [] | |
| global.imageRegistry | string | "" | |
| global.imageTag | string | "v2.9.0-rc2" | |
| global.labels | object | {} | |
| global.managedNodeSelector.usage | string | "gpu" | |
| global.managedNodeSelectorEnable | bool | false | |
| hami-dra.drivers.nvidia.containerDriver | bool | true | |
| hami-dra.drivers.nvidia.enabled | bool | true | |
| hami-dra.drivers.nvidia.image.repository | string | "ghcr.io/project-hami/k8s-dra-driver" | |
| hami-dra.drivers.nvidia.image.tag | string | "main" | |
| hami-dra.monitor.enabled | bool | true | |
| kunlunResourceName | string | "kunlunxin.com/xpu" | |
| kunlunResourceVCountName | string | "kunlunxin.com/vxpu" | |
| kunlunResourceVMemoryName | string | "kunlunxin.com/vxpu-memory" | |
| legacyMetrics | bool | false | |
| metaxResourceCore | string | "metax-tech.com/vcore" | |
| metaxResourceMem | string | "metax-tech.com/vmemory" | |
| metaxResourceName | string | "metax-tech.com/sgpu" | |
| metaxsGPUTopologyAware | string | "false" | |
| mluResourceCores | string | "cambricon.com/mlu.smlu.vcore" | |
| mluResourceMem | string | "cambricon.com/mlu.smlu.vmemory" | |
| mluResourceName | string | "cambricon.com/vmlu" | |
| mockDevicePlugin.enabled | bool | false | |
| mockDevicePlugin.image.pullPolicy | string | "IfNotPresent" | |
| mockDevicePlugin.image.pullSecrets | list | [] | |
| mockDevicePlugin.image.registry | string | "docker.io" | |
| mockDevicePlugin.image.repository | string | "projecthami/mock-device-plugin" | |
| mockDevicePlugin.image.tag | string | "1.0.1" | |
| nameOverride | string | "" | |
| namespaceOverride | string | "" | |
| podSecurityPolicy.enabled | bool | false | |
| prometheus.enabled | bool | false | |
| resourceCores | string | "nvidia.com/gpucores" | |
| resourceMem | string | "nvidia.com/gpumem" | |
| resourceMemPercentage | string | "nvidia.com/gpumem-percentage" | |
| resourceName | string | "nvidia.com/gpu" | |
| resourcePriority | string | "nvidia.com/priority" | |
| scheduler.admissionWebhook.customURL.enabled | bool | false | |
| scheduler.admissionWebhook.customURL.host | string | "127.0.0.1" | |
| scheduler.admissionWebhook.customURL.path | string | "/webhook" | |
| scheduler.admissionWebhook.customURL.port | int | 31998 | |
| scheduler.admissionWebhook.enabled | bool | true | |
| scheduler.admissionWebhook.failurePolicy | string | "Ignore" | |
| scheduler.admissionWebhook.namespaceSelector.matchExpressions | list | [] | |
| scheduler.admissionWebhook.namespaceSelector.matchLabels | string | nil | |
| scheduler.admissionWebhook.objectSelector.matchExpressions | list | [] | |
| scheduler.admissionWebhook.reinvocationPolicy | string | "Never" | |
| scheduler.admissionWebhook.whitelistNamespaces | string | nil | |
| scheduler.certManager.enabled | bool | false | |
| scheduler.defaultSchedulerPolicy.gpuSchedulerPolicy | string | "spread" | |
| scheduler.defaultSchedulerPolicy.nodeSchedulerPolicy | string | "binpack" | |
| scheduler.extender.extraArgs[0] | string | "--debug" | |
| scheduler.extender.extraArgs[1] | string | "-v=4" | |
| scheduler.extender.image.pullPolicy | string | "IfNotPresent" | |
| scheduler.extender.image.pullSecrets | list | [] | |
| scheduler.extender.image.registry | string | "ghcr.io" | |
| scheduler.extender.image.repository | string | "dynamia-ai/hami-enterprise" | |
| scheduler.extender.image.tag | string | "" | |
| scheduler.extender.resources | object | {} | |
| scheduler.forceOverwriteDefaultScheduler | bool | true | |
| scheduler.kubeScheduler.enabled | bool | true | |
| scheduler.kubeScheduler.extraArgs[0] | string | "--policy-config-file=/config/config.json" | |
| scheduler.kubeScheduler.extraArgs[1] | string | "-v=4" | |
| scheduler.kubeScheduler.extraNewArgs[0] | string | "--config=/config/config.yaml" | |
| scheduler.kubeScheduler.extraNewArgs[1] | string | "-v=4" | |
| scheduler.kubeScheduler.image.pullPolicy | string | "IfNotPresent" | |
| scheduler.kubeScheduler.image.pullSecrets | list | [] | |
| scheduler.kubeScheduler.image.registry | string | "registry.cn-hangzhou.aliyuncs.com" | |
| scheduler.kubeScheduler.image.repository | string | "google_containers/kube-scheduler" | |
| scheduler.kubeScheduler.image.tag | string | "" | |
| scheduler.kubeScheduler.resources | object | {} | |
| scheduler.leaderElect | bool | true | |
| scheduler.livenessProbe | bool | false | |
| scheduler.metricsBindAddress | string | ":9395" | |
| scheduler.nodeLockExpire | string | "5m" | |
| scheduler.nodeName | string | "" | |
| scheduler.overwriteEnv | string | "false" | |
| scheduler.patch.enabled | bool | true | |
| scheduler.patch.image.pullPolicy | string | "IfNotPresent" | |
| scheduler.patch.image.pullSecrets | list | [] | |
| scheduler.patch.image.registry | string | "docker.io" | |
| scheduler.patch.image.repository | string | "jettech/kube-webhook-certgen" | |
| scheduler.patch.image.tag | string | "v1.5.2" | |
| scheduler.patch.imageNew.pullPolicy | string | "IfNotPresent" | |
| scheduler.patch.imageNew.pullSecrets | list | [] | |
| scheduler.patch.imageNew.registry | string | "docker.io" | |
| scheduler.patch.imageNew.repository | string | "liangjw/kube-webhook-certgen" | |
| scheduler.patch.imageNew.tag | string | "v1.1.1" | |
| scheduler.patch.nodeSelector | object | {} | |
| scheduler.patch.podAnnotations | object | {} | |
| scheduler.patch.priorityClassName | string | "" | |
| scheduler.patch.runAsUser | int | 2000 | |
| scheduler.patch.tolerations | list | [] | |
| scheduler.podAnnotations | object | {} | |
| scheduler.replicas | int | 1 | |
| scheduler.service.annotations | object | {} | |
| scheduler.service.httpPort | int | 443 | |
| scheduler.service.httpTargetPort | int | 443 | |
| scheduler.service.labels | object | {} | |
| scheduler.service.monitorPort | int | 31993 | |
| scheduler.service.monitorTargetPort | int | 9395 | |
| scheduler.service.schedulerPort | int | 31998 | |
| scheduler.service.type | string | "NodePort" | |
| scheduler.tolerations | list | [] | |
| schedulerName | string | "hami-enterprise-scheduler" | |
| vastaiResourceName | string | "vastaitech.com/va" |