跳到主要内容

HAMi AI Platform Chart 0.21.1

发布时间:2026-10-16(UTC)

版本状态:有已知问题

本版调整了网关主机名配置的传递方式,但默认后端镜像仍为 v0.15.0,未包含对应的运行时修改。该网关问题的修复已随 Chart 0.21.2 交付。选择升级目标前,应同时查阅目标版本的版本状态与已知问题;具体影响见下文。

版本比较基线本版
Chart0.21.00.21.1
appVersion0.15.00.15.0
API Serverv0.15.0v0.15.0
Controller Managerv0.15.0v0.15.0
数据库迁移组件(启用 SQLite 认证存储时)v0.15.0v0.15.0
UIv0.12.1v0.12.1

HAMi Enterprise 兼容性​

下表按具体接口与使用条件列出配套门槛,不将某一厂商的监控指标门槛作为整个平台的统一最低版本。

功能或使用场景最低可用 HAMi Enterprise 版本本版配套要求与升级结论
NVIDIA HAMi-core 单个常规容器的设备分配、调度容量、已分配资源与工作负载运行使用量监控(不含 init container)v2.9.0-rc0使用配套的 Enterprise 调度器、NVIDIA 设备插件和 vGPU Monitor,并保持 Prometheus 对调度器与设备插件监控端点的采集。此处范围为单个常规容器;其他容器模式按其单独条件选择配套版本。
NVIDIA 显存超卖倍数历史趋势v2.10.0-r0调度器需提供 hami_gpu_memory_oversell_factor,平台规则将其转换为趋势指标。此门槛只约束倍数指标的展示,不是显存超卖运行能力的首次版本。
AMD 已分配工作负载的容器核心百分比v2.10.0-r0适用于 AMD 设备已注册并由 HAMi 分配的场景;调度器将物理 CU 数按设备总核心数转换成 hami_vgpu_core_allocated_ratio 百分比。AMD 物理设备使用量仍由相应厂商监控组件提供。
NVIDIA/Ascend 常规业务容器资源池:设备归属、命名空间绑定、CPU/内存与设备配额、显式或 binpack/spread 选池v2.9.0-rc0需要 CRD Chart 0.4.2、Resource Pool Manager 应用 v0.0.1;默认安装使用 RPM Chart 0.0.5。RPM Chart 0.0.4 须显式纠正 Manager 镜像。使用 extender 模式、Kubernetes >=1.30.0-0 及已注册的相应设备;此最低组合对应 amd64 制品。
NVIDIA 资源池内 GPU mutex/numa 或逗号组合策略v2.10.0-r0使用上述 CRD 与 RPM 配套。这里是池内 GPU 分配策略,区别于 RPM 的 binpack/spread 选池策略。
HCU 资源池v2.10.0-r3需要 CRD Chart 0.4.2、RPM 应用 v0.0.2(默认 RPM Chart 0.0.6),以及 HCU 设备插件 v3.0.0 的 hami 注册模式;使用 extender 模式和 Kubernetes >=1.30.0-0。此最低组合对应 amd64 制品。

HAMi Enterprise 的 rc 后缀不代表测试版或预发布版。v2.9.0-rc0 的旧镜像当前不可取得,新部署需选择满足上述接口条件且制品可取得的版本;镜像可获取性不改变已确认的最低接口版本。

Chart 变更​

  • gateway.hostnames 现在以逗号分隔的完整列表注入 API Server 和 Controller Manager 的 GATEWAY_HOSTNAMES 环境变量;Controller Manager 不再接收原来的 GATEWAY_ENDPOINT。该参数默认仍为 [],UI 与 API 路由的主机名设置方式未变。
  • 默认后端与 UI 镜像均未更新。因此,本版尚未交付控制面工作负载、vLLM 演示及 CloudShell 路由的主机名传播和监听器选择修复。

已知问题​

问题影响范围规避方法修复版本
网关配置与默认后端镜像不匹配gateway.hostnames 非空且使用默认 v0.15.0 后端时,旧后端不读取 GATEWAY_HOSTNAMES。控制面集群访问地址会回退到 Gateway 状态中的地址;状态地址不存在时可能为空。生成的工作负载路由仍未继承站点域名,按站点域名访问 Jupyter 等工作负载路径时仍可能进入平台页面并显示 403。Chart 0.21.2 及其默认后端包含该网关问题的修复,采用前应查阅该版已知问题,并检查自定义 values 是否仍固定旧后端镜像。仅修改 appVersion 或升级 Enterprise 无法解决。Chart 0.21.2,默认后端 v0.15.1

