Skip to main content

HAMi AI Platform Chart 0.21.1

Release date: 2026-10-16 (UTC)

Version status: Known issue

This release changes how gateway hostname configuration is passed, but the default backend image remains v0.15.0 and does not include the corresponding runtime changes. The gateway issue is fixed in Chart 0.21.2. Before choosing an upgrade target, review its status and known issues; the impact is described below.

ComponentComparison baselineThis release
Chart0.21.00.21.1
appVersion0.15.00.15.0
API Serverv0.15.0v0.15.0
Controller Managerv0.15.0v0.15.0
Database migration component (when SQLite auth storage is enabled)v0.15.0v0.15.0
UIv0.12.1v0.12.1

HAMi Enterprise compatibility​

The table lists minimum companion versions for specific interfaces and usage conditions. A monitoring metric requirement for one vendor is not a minimum version for the entire platform.

Feature or scenarioMinimum HAMi Enterprise versionCompanion requirements and conclusions
NVIDIA HAMi-core device allocation, scheduling capacity, allocated resources, and workload usage monitoring for a single regular container (excluding init containers)v2.9.0-rc0Use the companion Enterprise scheduler, NVIDIA device plugin, and vGPU Monitor, and ensure Prometheus scrapes the scheduler and device-plugin monitoring endpoints. This applies to a single regular container; use the separately stated conditions for other container modes.
Historical trend for the NVIDIA GPU memory oversell factorv2.10.0-r0The scheduler must expose hami_gpu_memory_oversell_factor, which the platform rules convert into a trend metric. This is the minimum for displaying the factor, not the first version with GPU memory oversell runtime support.
Container-core percentage for an allocated AMD workloadv2.10.0-r0Applies when the AMD device is registered and allocated by HAMi. The scheduler converts physical CU count to the hami_vgpu_core_allocated_ratio percentage using the device's total core count. Physical-device utilization still comes from the vendor monitoring component.
Resource pools for regular NVIDIA/Ascend workloads: device ownership, namespace binding, CPU/memory and device quotas, explicit or binpack/spread pool selectionv2.9.0-rc0Requires CRD Chart 0.4.2 and Resource Pool Manager application v0.0.1; the default installation uses RPM Chart 0.0.5. RPM Chart 0.0.4 requires an explicit correction to the Manager image. Use extender mode, Kubernetes >=1.30.0-0, and registered devices. This minimum combination is confirmed for amd64 artifacts.
GPU mutex/NUMA or comma-combination strategies within an NVIDIA resource poolv2.10.0-r0Use the CRD and RPM components above. These are GPU-allocation strategies within a pool, distinct from RPM's binpack/spread pool-selection strategies.
HCU resource poolsv2.10.0-r3Requires CRD Chart 0.4.2, RPM application v0.0.2 (default RPM Chart 0.0.6), and HCU device plugin v3.0.0 in hami registration mode; use extender mode and Kubernetes >=1.30.0-0. This minimum combination is confirmed for amd64 artifacts.

The rc suffix in HAMi Enterprise versions does not indicate a test or prerelease build. The old v2.9.0-rc0 image is no longer available. For new deployments, choose an available version that meets the interface requirements above; image availability does not change the confirmed minimum interface version.

Chart changes​

  • gateway.hostnames is now injected as a comma-separated list into the API Server and Controller Manager GATEWAY_HOSTNAMES environment variables. The Controller Manager no longer receives the former GATEWAY_ENDPOINT. The parameter still defaults to []; hostname configuration for UI and API routes is unchanged.
  • The default backend and UI images are unchanged. Therefore, this release does not deliver the hostname propagation and listener-selection fixes for control-plane workload, vLLM Demo, and CloudShell routes.

Known issue​

IssueImpactWorkaroundFixed in
Gateway configuration does not match the default backend imageWhen gateway.hostnames is non-empty and the default v0.15.0 backend is used, the old backend does not read GATEWAY_HOSTNAMES. The control-plane access address falls back to the address in Gateway status and may be empty if no status address exists. Generated workload routes still do not inherit the site domain, so accessing Jupyter and other workload paths through that domain may show the platform page and return 403.Chart 0.21.2 includes the gateway fix and its default backend. Review that release's known issue before adopting it, and check whether custom values still pin an old backend image. Changing only appVersion or upgrading Enterprise does not fix this issue.Chart 0.21.2, default backend v0.15.1

Upgrade guidance​

  • When upgrading from Chart 0.21.0, if gateway.hostnames is non-empty, do not use Chart 0.21.1's default image combination to obtain the domain-routing fix. The fix is in Chart 0.21.2; review its status and known issues before upgrading. An empty hostname list does not trigger the old environment-variable replacement difference, but this release still does not update the backend with the fix.
  • For the fixed release, check apiserver.image.tag, controllerManager.image.tag, and auth.image.tag so existing overrides do not keep them at v0.15.0. The fixed release defaults all three to v0.15.1; the UI remains v0.12.1. For a private image registry, global.imageRegistry overrides each component's image.registry; use the images for the corresponding release.
  • The Chart diff from 0.21.0 to 0.21.1 does not change CRDs, RBAC, auth-storage configuration, or the database migration image. This gateway configuration change does not require switching auth storage or adding a data migration. With SQLite, the existing migration init container continues to run under the same conditions.
  • Resource pools are optional companion components; the version requirements above are not new general upgrade requirements for this gateway change. To enable them for the first time or complete their prerequisites, install the relevant CRDs first, prepare a compatible Enterprise scheduler and device plugin, and then deploy RPM. RPM's hami.existingConfigMap must point to the ConfigMap actually used by the scheduler and containing device-config.yaml; the runtime pool-selection configuration must be readable and writable. Update RPM after device configuration changes so it receives the updated configuration.
  • For the earliest RPM combination, prefer the default RPM Chart listed in the table. If using RPM Chart 0.0.4, set image.repository to ghcr.io/dynamia-ai/resource-pool-manager and image.tag to v0.0.1. Ascend pool selection in RPM Chart 0.0.5 uses hami.ascendEnabled=true; Chart 0.0.6 uses devices.ascend.enabled=true. With RPM Chart 0.0.6, HCU uses devices.hygon.enabled=true, and the HCU plugin uses RESOURCE_REGISTER_STRATEGY=hami. These minimum combinations do not apply to DRA mode.

See the Chart and appVersion mapping or the software center.

Values reference​

The following parameter descriptions are taken from the README bundled with the Chart 0.21.1 release package and are preserved as published. Use this version's values.yaml as the source of default configuration.

Expand values table
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