From 1a12529732a1cd543452240977f4dfed4995b412 Mon Sep 17 00:00:00 2001 From: JesseStutler Date: Sat, 30 May 2026 03:45:42 +0000 Subject: [PATCH 1/3] chore: bump version to v1.15.0 Signed-off-by: JesseStutler --- .release-version | 2 +- README.md | 3 ++- installer/helm/chart/volcano/Chart.yaml | 2 +- installer/helm/chart/volcano/values.yaml | 2 +- installer/volcano-agent-development.yaml | 4 ++-- installer/volcano-agent-scheduler-development.yaml | 2 +- installer/volcano-development-vap-map.yaml | 8 ++++---- installer/volcano-development-vap.yaml | 8 ++++---- installer/volcano-development.yaml | 8 ++++---- 9 files changed, 20 insertions(+), 19 deletions(-) diff --git a/.release-version b/.release-version index b9bc2fdcb15..440ddd8f1c2 100644 --- a/.release-version +++ b/.release-version @@ -1 +1 @@ -latest \ No newline at end of file +v1.15.0 diff --git a/README.md b/README.md index 56745b30856..cd044549ea4 100644 --- a/README.md +++ b/README.md @@ -105,7 +105,7 @@ You can try Volcano by one of the following two ways. Install Volcano on an existing Kubernetes cluster. This way is both available for x86_64 and arm64 architecture. ``` -kubectl apply -f https://raw.githubusercontent.com/volcano-sh/volcano/master/installer/volcano-development.yaml +kubectl apply -f https://raw.githubusercontent.com/volcano-sh/volcano/release-1.15/installer/volcano-development.yaml ``` Enjoy! Volcano will create the following resources in `volcano-system` namespace. @@ -183,6 +183,7 @@ Please follow the guide [Volcano Dashboard](https://github.com/volcano-sh/dashbo | | Kubernetes 1.35 | Kubernetes 1.34 | Kubernetes 1.33 | Kubernetes 1.32 | Kubernetes 1.31 | Kubernetes 1.30 | Kubernetes 1.29 | Kubernetes 1.28 | Kubernetes 1.27 | Kubernetes 1.26 | Kubernetes 1.25 | Kubernetes 1.24 | Kubernetes 1.23 | Kubernetes 1.22 | Kubernetes 1.21 | |-----------------------|-----------------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------|-----------------| | Volcano HEAD (master) | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | +| Volcano v1.15 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | | Volcano v1.14 | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | | Volcano v1.13 | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | - | - | | Volcano v1.12 | - | - | - | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | diff --git a/installer/helm/chart/volcano/Chart.yaml b/installer/helm/chart/volcano/Chart.yaml index b56b4e9363e..6a89e078e1c 100644 --- a/installer/helm/chart/volcano/Chart.yaml +++ b/installer/helm/chart/volcano/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 description: A Helm chart for Volcano name: volcano version: "1.15.0" -appVersion: "0.1" +appVersion: "1.15.0" icon: https://raw.githubusercontent.com/volcano-sh/charts/master/docs/images/volcano-logo.png home: https://volcano.sh sources: diff --git a/installer/helm/chart/volcano/values.yaml b/installer/helm/chart/volcano/values.yaml index ffbc93fdad1..1fa676ce08e 100644 --- a/installer/helm/chart/volcano/values.yaml +++ b/installer/helm/chart/volcano/values.yaml @@ -12,7 +12,7 @@ basic: image_pull_policy: "Always" # Common image tag when a per-component tag below is unset or empty. # Per-component keys override this only when set to a non-empty string. - image_tag_version: "latest" + image_tag_version: "v1.15.0" controller_image_tag_version: "" scheduler_image_tag_version: "" agent_scheduler_image_tag_version: "" diff --git a/installer/volcano-agent-development.yaml b/installer/volcano-agent-development.yaml index 5012385362f..c8b0a4d2cf9 100644 --- a/installer/volcano-agent-development.yaml +++ b/installer/volcano-agent-development.yaml @@ -132,7 +132,7 @@ spec: type: File initContainers: - name: volcano-agent-init - image: docker.io/volcanosh/vc-agent:latest + image: docker.io/volcanosh/vc-agent:v1.15.0 securityContext: allowPrivilegeEscalation: false capabilities: @@ -163,7 +163,7 @@ spec: imagePullPolicy: Always containers: - name: volcano-agent - image: docker.io/volcanosh/vc-agent:latest + image: docker.io/volcanosh/vc-agent:v1.15.0 securityContext: capabilities: add: diff --git a/installer/volcano-agent-scheduler-development.yaml b/installer/volcano-agent-scheduler-development.yaml index 6030380ab94..69119fc330c 100644 --- a/installer/volcano-agent-scheduler-development.yaml +++ b/installer/volcano-agent-scheduler-development.yaml @@ -172,7 +172,7 @@ spec: priorityClassName: system-cluster-critical containers: - name: volcano-agent-scheduler - image: docker.io/volcanosh/vc-agent-scheduler:latest + image: docker.io/volcanosh/vc-agent-scheduler:v1.15.0 args: - --logtostderr - --scheduler-conf=/volcano.scheduler/agent-scheduler.conf diff --git a/installer/volcano-development-vap-map.yaml b/installer/volcano-development-vap-map.yaml index f22fd5356d0..244150e5bb0 100644 --- a/installer/volcano-development-vap-map.yaml +++ b/installer/volcano-development-vap-map.yaml @@ -154,7 +154,7 @@ spec: - --port=8443 - -v=4 - 2>&1 - image: docker.io/volcanosh/vc-webhook-manager:latest + image: docker.io/volcanosh/vc-webhook-manager:v1.15.0 imagePullPolicy: Always name: admission volumeMounts: @@ -252,7 +252,7 @@ spec: restartPolicy: Never containers: - name: main - image: docker.io/volcanosh/vc-webhook-manager:latest + image: docker.io/volcanosh/vc-webhook-manager:v1.15.0 imagePullPolicy: Always command: ["./gen-admission-secret.sh", "--service", "volcano-admission-service", "--namespace", "volcano-system", "--secret", "volcano-admission-secret"] @@ -9072,7 +9072,7 @@ spec: priorityClassName: system-cluster-critical containers: - name: volcano-controllers - image: docker.io/volcanosh/vc-controller-manager:latest + image: docker.io/volcanosh/vc-controller-manager:v1.15.0 args: - --logtostderr - --enable-healthz=true @@ -9294,7 +9294,7 @@ spec: priorityClassName: system-cluster-critical containers: - name: volcano-scheduler - image: docker.io/volcanosh/vc-scheduler:latest + image: docker.io/volcanosh/vc-scheduler:v1.15.0 args: - --logtostderr - --scheduler-conf=/volcano.scheduler/volcano-scheduler.conf diff --git a/installer/volcano-development-vap.yaml b/installer/volcano-development-vap.yaml index 13444be3ea1..96cf377d16d 100644 --- a/installer/volcano-development-vap.yaml +++ b/installer/volcano-development-vap.yaml @@ -154,7 +154,7 @@ spec: - --port=8443 - -v=4 - 2>&1 - image: docker.io/volcanosh/vc-webhook-manager:latest + image: docker.io/volcanosh/vc-webhook-manager:v1.15.0 imagePullPolicy: Always name: admission volumeMounts: @@ -252,7 +252,7 @@ spec: restartPolicy: Never containers: - name: main - image: docker.io/volcanosh/vc-webhook-manager:latest + image: docker.io/volcanosh/vc-webhook-manager:v1.15.0 imagePullPolicy: Always command: ["./gen-admission-secret.sh", "--service", "volcano-admission-service", "--namespace", "volcano-system", "--secret", "volcano-admission-secret"] @@ -9072,7 +9072,7 @@ spec: priorityClassName: system-cluster-critical containers: - name: volcano-controllers - image: docker.io/volcanosh/vc-controller-manager:latest + image: docker.io/volcanosh/vc-controller-manager:v1.15.0 args: - --logtostderr - --enable-healthz=true @@ -9294,7 +9294,7 @@ spec: priorityClassName: system-cluster-critical containers: - name: volcano-scheduler - image: docker.io/volcanosh/vc-scheduler:latest + image: docker.io/volcanosh/vc-scheduler:v1.15.0 args: - --logtostderr - --scheduler-conf=/volcano.scheduler/volcano-scheduler.conf diff --git a/installer/volcano-development.yaml b/installer/volcano-development.yaml index 578010c8498..4c4148c1528 100644 --- a/installer/volcano-development.yaml +++ b/installer/volcano-development.yaml @@ -154,7 +154,7 @@ spec: - --port=8443 - -v=4 - 2>&1 - image: docker.io/volcanosh/vc-webhook-manager:latest + image: docker.io/volcanosh/vc-webhook-manager:v1.15.0 imagePullPolicy: Always name: admission volumeMounts: @@ -252,7 +252,7 @@ spec: restartPolicy: Never containers: - name: main - image: docker.io/volcanosh/vc-webhook-manager:latest + image: docker.io/volcanosh/vc-webhook-manager:v1.15.0 imagePullPolicy: Always command: ["./gen-admission-secret.sh", "--service", "volcano-admission-service", "--namespace", "volcano-system", "--secret", "volcano-admission-secret"] @@ -9072,7 +9072,7 @@ spec: priorityClassName: system-cluster-critical containers: - name: volcano-controllers - image: docker.io/volcanosh/vc-controller-manager:latest + image: docker.io/volcanosh/vc-controller-manager:v1.15.0 args: - --logtostderr - --enable-healthz=true @@ -9294,7 +9294,7 @@ spec: priorityClassName: system-cluster-critical containers: - name: volcano-scheduler - image: docker.io/volcanosh/vc-scheduler:latest + image: docker.io/volcanosh/vc-scheduler:v1.15.0 args: - --logtostderr - --scheduler-conf=/volcano.scheduler/volcano-scheduler.conf From 99790e224467c4768bab958e2aaff90b3818526d Mon Sep 17 00:00:00 2001 From: tianqi05 Date: Wed, 27 May 2026 17:30:42 +0800 Subject: [PATCH 2/3] fix(scheduler): restore ImageStates in GenerateNodeMapAndSlice The ImageStates field was originally added to GenerateNodeMapAndSlice in commit 093d07e7 (plugins/util/util.go), but was accidentally dropped when the function was moved to framework/util.go in commit 463cc4ce. Without this line, nodeInfo.ImageStates is always an empty map, causing the ImageLocality scoring plugin to always return 0 for every node. This effectively disables image locality scheduling. Signed-off-by: tianqi05 --- pkg/scheduler/framework/util.go | 1 + pkg/scheduler/framework/util_test.go | 85 ++++++++++++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100644 pkg/scheduler/framework/util_test.go diff --git a/pkg/scheduler/framework/util.go b/pkg/scheduler/framework/util.go index af4df68e61d..4eed5ab223b 100644 --- a/pkg/scheduler/framework/util.go +++ b/pkg/scheduler/framework/util.go @@ -228,6 +228,7 @@ func GenerateNodeMapAndSlice(nodes map[string]*api.NodeInfo) map[string]fwk.Node for _, node := range nodes { nodeInfo := k8sframework.NewNodeInfo(node.Pods()...) nodeInfo.SetNode(node.Node) + nodeInfo.ImageStates = node.CloneImageSummary() nodeMap[node.Name] = nodeInfo } return nodeMap diff --git a/pkg/scheduler/framework/util_test.go b/pkg/scheduler/framework/util_test.go new file mode 100644 index 00000000000..4a124520def --- /dev/null +++ b/pkg/scheduler/framework/util_test.go @@ -0,0 +1,85 @@ +/* +Copyright 2025 The Volcano Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package framework + +import ( + "testing" + + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + fwk "k8s.io/kube-scheduler/framework" + + "volcano.sh/volcano/pkg/scheduler/api" +) + +func TestGenerateNodeMapAndSlice_ImageStates(t *testing.T) { + node := &v1.Node{ + ObjectMeta: metav1.ObjectMeta{Name: "node1"}, + Status: v1.NodeStatus{ + Allocatable: v1.ResourceList{}, + }, + } + + nodeInfo := api.NewNodeInfo(node) + nodeInfo.ImageStates = map[string]*fwk.ImageStateSummary{ + "docker.io/library/nginx:latest": { + Size: 100 * 1024 * 1024, + NumNodes: 3, + }, + "docker.io/library/redis:7": { + Size: 50 * 1024 * 1024, + NumNodes: 5, + }, + } + + nodes := map[string]*api.NodeInfo{ + "node1": nodeInfo, + } + + nodeMap := GenerateNodeMapAndSlice(nodes) + + k8sNodeInfo, ok := nodeMap["node1"] + if !ok { + t.Fatalf("expected node1 in nodeMap") + } + + if len(k8sNodeInfo.GetImageStates()) != 2 { + t.Fatalf("expected 2 image states, got %d", len(k8sNodeInfo.GetImageStates())) + } + + nginxState, ok := k8sNodeInfo.GetImageStates()["docker.io/library/nginx:latest"] + if !ok { + t.Fatalf("expected nginx image state") + } + if nginxState.Size != 100*1024*1024 { + t.Errorf("expected nginx size 100MB, got %d", nginxState.Size) + } + if nginxState.NumNodes != 3 { + t.Errorf("expected nginx NumNodes 3, got %d", nginxState.NumNodes) + } + + redisState, ok := k8sNodeInfo.GetImageStates()["docker.io/library/redis:7"] + if !ok { + t.Fatalf("expected redis image state") + } + if redisState.Size != 50*1024*1024 { + t.Errorf("expected redis size 50MB, got %d", redisState.Size) + } + if redisState.NumNodes != 5 { + t.Errorf("expected redis NumNodes 5, got %d", redisState.NumNodes) + } +} From e55c9814a627bb38a854c2ed6d1681881605901b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 23 Jul 2026 21:28:00 +0000 Subject: [PATCH 3/3] chore(deps): bump golang.org/x/net in /staging/src/volcano.sh/apis Bumps [golang.org/x/net](https://github.com/golang/net) from 0.47.0 to 0.55.0. - [Commits](https://github.com/golang/net/compare/v0.47.0...v0.55.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-version: 0.55.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- staging/src/volcano.sh/apis/go.mod | 14 +++++++------- staging/src/volcano.sh/apis/go.sum | 28 ++++++++++++++-------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/staging/src/volcano.sh/apis/go.mod b/staging/src/volcano.sh/apis/go.mod index 5e64e44c838..02834c61fe7 100644 --- a/staging/src/volcano.sh/apis/go.mod +++ b/staging/src/volcano.sh/apis/go.mod @@ -44,15 +44,15 @@ require ( go.opentelemetry.io/otel/trace v1.41.0 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/mod v0.29.0 // indirect - golang.org/x/net v0.47.0 // indirect + golang.org/x/mod v0.35.0 // indirect + golang.org/x/net v0.55.0 // indirect golang.org/x/oauth2 v0.30.0 // indirect - golang.org/x/sync v0.18.0 // indirect - golang.org/x/sys v0.38.0 // indirect - golang.org/x/term v0.37.0 // indirect - golang.org/x/text v0.31.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/term v0.43.0 // indirect + golang.org/x/text v0.37.0 // indirect golang.org/x/time v0.11.0 // indirect - golang.org/x/tools v0.38.0 // indirect + golang.org/x/tools v0.44.0 // indirect google.golang.org/protobuf v1.36.8 // indirect gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/staging/src/volcano.sh/apis/go.sum b/staging/src/volcano.sh/apis/go.sum index af3f200b248..e51366cc92b 100644 --- a/staging/src/volcano.sh/apis/go.sum +++ b/staging/src/volcano.sh/apis/go.sum @@ -91,24 +91,24 @@ go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= -golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= -golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= -golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= -golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM= +golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= -golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= -golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= -golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= -golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= -golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= -golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= -golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= -golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= +golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c= +golang.org/x/tools v0.44.0/go.mod h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI= golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM= golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=