Volcano
v1.16.0Orchestration & ManagementA largely additive release expands multi-tenant queueing, topology-aware scheduling, observability, platform support, and Helm and CLI capabilities, with most new behavior opt-in. Operators should review the security updates and the Kubernetes and Go compatibility requirements before upgrading.
Action needed (2)
securityDependency updates for upstream security advisories
Updates
Prometheus,golang.,org/x/crypto x/net,x/text,OpenTelemetry,etcd,gRPC, and other indirect dependencies to address upstream security advisories.breakingThe
--csi-storageflag defaultThe
--csi-storageflag now defaults to true.
Check if affected (9)
securityDRA capacity aggregation fix, GHSA-j38h-7pfq-cxmw
Applies if you run DRA capacity accounting.
The DRA capacity aggregation path no longer permits tenant-controlled device or minimum-task counts to trigger excessive iteration. This addresses GHSA-j38h-7pfq-cxmw.
breakingCluster Queue
spec.authorizationallowedNamespaces Applies if you use
NamespaceQueue.Cluster Queue authorization now uses
spec.: omitted or empty lists denyallowedNamespaces NamespaceQueueattachment, while["*"]allows all namespaces.breaking
NamespaceQueueauthorization and readiness checksApplies if you use
NamespaceQueue.NamespaceQueuecreation now requires the namespace and an authorized parent Queue, namespace-local RBAC permissions fornamespacequeues, and confirmation ofReady=TrueandAuthorized=Truebefore workloads are submitted.breaking
custom.migration sequencehypernode_controller_mode Applies if you configure
custom..hypernode_controller_mode Integrated installations must disable
custom.and wait for the controller-manager rollout before enablinghypernode_controller_mode standalone, so only one process reconciles HyperNodes.breakingHyperNode topology plugin interfaces
Applies if you use
HyperNodeGradientForJobFn,HyperNodeGradientForSubJobFn, orHyperNodeCandidateFn.Custom topology plugins using these HyperNode extension points must adapt to the new behavior and rebuild:
HyperNodeGradientForJobFn,HyperNodeGradientForSubJobFn, andHyperNodeCandidateFn.breaking
Kubernetes 1.and36. 1 Go 1.build requirements26 Applies if you do not use
Go 1..26 The release builds against
Kubernetes 1.and requires36. 1 Go 1.for source builds.26 breaking
Kubernetes 1.deployment support23 Applies if you use
Kubernetes 1..23 Deployments on
Kubernetes 1.are unsupported.23 breakingHyperNode gradient return types
Applies if you use
HyperNode gradient return types.Custom topology plugins must be rebuilt for the new HyperNode gradient return types.
breakingTTL cleanup for Helm admission-init Jobs
Applies if you use Helm admission-init Jobs.
Helm admission-init Jobs now use TTL cleanup instead of immediate deletion after a successful hook.
All 89 other recorded changessecurity fixes 1 · additions 33 · fixes 32 · value changes 12 · constraints 8 · defaults 2 · removals 1
security fixes (1)
- Adds release SBOM generation and Security Insights metadata
additions (33)
- The
UnschedulableJobCacherecords why a Job could not be scheduled and uses plugin-provided event hints to decide when it should be evaluated again. - The feature is disabled by default. Enable it with the scheduler feature gate:
bash helm upgrade --install volcano volcano-sh/volcano \ --namespace volcano-system --create-namespace --version 1.16. 0 \ --set custom. scheduler_feature_gates="UnschedulableJobCache=true" - NamespaceQueue introduces namespace-local queue management while preserving administrator control over the cluster-level resource hierarchy.
- Controller-maintained authorization and readiness conditions, with final scheduler readiness checks before admission.
- The new
fairshareplugin tracks cumulative resource-seconds per namespace within a queue and applies exponential half-life decay. - Optional enqueue gating and ConfigMap persistence across scheduler restarts.
- PodGroup anti-affinity expresses isolation at the workload-group level. It selects peer PodGroups by labels and namespace selectors and applies the separation rule at a named or numbered HyperNode tier.
- The standalone controller provides an independent deployment and operational boundary while retaining the same HyperNode API, discovery configuration, and implementation.
- A dedicated
vc-hypernode-controller-managerbinary, image, Deployment, RBAC, and Helm configuration. - Adds
hami-vnpu-coreintegration for Ascend memory virtualization and compute time slicing. - Checks Ascend health using allocatable devices and adds vGPU UUID-based allowlist/denylist constraints.
- Adds inqueue resource metrics, queue workload-state metrics, and
volcano_eviction_transactions_total{action}. - Makes scheduler job/task updater concurrency configurable
- logs loaded scheduler configuration for troubleshooting
- Adds namespace columns and stable sorting to
vcctl pod list - release automation for Linux/macOS amd64/arm64 CLI archives, checksums, and SLSA provenance
- Adds
scheduling.NamespaceQueuevolcano. sh/v1beta1 - Adds
spec.topologyAffinity. podGroupAntiAffinity - Adds
Numatopology.spec. podAllocations - Adds
Session.and QueueingHint-style event registration for unschedulable-job retriesAddHintProvider - Adds the Queue annotation
volcano.sh/nodegroup-resource-limits - Adds the
fairshare.arguments* - Adds Job plugin option
svc: ["--inject-hosts-env=false"] - Adds Pod annotations
volcano.andsh/vgpu-use-gpuuuid volcano.sh/vgpu-nouse-gpuuuid - Adds
--job-updater-worker-numand--task-updater-worker-num - Adds
custom.hypernode_controller_mode - Adds
custom.(default 3600 seconds)admission_init_ttl - retention annotations for the existing Volcano CRDs
- Configures GOMAXPROCS using container CPU quotas across Volcano components.
- Update CRDs and RBAC together with the control-plane components
- Gang-aware
gangPreemptandgangReclaimremain explicit actions - Caps how much a queue can allocate from each nodegroup while allowing placement in other permitted groups.
- Adds pod-level resource settings and accounts for restartable init containers/native sidecars and Pod overhead in effective requests used by the Volcano agent.
fixes (32)
- Registers upstream PreFilter hooks for CSI limits, node affinity, and volume-zone checks
- avoiding phantom reservations when a later plugin rejects admission
- Includes gate-reserved resources from descendant queues in ancestor quota checks
- Preserves Completed state after finished Pods are deleted
- Returns Closed queues to Closing on resync when PodGroups remain
- Uses PodGroup MinResources for Volcano Jobs that do not yet have Pods
- closes a remaining overflow path so large device counts cannot wrap into negative quota usage
- preventing false NUMA policy failures
- preventing Pods such as Spark executors with newly created PVCs from remaining permanently outside scheduler consideration
- restores node state after unsuccessful updates
- Adds missing nil checks for PodGroup-related cache paths
- Honors NeedContinueAllocating after PrePredicate failures
- Retains the allocation-rate policy default range when its arguments are omitted.
- Formats effectively unlimited resource values consistently in scheduler resource strings.
- Corrects UpdateHyperNode rebuild logic
- Honors nominated HyperNodes without hard topology mode
- Guards annotation patches by Pod UID when Pods are recreated
- Avoids deleting the PodGroup for targeted Pod restarts
- Falls back to replica count when partition minPartitions is omitted.
- Returns status-update failures for retry
- Synchronizes TaskInfo allocation annotations across binding and rollback
- Prevents idle-memory underflow
- Fixes large-cluster vGPU scheduling coordination.
- Corrects allocation resource accounting
- Rechecks device feasibility after tentative evictions before committing a reclaim decision.
- Completes or requeues popped Pods on early exits
- Rejects non-positive worker counts
- Matches CNI plugins by type rather than display name.
- Deduplicates Pod lists by namespace and name
- reports all invalid subgroup and hierarchical-weight entries
- preserves the existing Volcano CRDs and their custom resources on uninstall
- avoiding scheduler stalls for very large counts
value changes (12)
- Bounded retries**: A configurable watchdog retries cached Jobs after a maximum skip duration, defaulting to five minutes. The cache is in memory and is cleared on scheduler restart.
- Historical usage ordering within a queue, with a default four-hour half-life.
- Fairshare influences pending-job ordering and optional enqueue admission. It does not preempt or reclaim already-running jobs. Persistence is disabled by default.
- The
usageplugin now maintains a session-level shadow load cache for assigned Pods whose usage is not yet visible in metrics. - The
metrics.setting defines the monitoring delay window and defaults to 30 seconds.interval - Reuses the session NodeMap, batches nodeorder PreScore/Score work, and executes active score plugins in one parallel node traversal before plugin-owned normalization and aggregation.
- Updates Kubernetes dependencies to 1.36.1, the Go toolchain requirement to 1.26
- Applies upstream DynamicResources
Scoreand plugin-ownedNormalizeScoreto prioritized device requests - Uses the upstream VolumeBinding implementation in place of Volcano's fork
- Updates golang.org/x/crypto to v0.56.0, x/net to v0.58.0, x/text to v0.41.0, and Prometheus to v0.311.3
- Updates CNI, cgroups, filesystem notifications, Elasticsearch, Prometheus common, and the OTLP trace exporter
- Updates e2e-framework, Ginkgo, Gomega, and gomonkey.
constraints (8)
- Namespace-local parent/child hierarchies, with
cluster/<name>references for cluster Queue parents. - Explicit workload references through
spec., resolved within the workload's namespace. Bare queue names continue to reference cluster Queues.queue: namespace/<name> - NamespaceQueue hierarchies allow five levels below a cluster Queue by default. Set
--max-namespacequeue-depthon both the controller manager and admission webhook to change that limit. - Each term must specify exactly one of
topologyTierNameandtopologyTier. Preferred terms additionally require a weight from 1 to 100. Required terms omit weight. - Enforcement applies to
allocate. BestEffort Pods placed through backfill do not receive this isolation guarantee. - Kubernetes 1.36 support
- Fairshare must precede DRF for historical-usage ordering to take effect.
- update resource-exporter to a version supporting
spec.podAllocations
defaults (2)
controller-manager,standalone, anddisableddeployment modes, with integrated mode retained as the default.- NamespaceQueue and UnschedulableJobCache are disabled by default.
removals (1)
- The final implementation no longer injects a PostStart hook.
A weekly email arrives when a release needs action. Like the security patches and breaking changes in this release.