Skip to content

Commit 62e993c

Browse files
authored
Merge pull request kubernetes#88401 from gongguan/volume_binder
refactor volume binder
2 parents e9d502e + c6b94e4 commit 62e993c

File tree

14 files changed

+71
-157
lines changed

14 files changed

+71
-157
lines changed

pkg/controller/volume/scheduling/scheduler_binder.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,9 @@ type SchedulerVolumeBinder interface {
131131

132132
// GetBindingsCache returns the cache used (if any) to store volume binding decisions.
133133
GetBindingsCache() PodBindingCache
134+
135+
// DeletePodBindings will delete pod's bindingDecisions in podBindingCache.
136+
DeletePodBindings(pod *v1.Pod)
134137
}
135138

136139
type volumeBinder struct {
@@ -181,6 +184,14 @@ func (b *volumeBinder) GetBindingsCache() PodBindingCache {
181184
return b.podBindingCache
182185
}
183186

187+
// DeletePodBindings will delete pod's bindingDecisions in podBindingCache.
188+
func (b *volumeBinder) DeletePodBindings(pod *v1.Pod) {
189+
cache := b.podBindingCache
190+
if pod != nil {
191+
cache.DeleteBindings(pod)
192+
}
193+
}
194+
184195
// FindPodVolumes caches the matching PVs and PVCs to provision per node in podBindingCache.
185196
// This method intentionally takes in a *v1.Node object instead of using volumebinder.nodeInformer.
186197
// That's necessary because some operations will need to pass in to the predicate fake node objects.

pkg/controller/volume/scheduling/scheduler_binder_fake.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,3 +63,6 @@ func (b *FakeVolumeBinder) BindPodVolumes(assumedPod *v1.Pod) error {
6363
func (b *FakeVolumeBinder) GetBindingsCache() PodBindingCache {
6464
return nil
6565
}
66+
67+
// DeletePodBindings implements SchedulerVolumeBinder.DeletePodBindings.
68+
func (b *FakeVolumeBinder) DeletePodBindings(pod *v1.Pod) {}

pkg/scheduler/BUILD

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ go_library(
1111
visibility = ["//visibility:public"],
1212
deps = [
1313
"//pkg/api/v1/pod:go_default_library",
14+
"//pkg/controller/volume/scheduling:go_default_library",
1415
"//pkg/features:go_default_library",
1516
"//pkg/scheduler/algorithmprovider:go_default_library",
1617
"//pkg/scheduler/apis/config:go_default_library",
@@ -28,7 +29,6 @@ go_library(
2829
"//pkg/scheduler/internal/queue:go_default_library",
2930
"//pkg/scheduler/metrics:go_default_library",
3031
"//pkg/scheduler/profile:go_default_library",
31-
"//pkg/scheduler/volumebinder:go_default_library",
3232
"//staging/src/k8s.io/api/core/v1:go_default_library",
3333
"//staging/src/k8s.io/api/storage/v1:go_default_library",
3434
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
@@ -82,7 +82,6 @@ go_test(
8282
"//pkg/scheduler/nodeinfo:go_default_library",
8383
"//pkg/scheduler/profile:go_default_library",
8484
"//pkg/scheduler/testing:go_default_library",
85-
"//pkg/scheduler/volumebinder:go_default_library",
8685
"//staging/src/k8s.io/api/core/v1:go_default_library",
8786
"//staging/src/k8s.io/api/events/v1beta1:go_default_library",
8887
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
@@ -130,7 +129,6 @@ filegroup(
130129
"//pkg/scheduler/profile:all-srcs",
131130
"//pkg/scheduler/testing:all-srcs",
132131
"//pkg/scheduler/util:all-srcs",
133-
"//pkg/scheduler/volumebinder:all-srcs",
134132
],
135133
tags = ["automanaged"],
136134
visibility = ["//visibility:public"],

pkg/scheduler/factory.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ import (
3838
policylisters "k8s.io/client-go/listers/policy/v1beta1"
3939
"k8s.io/client-go/tools/cache"
4040
"k8s.io/klog"
41+
"k8s.io/kubernetes/pkg/controller/volume/scheduling"
4142
kubefeatures "k8s.io/kubernetes/pkg/features"
4243
"k8s.io/kubernetes/pkg/scheduler/algorithmprovider"
4344
schedulerapi "k8s.io/kubernetes/pkg/scheduler/apis/config"
@@ -53,7 +54,6 @@ import (
5354
cachedebugger "k8s.io/kubernetes/pkg/scheduler/internal/cache/debugger"
5455
internalqueue "k8s.io/kubernetes/pkg/scheduler/internal/queue"
5556
"k8s.io/kubernetes/pkg/scheduler/profile"
56-
"k8s.io/kubernetes/pkg/scheduler/volumebinder"
5757
)
5858

5959
const (
@@ -83,7 +83,7 @@ type Configurator struct {
8383
schedulerCache internalcache.Cache
8484

8585
// Handles volume binding decisions
86-
volumeBinder *volumebinder.VolumeBinder
86+
volumeBinder scheduling.SchedulerVolumeBinder
8787

8888
// Disable pod preemption or not.
8989
disablePreemption bool

pkg/scheduler/framework/plugins/volumebinding/BUILD

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ go_library(
66
importpath = "k8s.io/kubernetes/pkg/scheduler/framework/plugins/volumebinding",
77
visibility = ["//visibility:public"],
88
deps = [
9+
"//pkg/controller/volume/scheduling:go_default_library",
910
"//pkg/scheduler/framework/v1alpha1:go_default_library",
1011
"//pkg/scheduler/nodeinfo:go_default_library",
11-
"//pkg/scheduler/volumebinder:go_default_library",
1212
"//staging/src/k8s.io/api/core/v1:go_default_library",
1313
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
1414
],
@@ -36,7 +36,6 @@ go_test(
3636
"//pkg/controller/volume/scheduling:go_default_library",
3737
"//pkg/scheduler/framework/v1alpha1:go_default_library",
3838
"//pkg/scheduler/nodeinfo:go_default_library",
39-
"//pkg/scheduler/volumebinder:go_default_library",
4039
"//staging/src/k8s.io/api/core/v1:go_default_library",
4140
],
4241
)

pkg/scheduler/framework/plugins/volumebinding/volume_binding.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,14 @@ import (
2121

2222
v1 "k8s.io/api/core/v1"
2323
"k8s.io/apimachinery/pkg/runtime"
24+
"k8s.io/kubernetes/pkg/controller/volume/scheduling"
2425
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
2526
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
26-
"k8s.io/kubernetes/pkg/scheduler/volumebinder"
2727
)
2828

2929
// VolumeBinding is a plugin that binds pod volumes in scheduling.
3030
type VolumeBinding struct {
31-
binder *volumebinder.VolumeBinder
31+
binder scheduling.SchedulerVolumeBinder
3232
}
3333

3434
var _ framework.FilterPlugin = &VolumeBinding{}
@@ -72,7 +72,7 @@ func (pl *VolumeBinding) Filter(ctx context.Context, cs *framework.CycleState, p
7272
return nil
7373
}
7474

75-
reasons, err := pl.binder.Binder.FindPodVolumes(pod, node)
75+
reasons, err := pl.binder.FindPodVolumes(pod, node)
7676

7777
if err != nil {
7878
return framework.NewStatus(framework.Error, err.Error())

pkg/scheduler/framework/plugins/volumebinding/volume_binding_test.go

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,9 @@ import (
2323
"testing"
2424

2525
v1 "k8s.io/api/core/v1"
26-
volumescheduling "k8s.io/kubernetes/pkg/controller/volume/scheduling"
26+
"k8s.io/kubernetes/pkg/controller/volume/scheduling"
2727
framework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
2828
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
29-
"k8s.io/kubernetes/pkg/scheduler/volumebinder"
3029
)
3130

3231
func TestVolumeBinding(t *testing.T) {
@@ -44,7 +43,7 @@ func TestVolumeBinding(t *testing.T) {
4443
name string
4544
pod *v1.Pod
4645
node *v1.Node
47-
volumeBinderConfig *volumescheduling.FakeVolumeBinderConfig
46+
volumeBinderConfig *scheduling.FakeVolumeBinderConfig
4847
wantStatus *framework.Status
4948
}{
5049
{
@@ -57,7 +56,7 @@ func TestVolumeBinding(t *testing.T) {
5756
name: "all bound",
5857
pod: &v1.Pod{Spec: volState},
5958
node: &v1.Node{},
60-
volumeBinderConfig: &volumescheduling.FakeVolumeBinderConfig{
59+
volumeBinderConfig: &scheduling.FakeVolumeBinderConfig{
6160
AllBound: true,
6261
},
6362
wantStatus: nil,
@@ -66,32 +65,32 @@ func TestVolumeBinding(t *testing.T) {
6665
name: "unbound/no matches",
6766
pod: &v1.Pod{Spec: volState},
6867
node: &v1.Node{},
69-
volumeBinderConfig: &volumescheduling.FakeVolumeBinderConfig{
70-
FindReasons: []volumescheduling.ConflictReason{volumescheduling.ErrReasonBindConflict},
68+
volumeBinderConfig: &scheduling.FakeVolumeBinderConfig{
69+
FindReasons: []scheduling.ConflictReason{scheduling.ErrReasonBindConflict},
7170
},
72-
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, string(volumescheduling.ErrReasonBindConflict)),
71+
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, string(scheduling.ErrReasonBindConflict)),
7372
},
7473
{
7574
name: "bound and unbound unsatisfied",
7675
pod: &v1.Pod{Spec: volState},
7776
node: &v1.Node{},
78-
volumeBinderConfig: &volumescheduling.FakeVolumeBinderConfig{
79-
FindReasons: []volumescheduling.ConflictReason{volumescheduling.ErrReasonBindConflict, volumescheduling.ErrReasonNodeConflict},
77+
volumeBinderConfig: &scheduling.FakeVolumeBinderConfig{
78+
FindReasons: []scheduling.ConflictReason{scheduling.ErrReasonBindConflict, scheduling.ErrReasonNodeConflict},
8079
},
81-
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, string(volumescheduling.ErrReasonBindConflict), string(volumescheduling.ErrReasonNodeConflict)),
80+
wantStatus: framework.NewStatus(framework.UnschedulableAndUnresolvable, string(scheduling.ErrReasonBindConflict), string(scheduling.ErrReasonNodeConflict)),
8281
},
8382
{
8483
name: "unbound/found matches/bind succeeds",
8584
pod: &v1.Pod{Spec: volState},
8685
node: &v1.Node{},
87-
volumeBinderConfig: &volumescheduling.FakeVolumeBinderConfig{},
86+
volumeBinderConfig: &scheduling.FakeVolumeBinderConfig{},
8887
wantStatus: nil,
8988
},
9089
{
9190
name: "predicate error",
9291
pod: &v1.Pod{Spec: volState},
9392
node: &v1.Node{},
94-
volumeBinderConfig: &volumescheduling.FakeVolumeBinderConfig{
93+
volumeBinderConfig: &scheduling.FakeVolumeBinderConfig{
9594
FindErr: findErr,
9695
},
9796
wantStatus: framework.NewStatus(framework.Error, findErr.Error()),
@@ -102,7 +101,7 @@ func TestVolumeBinding(t *testing.T) {
102101
t.Run(item.name, func(t *testing.T) {
103102
nodeInfo := schedulernodeinfo.NewNodeInfo()
104103
nodeInfo.SetNode(item.node)
105-
fakeVolumeBinder := volumebinder.NewFakeVolumeBinder(item.volumeBinderConfig)
104+
fakeVolumeBinder := scheduling.NewFakeVolumeBinder(item.volumeBinderConfig)
106105
p := &VolumeBinding{
107106
binder: fakeVolumeBinder,
108107
}

pkg/scheduler/framework/v1alpha1/BUILD

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ go_library(
1313
importpath = "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1",
1414
visibility = ["//visibility:public"],
1515
deps = [
16+
"//pkg/controller/volume/scheduling:go_default_library",
1617
"//pkg/scheduler/apis/config:go_default_library",
1718
"//pkg/scheduler/listers:go_default_library",
1819
"//pkg/scheduler/metrics:go_default_library",
1920
"//pkg/scheduler/nodeinfo:go_default_library",
2021
"//pkg/scheduler/util:go_default_library",
21-
"//pkg/scheduler/volumebinder:go_default_library",
2222
"//staging/src/k8s.io/api/core/v1:go_default_library",
2323
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
2424
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",

pkg/scheduler/framework/v1alpha1/framework.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ import (
3030
clientset "k8s.io/client-go/kubernetes"
3131
"k8s.io/client-go/util/workqueue"
3232
"k8s.io/klog"
33+
"k8s.io/kubernetes/pkg/controller/volume/scheduling"
3334
"k8s.io/kubernetes/pkg/scheduler/apis/config"
3435
schedulerlisters "k8s.io/kubernetes/pkg/scheduler/listers"
3536
"k8s.io/kubernetes/pkg/scheduler/metrics"
3637
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
3738
schedutil "k8s.io/kubernetes/pkg/scheduler/util"
38-
"k8s.io/kubernetes/pkg/scheduler/volumebinder"
3939
)
4040

4141
const (
@@ -78,7 +78,7 @@ type framework struct {
7878

7979
clientSet clientset.Interface
8080
informerFactory informers.SharedInformerFactory
81-
volumeBinder *volumebinder.VolumeBinder
81+
volumeBinder scheduling.SchedulerVolumeBinder
8282

8383
metricsRecorder *metricsRecorder
8484

@@ -119,7 +119,7 @@ type frameworkOptions struct {
119119
informerFactory informers.SharedInformerFactory
120120
snapshotSharedLister schedulerlisters.SharedLister
121121
metricsRecorder *metricsRecorder
122-
volumeBinder *volumebinder.VolumeBinder
122+
volumeBinder scheduling.SchedulerVolumeBinder
123123
runAllFilters bool
124124
}
125125

@@ -163,7 +163,7 @@ func withMetricsRecorder(recorder *metricsRecorder) Option {
163163
}
164164

165165
// WithVolumeBinder sets volume binder for the scheduling framework.
166-
func WithVolumeBinder(binder *volumebinder.VolumeBinder) Option {
166+
func WithVolumeBinder(binder scheduling.SchedulerVolumeBinder) Option {
167167
return func(o *frameworkOptions) {
168168
o.volumeBinder = binder
169169
}
@@ -888,7 +888,7 @@ func (f *framework) SharedInformerFactory() informers.SharedInformerFactory {
888888
}
889889

890890
// VolumeBinder returns the volume binder used by scheduler.
891-
func (f *framework) VolumeBinder() *volumebinder.VolumeBinder {
891+
func (f *framework) VolumeBinder() scheduling.SchedulerVolumeBinder {
892892
return f.volumeBinder
893893
}
894894

pkg/scheduler/framework/v1alpha1/interface.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,10 @@ import (
2929
"k8s.io/apimachinery/pkg/types"
3030
"k8s.io/client-go/informers"
3131
clientset "k8s.io/client-go/kubernetes"
32+
"k8s.io/kubernetes/pkg/controller/volume/scheduling"
3233
"k8s.io/kubernetes/pkg/scheduler/apis/config"
3334
schedulerlisters "k8s.io/kubernetes/pkg/scheduler/listers"
3435
schedulernodeinfo "k8s.io/kubernetes/pkg/scheduler/nodeinfo"
35-
"k8s.io/kubernetes/pkg/scheduler/volumebinder"
3636
)
3737

3838
// NodeScoreList declares a list of nodes and their scores.
@@ -521,5 +521,5 @@ type FrameworkHandle interface {
521521
SharedInformerFactory() informers.SharedInformerFactory
522522

523523
// VolumeBinder returns the volume binder used by scheduler.
524-
VolumeBinder() *volumebinder.VolumeBinder
524+
VolumeBinder() scheduling.SchedulerVolumeBinder
525525
}

0 commit comments

Comments
 (0)