升级说明​

  • 从 Chart 0.21.0 升级时,若配置了非空 gateway.hostnames,不要使用 Chart 0.21.1 的默认镜像组合承接域名路由修复,该网关问题的修复版本为 Chart 0.21.2,升级前应查阅其版本状态与已知问题。域名为空的部署不会触发上述旧环境变量被替换的配置差异,但本版也未更新后端修复。
  • 采用修复版时,检查 apiserver.image.tag、controllerManager.image.tag 和 auth.image.tag,避免既有覆盖值继续固定在 v0.15.0。修复版默认值均为 v0.15.1;UI 仍为 v0.12.1。使用私有镜像仓库时,global.imageRegistry 会覆盖组件的 image.registry,需要同步对应版本的镜像。
  • 本次 0.21.0 → 0.21.1 的 Chart 差异未改变 CRD、RBAC、认证存储配置或数据库迁移镜像。无需因这次网关配置调整切换认证存储或新增数据迁移;使用 SQLite 时,既有迁移 init container 仍按原条件执行。
  • 资源池为可选配套;上述版本门槛不是本次网关调整新增的统一升级要求。首次启用或需要补齐配套时,先安装对应 CRD,再准备满足该用法的 Enterprise 调度器和设备插件,最后部署 RPM;RPM 的 hami.existingConfigMap 必须指向调度器实际使用且包含 device-config.yaml 的 ConfigMap,运行时选池配置须可读写。设备配置改变后更新 RPM,使其同步配置。
  • 使用最早 RPM 配套时,优先按表中默认 RPM Chart 组合部署;若使用 RPM Chart 0.0.4,需将 image.repository 设为 ghcr.io/dynamia-ai/resource-pool-manager、image.tag 设为 v0.0.1。RPM Chart 0.0.5 的 Ascend 选池需设置 hami.ascendEnabled=true;RPM Chart 0.0.6 改用 devices.ascend.enabled=true。HCU 使用 RPM Chart 0.0.6 时需设置 devices.hygon.enabled=true,HCU 插件设置 RESOURCE_REGISTER_STRATEGY=hami。上述最低组合不适用于 DRA 模式。

查看Chart 与 appVersion 对应关系或软件中心。

Values 说明​

以下参数说明取自 Chart 0.21.1 发布包随附的 README,保留原文。默认配置以该版本的 values.yaml 为准。

