Skip to main content

HAMi AI Platform Chart 0.21.3

Release date: 2026-10-26 (UTC)

Version status: Generally available

This release upgrades the default UI to v0.13.0. It is confirmed to fix the GPU workload form/backend resource-format mismatch in Chart 0.21.2. Actual UI conversion results for create, copy, edit, and CPU-only cases passed validation against backend template parsing boundaries; the old nested format is rejected as a negative case. The default component combination has been validated and marked generally available by maintainers.

ComponentComparison baselineThis release
Chart0.21.20.21.3
appVersion0.15.10.15.1
API Serverv0.15.1v0.15.1
Controller Managerv0.15.1v0.15.1
Database migration imagev0.15.1v0.15.1
UIv0.12.1v0.13.0

The database migration container runs only when authentication is enabled and auth.storeBackend=sqlite.

HAMi Enterprise compatibility​

The backend, scheduling interfaces, and resource-pool components in this release retain the requirements of Chart 0.21.2. The table lists the minimum companion versions for relevant interfaces and protocols. This UI fix adds no uniform Enterprise upgrade requirement. Resource pools are optional; their prerequisites do not automatically apply to basic platform operation. These findings do not replace validation in the target hardware environment.

Feature or scenarioMinimum HAMi Enterprise versionCompanion requirements and upgrade notes
Read four-field annotations for allocated devices, including empty slots across multiple containers; NVIDIA, AMD, Ascend, Iluvatar, AWS Neuron, Enflame vGPU, and Alibaba PPUv2.9.0-rc0Applies only to reading allocation records. The platform backend remains v0.15.1, so this UI update does not require an Enterprise upgrade if the existing version supports the matching protocol. This does not mean this version covers all scheduling, isolation, or monitoring capabilities for these vendors.
Percentage-based GPU memory requests for regular NVIDIA HAMi-core workloadsv2.9.0-rc0The UI writes the percentage to nvidia.com/gpumem-percentage. The scheduler and NVIDIA device plugin must use the same resource name and compatible HAMi-core. This adds a form entry point for existing scheduling capability; a custom resource-name prefix must match the platform device configuration.
Resource-pool management, namespace authorization, quotas, explicit pool selection, and automatic binpack/spread selection for regular NVIDIA/Ascend workloadsv2.9.0-rc0Minimum standalone CRD Chart: 0.4.2; minimum RPM application: v0.0.1; minimum RPM Chart with the correct default component: 0.0.5. RPM Chart 0.0.4 meets the requirement only when explicitly configured with the correct RPM image. These RPM artifact combinations are confirmed for amd64.
An initialization container that does not request a GPU before an NVIDIA workload containerv2.9.0-rc1Set scheduler.useDownward=true. Earlier versions do not handle container indexes for this template. When resource pools are enabled, also meet the standalone component requirements in the previous row.
An NVIDIA initialization container that requests a GPU, including workloads where only the initialization container requests onev2.10.0-r0Set scheduler.useDownward=true; the complete initialization-container annotations and plugin must be compatible. When resource pools are enabled, also meet the RPM/CRD requirements above.
GPU mutex, NUMA, or combined strategies within an NVIDIA resource poolv2.10.0-r0Use the RPM/CRD components above. These are GPU strategies within a pool, distinct from RPM's binpack/spread selection between pools.
HCU resource-pool management and scheduling interfacesv2.10.0-r3Minimum CRD Chart: 0.4.2; minimum RPM application: v0.0.2; minimum RPM Chart with the default RPM image: 0.0.6. HCU device plugin must be v3.0.0 or later with RESOURCE_REGISTER_STRATEGY=hami. Plugin artifacts are confirmed for amd64. The older DCU naming protocol is not a substitute for the HCU protocol.

The rc suffix in HAMi Enterprise versions does not indicate a test or prerelease build. The old v2.9.0-rc0 and v2.9.0-rc1 images are no longer pullable. For new deployments, choose an available version that meets the interface requirements above. A minimum version is not a guarantee against regressions in every later version.

Resource pools require Kubernetes 1.30 or later and HAMi extender mode; they do not apply to DRA. The Ascend resource-pool scenario in the table is limited to regular workload containers. Ascend or NVIDIA initialization-container device requests in non-Downward mode are not among the confirmed combinations; the current production device-locking path does not cover this condition.

Software changes​

  • Fix GPU workload-form resource format. When creating, copying, or editing GPU workloads, extended resources are written directly to the container's resources.limits and resources.requests, matching the native Kubernetes template interface in API Server v0.15.1. Resource readback for edit forms, workload lists, and details is updated for the same format.
  • Expand workload forms. Forms support replica count, image pull policy, workload and Pod labels, ConfigMap/Secret environment-variable references, TCP/UDP container ports, HTTP readiness and liveness probes, tolerations, node affinity, Pod anti-affinity, DNS options, and Pod/container security contexts. Enter ConfigMap/Secret references by name; they must already exist in the workload namespace. Container-level settings apply to the first workload container.
  • Adjust edit-save behavior. Editing starts from the existing Pod template and then overwrites fields managed by the form; copying rebuilds the template from form fields. When access plugins such as Jupyter or VS Code are enabled, custom readiness and liveness probes are disabled to avoid backend constraint conflicts. HTTP probe initial delay may be 0.
  • Add NVIDIA vGPU memory-percentage input. Memory limits can be specified as a percentage or absolute capacity. Percentage input is restricted to integers from 1 to 100, and existing percentage requests can be populated when editing. This option applies only to NVIDIA vGPU, not vPPU or other card types.
  • Update Jupyter access links. Opening Jupyter from the workload list now adds a per-access routecheck parameter to avoid stale gateway-path caching in browsers that reuse a previous route. The access token is preserved and encoded correctly.

Chart changes​

Compared with 0.21.2, this release only updates the Chart version, default UI image, and generated documentation. appVersion, backend and migration images, configuration options, templates, dependencies, and CRDs are unchanged.

Upgrade guidance​

  • When upgrading from Chart 0.21.2, confirm ui.image.tag is updated to v0.13.0; custom values pinned to v0.12.1 continue to use the affected UI. Keep apiserver.image.tag, controllerManager.image.tag, and auth.image.tag at v0.15.1; do not roll back the backend when upgrading the UI. For a private registry, provide the new UI image and note that global.imageRegistry overrides component registries.
  • After the UI update, reload the platform page before creating, copying, or editing workloads. The new workload-list entry point generates Jupyter's cache parameter; existing bookmarks do not change automatically. Reopen the entry point from the platform when needed.
  • Before using the advanced forms, check the target namespace's Secrets and ConfigMaps, probe ports, and scheduling conditions. When first editing a complex template created through the API or YAML in the UI, keep its original configuration and review the form-managed fields: volumes, environment variables, affinity, and security contexts are regenerated from form state. Do not assume arbitrary native fields round-trip unchanged; copying is also not guaranteed to retain fields outside the form.
  • For the UI resource-format fix alone, no additional HAMi Enterprise, RPM, or CRD upgrade is needed. New use of percentage-based GPU memory or resource pools must still meet the corresponding conditions in the table. Resource-pool installation order and vendor switches follow the Chart 0.21.2 upgrade guidance.
  • This release adds no database migration or storage-configuration changes. For SQLite auth storage, retain the existing persistence and backup arrangements. The backend interface remains v0.15.1; custom clients should continue using the native PodTemplateSpec and flattened resource maps.

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.3 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.1"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.1"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.1"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.13.0"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