展开参数表
KeyTypeDefaultDescription
apiserver.affinityobject{}apiserver affinity settings
apiserver.clusterAPIBurstint100Burst to use while talking with cluster kube-apiserver
apiserver.clusterAPIQPSint50QPS to use while talking with cluster kube-apiserver
apiserver.image.pullPolicystring"IfNotPresent"kantaloupe image pull policy
apiserver.image.pullSecretslist[]Specify docker-registry secret names as an array
apiserver.image.registrystring"ghcr.io"kantaloupe image registry
apiserver.image.repositorystring"dynamia-ai/kantaloupe-apiserver"kantaloupe image repository
apiserver.image.tagstring"v0.15.0"kantaloupe image tag (immutable tags are recommended)
apiserver.labelsobject{}apiserver labels
apiserver.leaderElection.enabledbooltrueEnable apiserver leader election for auth singleton bootstrap when auth.storeBackend=crd
apiserver.leaderElection.leaseDurationstring"15s"Lease duration for apiserver leader election
apiserver.leaderElection.renewDeadlinestring"10s"Renew deadline for apiserver leader election
apiserver.leaderElection.resourceNamespacestring""Namespace of the Lease object; empty means use the release namespace
apiserver.leaderElection.retryPeriodstring"2s"Retry period for apiserver leader election
apiserver.livenessProbe.enabledboolfalseEnable livenessProbe on apiserver containers
apiserver.logLevelint4apiserver glog verbosity level (0=minimal, 4=info, 5=debug)
apiserver.meteringGRPCAddressstring""Optional upstream metering gRPC service address. Leave empty to disable metering APIs
apiserver.nodeSelectorobject{}apiserver node labels for pod assignment
apiserver.podAnnotationsobject{}apiserver pod annotations
apiserver.podLabelsobject{}apiserver pod labels
apiserver.prometheusAddrstring""Prometheus server address for apiserver metrics querying
apiserver.readinessProbe.enabledboolfalseEnable readinessProbe on ui containers
apiserver.replicaCountint1apiserver target replica count
apiserver.resourcesobject{}apiserver resource requests and limits
apiserver.service.nodePortint31800
apiserver.service.portint8000
apiserver.service.typestring"ClusterIP"
apiserver.tolerationsobject{}apiserver tolerations for pod assignment
auth.apiserverServiceAccountNamestring""ServiceAccount name of the kantaloupe-apiserver, used by the auth assignment admission webhook to validate the requester identity. Defaults to the release fullname.
auth.bootstrapAdminEmailstring"[email protected]"Bootstrap PlatformAdmin email address
auth.bootstrapAdminFullNamestring"Platform Administrator"Bootstrap PlatformAdmin full name (display name)
auth.bootstrapAdminPasswordstring"admin12345"Bootstrap admin password (plain text, dev only)
auth.bootstrapAdminUsernamestring"bootstrap-platform-admin"Bootstrap PlatformAdmin username
auth.crdAuditWindowSizeint1000Max number of audit CRDs retained by the apiserver write path
auth.dbPathstring"/data/kantaloupe/auth.db"SQLite database path for auth data when auth.storeBackend=sqlite
auth.dryRunboolfalseAllow requests without enforcing auth; inject bootstrap admin when no valid token is provided
auth.enabledbooltrueEnable kantaloupe auth (JWT login, RBAC, audit)
auth.existingAuthSecretstring""Name of an existing K8s Secret with keys "jwt-secret" and "bootstrap-admin-password" (use instead of plain-text values for production)
auth.image.pullPolicystring"IfNotPresent"db-migrate image pull policy for sqlite backend
auth.image.registrystring"ghcr.io"db-migrate image registry for sqlite backend
auth.image.repositorystring"dynamia-ai/kantaloupe-db-migrate"db-migrate image repository for sqlite backend
auth.image.tagstring"v0.15.0"db-migrate image tag for sqlite backend
auth.jwtSecretstring"your-own-jwt-secret"JWT signing secret (plain text, dev only)
auth.persistence.enabledboolfalseEnable persistence using PVC for sqlite backend (PV is dynamically provisioned via cluster default StorageClass)
auth.persistence.existingClaimstring""Name of an existing PVC to use for sqlite backend (if set, a new PVC will not be created)
auth.persistence.sizestring"1Gi"PVC storage size for sqlite backend
auth.persistence.storageClassstring""PVC storage class for sqlite backend (empty = use cluster default StorageClass for dynamic PV provisioning)
auth.storeBackendstring"crd"Auth store backend. Supported values: crd, sqlite
cloudtty.enabledbooltrue
controlPlaneNamestring"control-plane"
controllerManager.affinityobject{}controllerManager affinity settings
controllerManager.enablePromoteKantaloupeflowControllerboolfalseAutomatically create KantaloupeFlow CRs for existing GPU deployments in member clusters.
controllerManager.image.pullPolicystring"IfNotPresent"kantaloupe image pull policy
controllerManager.image.pullSecretslist[]Specify docker-registry secret names as an array
controllerManager.image.registrystring"ghcr.io"kantaloupe image registry
controllerManager.image.repositorystring"dynamia-ai/kantaloupe-controller-manager"kantaloupe image repository
controllerManager.image.tagstring"v0.15.0"kantaloupe image tag (immutable tags are recommended)
controllerManager.labelsobject{}controllerManager labels
controllerManager.livenessProbe.enabledboolfalseEnable livenessProbe on controllerManager containers
controllerManager.metricsPortint31001
controllerManager.nodeSelectorobject{}controllerManager node labels for pod assignment
controllerManager.podAnnotationsobject{}controllerManager pod annotations
controllerManager.podLabelsobject{}controllerManager pod labels
controllerManager.prometheusAddrstring""The Prometheus-compatible query endpoint for controller-manager. If empty, uses the default value from Go code.
controllerManager.readinessProbe.enabledboolfalseEnable readinessProbe on controllerManager containers
controllerManager.replicaCountint1controllerManager target replica count
controllerManager.resourcesobject{}controllerManager resource requests and limits
controllerManager.tolerationsobject{}controllerManager tolerations for pod assignment
controllerManager.webhook.certDirstring"/var/run/kantaloupe/webhook-certs"
controllerManager.webhook.certNamestring"tls.crt"
controllerManager.webhook.enabledbooltrue
controllerManager.webhook.keyNamestring"tls.key"
controllerManager.webhook.portint9443
controllerManager.webhook.servicePortint443
fullnameOverridestring"kantaloupe"String to fully override the fullname template
gateway.apiserverCorsobject{"allowCredentials":false,"allowHeaders":["authorization","content-type","accept","origin"],"allowMethods":["GET","POST","PUT","PATCH","DELETE","OPTIONS"],"allowOrigins":[],"enabled":false,"exposeHeaders":[],"maxAge":null}Optional CORS policy attached only to the apiserver HTTPRoute (/apis)
gateway.apiserverCors.allowCredentialsboolfalseWhether credentialed cross-origin requests are allowed
gateway.apiserverCors.allowHeaderslist["authorization","content-type","accept","origin"]Allowed request headers returned on CORS preflight responses
gateway.apiserverCors.allowMethodslist["GET","POST","PUT","PATCH","DELETE","OPTIONS"]Allowed methods returned on CORS preflight responses
gateway.apiserverCors.allowOriginslist[]Allowed browser origins for apiserver CORS; required when enabled
gateway.apiserverCors.enabledboolfalseEnable Envoy Gateway SecurityPolicy-based CORS on the apiserver route
gateway.apiserverCors.exposeHeaderslist[]Response headers exposed to browser JavaScript
gateway.apiserverCors.maxAgestringnilOptional browser preflight cache max age in seconds
gateway.apiserverHostnameslist[]Dedicated external hostnames for direct apiserver access, separate from gateway.hostnames (the UI/site domain). When non-empty, a dedicated HTTPRoute routes these hosts to the apiserver; they must be covered by the HTTPS listener's TLS certificate.
gateway.classNamestring"kantaloupe"GatewayClass name
gateway.enabledbooltrueEnable Gateway API resources
gateway.envoyobject{"proxy":{"image":{"pullSecrets":[],"registry":"","repository":"","tag":""}},"service":{"ports":{"http":{"nodePort":30080},"https":{"nodePort":30443}},"type":"NodePort"}}Envoy Gateway implementation details
gateway.envoy.proxy.image.pullSecretslist[]Image pull secrets for Envoy proxy pods
gateway.envoy.proxy.image.registrystring""Envoy proxy image registry
gateway.envoy.proxy.image.repositorystring""Envoy proxy image repository. When set without a tag, renders the EnvoyProxy imageRepository field.
gateway.envoy.proxy.image.tagstring""Envoy proxy image tag. When set, renders a complete EnvoyProxy image reference.
gateway.envoy.serviceobject{"ports":{"http":{"nodePort":30080},"https":{"nodePort":30443}},"type":"NodePort"}Envoy service configuration
gateway.envoy.service.ports.httpobject{"nodePort":30080}HTTP port configuration
gateway.envoy.service.ports.http.nodePortint30080HTTP NodePort
gateway.envoy.service.ports.httpsobject{"nodePort":30443}HTTPS port configuration
gateway.envoy.service.ports.https.nodePortint30443HTTPS NodePort
gateway.envoy.service.typestring"NodePort"Envoy service type (LoadBalancer or NodePort)
gateway.hostnameslist[]List of site hostnames (DNS names or wildcard names such as *.example.com, without scheme, port, or path). Applied to UI/API routes and passed to controller-manager and apiserver as GATEWAY_HOSTNAMES for control-plane workload, vLLM demo, and CloudShell HTTPRoutes. Member-cluster workload routes do not inherit the control-plane site hostnames. An empty list leaves site routes unrestricted by hostname. The first entry also supplies the control-plane cluster gateway address for generated access URLs; use a concrete hostname first. HTTPS certificates must cover these names.
gateway.ipAddressstring""Gateway IP address
gateway.listenerslist[{"name":"http","port":80,"protocol":"HTTP"}]Gateway listeners configuration
global.imagePullSecretslist[]Global Docker image pull secrets
global.imageRegistrystring""Global Docker image registry
hamiNamespacestring"hami-system"
hook.image.pullPolicystring"IfNotPresent"CRD hook image pull policy
hook.image.pullSecretslist[]Specify docker-registry secret names as an array
hook.image.registrystring"ghcr.io"CRD hook image registry
hook.image.repositorystring"cloudtty/cloudshell"CRD hook image repository
hook.image.tagstring"v0.8.9"CRD hook image tag (immutable tags are recommended)
installCRDsbooltruedefine flag whether to install CRD resources
monitoring.enabledbooltrue
monitoring.hamiServiceMonitor.enabledbooltrue
monitoring.serviceMonitorLabelsobject{}Labels added to ServiceMonitor and PrometheusRule resources for discovery by Prometheus-compatible operators. When empty, defaults to release: prometheus; providing any labels replaces that fallback. The built-in app, role, and control-plane labels cannot be overridden.
monitoring.vendorServiceMonitor.enableAMDServiceMonitorboolfalseEnable AMD GPU Operator exporter discovery and AMD recording rules in the control plane. Required for monitoring AMD devices in local or member clusters.
monitoring.vendorServiceMonitor.enableAlibabaPPUServicemonitorboolfalseEnable Alibaba PPU exporter discovery and Alibaba PPU recording rules in the control plane. Required for monitoring Alibaba PPU devices in local or member clusters.
monitoring.vendorServiceMonitor.enableAscendServicemonitorboolfalseEnable Ascend exporter discovery and Ascend recording rules in the control plane. Required for monitoring Ascend devices in local or member clusters.
monitoring.vendorServiceMonitor.enableEnflameServicemonitorboolfalseEnable Enflame GCU exporter discovery and Enflame recording rules in the control plane. Required for monitoring Enflame devices in local or member clusters.
monitoring.vendorServiceMonitor.enableHygonServicemonitorboolfalseEnable HCU exporter discovery and Hygon device recording rules in the control plane. Required for monitoring Hygon devices in local or member clusters. Discovers hcu-exporter in the monitoring namespace.
monitoring.vendorServiceMonitor.enableIluvatarServicemonitorboolfalseEnable Iluvatar ix-exporter and vgpu-manager discovery and Iluvatar recording rules in the control plane. Required for monitoring Iluvatar devices in local or member clusters.
monitoring.vendorServiceMonitor.enableMetaxServicemonitorboolfalseEnable MetaX exporter discovery and MetaX recording rules in the control plane. Required for monitoring MetaX devices in local or member clusters.
monitoring.vendorServiceMonitor.enableNvidiaServicemonitorbooltrueEnable NVIDIA exporter discovery and NVIDIA recording rules in the control plane. Required for monitoring NVIDIA devices in local or member clusters.
monitoring.vendorServiceMonitor.enabledbooltrueCreate vendor ServiceMonitor templates and recording rules for enabled vendors.
mpu.enabledboolfalse
mpu.image.pullPolicystring"IfNotPresent"MPU image pull policy
mpu.image.pullSecretslist[]
mpu.image.registrystring"ghcr.io"
mpu.image.repositorystring"dynamia-ai/mpu"
mpu.image.tagstring"dev-ubuntu24.04"
nameOverridestring""String to partially override the fullname template (will maintain the release name)
ui.affinityobject{}ui affinity settings
ui.apiBackendURLstring""Optional backend address for UI API requests. Leave empty to use same-origin requests
ui.forceChineseboolfalseForce UI to display Chinese language
ui.image.pullPolicystring"IfNotPresent"kantaloupe image pull policy
ui.image.pullSecretslist[]Specify docker-registry secret names as an array
ui.image.registrystring"ghcr.io"kantaloupe image registry
ui.image.repositorystring"dynamia-ai/kantaloupe-ui"kantaloupe image repository
ui.image.tagstring"v0.12.1"kantaloupe image tag (immutable tags are recommended)
ui.labelsobject{}ui labels
ui.livenessProbe.enabledboolfalseEnable livenessProbe on ui containers
ui.nodeSelectorobject{}ui node labels for pod assignment
ui.podAnnotationsobject{}ui pod annotations
ui.podLabelsobject{}ui pod labels
ui.readinessProbe.enabledboolfalseEnable readinessProbe on ui containers
ui.replicaCountint1ui target replica count
ui.resourcesobject{}ui resource requests and limits
ui.service.nodePortint31300
ui.service.portint80
ui.service.typestring"ClusterIP"
ui.tolerationsobject{}ui tolerations for pod assignment