Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
ef686716
Commit
ef686716
authored
Feb 18, 2017
by
Bobby Salamat
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add support for statefulset spreading to the scheduler
parent
77733c2a
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
170 additions
and
22 deletions
+170
-22
BUILD
plugin/cmd/kube-scheduler/app/BUILD
+1
-0
configurator.go
plugin/cmd/kube-scheduler/app/configurator.go
+3
-0
server.go
plugin/cmd/kube-scheduler/app/server.go
+1
-0
BUILD
plugin/pkg/scheduler/algorithm/BUILD
+1
-0
BUILD
plugin/pkg/scheduler/algorithm/priorities/BUILD
+1
-0
selector_spreading.go
.../pkg/scheduler/algorithm/priorities/selector_spreading.go
+19
-9
selector_spreading_test.go
...scheduler/algorithm/priorities/selector_spreading_test.go
+63
-6
types.go
plugin/pkg/scheduler/algorithm/types.go
+17
-0
compatibility_test.go
...cheduler/algorithmprovider/defaults/compatibility_test.go
+1
-0
defaults.go
plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go
+2
-2
BUILD
plugin/pkg/scheduler/core/BUILD
+1
-0
generic_scheduler_test.go
plugin/pkg/scheduler/core/generic_scheduler_test.go
+3
-1
BUILD
plugin/pkg/scheduler/factory/BUILD
+2
-0
factory.go
plugin/pkg/scheduler/factory/factory.go
+11
-4
factory_test.go
plugin/pkg/scheduler/factory/factory_test.go
+8
-0
plugins.go
plugin/pkg/scheduler/factory/plugins.go
+1
-0
BUILD
plugin/pkg/scheduler/testing/BUILD
+1
-0
fake_lister.go
plugin/pkg/scheduler/testing/fake_lister.go
+28
-0
extender_test.go
test/integration/scheduler/extender_test.go
+1
-0
scheduler_test.go
test/integration/scheduler/scheduler_test.go
+4
-0
util.go
test/integration/scheduler_perf/util.go
+1
-0
No files found.
plugin/cmd/kube-scheduler/app/BUILD
View file @
ef686716
...
@@ -19,6 +19,7 @@ go_library(
...
@@ -19,6 +19,7 @@ go_library(
"//pkg/api:go_default_library",
"//pkg/api:go_default_library",
"//pkg/client/clientset_generated/clientset:go_default_library",
"//pkg/client/clientset_generated/clientset:go_default_library",
"//pkg/client/informers/informers_generated/externalversions:go_default_library",
"//pkg/client/informers/informers_generated/externalversions:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/apps/v1beta1:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/core/v1:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/core/v1:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/extensions/v1beta1:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/extensions/v1beta1:go_default_library",
"//pkg/client/leaderelection:go_default_library",
"//pkg/client/leaderelection:go_default_library",
...
...
plugin/cmd/kube-scheduler/app/configurator.go
View file @
ef686716
...
@@ -21,6 +21,7 @@ import (
...
@@ -21,6 +21,7 @@ import (
"io/ioutil"
"io/ioutil"
"os"
"os"
appsinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/apps/v1beta1"
coreinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/core/v1"
coreinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/core/v1"
extensionsinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/extensions/v1beta1"
extensionsinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/extensions/v1beta1"
"k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options"
"k8s.io/kubernetes/plugin/cmd/kube-scheduler/app/options"
...
@@ -79,6 +80,7 @@ func createScheduler(
...
@@ -79,6 +80,7 @@ func createScheduler(
pvcInformer
coreinformers
.
PersistentVolumeClaimInformer
,
pvcInformer
coreinformers
.
PersistentVolumeClaimInformer
,
replicationControllerInformer
coreinformers
.
ReplicationControllerInformer
,
replicationControllerInformer
coreinformers
.
ReplicationControllerInformer
,
replicaSetInformer
extensionsinformers
.
ReplicaSetInformer
,
replicaSetInformer
extensionsinformers
.
ReplicaSetInformer
,
statefulSetInformer
appsinformers
.
StatefulSetInformer
,
serviceInformer
coreinformers
.
ServiceInformer
,
serviceInformer
coreinformers
.
ServiceInformer
,
recorder
record
.
EventRecorder
,
recorder
record
.
EventRecorder
,
)
(
*
scheduler
.
Scheduler
,
error
)
{
)
(
*
scheduler
.
Scheduler
,
error
)
{
...
@@ -90,6 +92,7 @@ func createScheduler(
...
@@ -90,6 +92,7 @@ func createScheduler(
pvcInformer
,
pvcInformer
,
replicationControllerInformer
,
replicationControllerInformer
,
replicaSetInformer
,
replicaSetInformer
,
statefulSetInformer
,
serviceInformer
,
serviceInformer
,
s
.
HardPodAffinitySymmetricWeight
,
s
.
HardPodAffinitySymmetricWeight
,
)
)
...
...
plugin/cmd/kube-scheduler/app/server.go
View file @
ef686716
...
@@ -81,6 +81,7 @@ func Run(s *options.SchedulerServer) error {
...
@@ -81,6 +81,7 @@ func Run(s *options.SchedulerServer) error {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
recorder
,
recorder
,
)
)
...
...
plugin/pkg/scheduler/algorithm/BUILD
View file @
ef686716
...
@@ -18,6 +18,7 @@ go_library(
...
@@ -18,6 +18,7 @@ go_library(
tags = ["automanaged"],
tags = ["automanaged"],
deps = [
deps = [
"//pkg/api/v1:go_default_library",
"//pkg/api/v1:go_default_library",
"//pkg/apis/apps/v1beta1:go_default_library",
"//pkg/apis/extensions/v1beta1:go_default_library",
"//pkg/apis/extensions/v1beta1:go_default_library",
"//plugin/pkg/scheduler/api:go_default_library",
"//plugin/pkg/scheduler/api:go_default_library",
"//plugin/pkg/scheduler/schedulercache:go_default_library",
"//plugin/pkg/scheduler/schedulercache:go_default_library",
...
...
plugin/pkg/scheduler/algorithm/priorities/BUILD
View file @
ef686716
...
@@ -60,6 +60,7 @@ go_test(
...
@@ -60,6 +60,7 @@ go_test(
tags = ["automanaged"],
tags = ["automanaged"],
deps = [
deps = [
"//pkg/api/v1:go_default_library",
"//pkg/api/v1:go_default_library",
"//pkg/apis/apps/v1beta1:go_default_library",
"//pkg/apis/extensions/v1beta1:go_default_library",
"//pkg/apis/extensions/v1beta1:go_default_library",
"//plugin/pkg/scheduler/algorithm/priorities/util:go_default_library",
"//plugin/pkg/scheduler/algorithm/priorities/util:go_default_library",
"//plugin/pkg/scheduler/api:go_default_library",
"//plugin/pkg/scheduler/api:go_default_library",
...
...
plugin/pkg/scheduler/algorithm/priorities/selector_spreading.go
View file @
ef686716
...
@@ -39,25 +39,28 @@ const maxPriority float32 = 10
...
@@ -39,25 +39,28 @@ const maxPriority float32 = 10
const
zoneWeighting
=
2.0
/
3.0
const
zoneWeighting
=
2.0
/
3.0
type
SelectorSpread
struct
{
type
SelectorSpread
struct
{
serviceLister
algorithm
.
ServiceLister
serviceLister
algorithm
.
ServiceLister
controllerLister
algorithm
.
ControllerLister
controllerLister
algorithm
.
ControllerLister
replicaSetLister
algorithm
.
ReplicaSetLister
replicaSetLister
algorithm
.
ReplicaSetLister
statefulSetLister
algorithm
.
StatefulSetLister
}
}
func
NewSelectorSpreadPriority
(
func
NewSelectorSpreadPriority
(
serviceLister
algorithm
.
ServiceLister
,
serviceLister
algorithm
.
ServiceLister
,
controllerLister
algorithm
.
ControllerLister
,
controllerLister
algorithm
.
ControllerLister
,
replicaSetLister
algorithm
.
ReplicaSetLister
)
algorithm
.
PriorityFunction
{
replicaSetLister
algorithm
.
ReplicaSetLister
,
statefulSetLister
algorithm
.
StatefulSetLister
)
algorithm
.
PriorityFunction
{
selectorSpread
:=
&
SelectorSpread
{
selectorSpread
:=
&
SelectorSpread
{
serviceLister
:
serviceLister
,
serviceLister
:
serviceLister
,
controllerLister
:
controllerLister
,
controllerLister
:
controllerLister
,
replicaSetLister
:
replicaSetLister
,
replicaSetLister
:
replicaSetLister
,
statefulSetLister
:
statefulSetLister
,
}
}
return
selectorSpread
.
CalculateSpreadPriority
return
selectorSpread
.
CalculateSpreadPriority
}
}
// Returns selectors of services, RCs and RSs matching the given pod.
// Returns selectors of services, RCs and RSs matching the given pod.
func
getSelectors
(
pod
*
v1
.
Pod
,
sl
algorithm
.
ServiceLister
,
cl
algorithm
.
ControllerLister
,
rsl
algorithm
.
ReplicaSetLister
)
[]
labels
.
Selector
{
func
getSelectors
(
pod
*
v1
.
Pod
,
sl
algorithm
.
ServiceLister
,
cl
algorithm
.
ControllerLister
,
rsl
algorithm
.
ReplicaSetLister
,
ssl
algorithm
.
StatefulSetLister
)
[]
labels
.
Selector
{
selectors
:=
make
([]
labels
.
Selector
,
0
,
3
)
selectors
:=
make
([]
labels
.
Selector
,
0
,
3
)
if
services
,
err
:=
sl
.
GetPodServices
(
pod
);
err
==
nil
{
if
services
,
err
:=
sl
.
GetPodServices
(
pod
);
err
==
nil
{
for
_
,
service
:=
range
services
{
for
_
,
service
:=
range
services
{
...
@@ -76,11 +79,18 @@ func getSelectors(pod *v1.Pod, sl algorithm.ServiceLister, cl algorithm.Controll
...
@@ -76,11 +79,18 @@ func getSelectors(pod *v1.Pod, sl algorithm.ServiceLister, cl algorithm.Controll
}
}
}
}
}
}
if
sss
,
err
:=
ssl
.
GetPodStatefulSets
(
pod
);
err
==
nil
{
for
_
,
ss
:=
range
sss
{
if
selector
,
err
:=
metav1
.
LabelSelectorAsSelector
(
ss
.
Spec
.
Selector
);
err
==
nil
{
selectors
=
append
(
selectors
,
selector
)
}
}
}
return
selectors
return
selectors
}
}
func
(
s
*
SelectorSpread
)
getSelectors
(
pod
*
v1
.
Pod
)
[]
labels
.
Selector
{
func
(
s
*
SelectorSpread
)
getSelectors
(
pod
*
v1
.
Pod
)
[]
labels
.
Selector
{
return
getSelectors
(
pod
,
s
.
serviceLister
,
s
.
controllerLister
,
s
.
replicaSetLister
)
return
getSelectors
(
pod
,
s
.
serviceLister
,
s
.
controllerLister
,
s
.
replicaSetLister
,
s
.
statefulSetLister
)
}
}
// CalculateSpreadPriority spreads pods across hosts and zones, considering pods belonging to the same service or replication controller.
// CalculateSpreadPriority spreads pods across hosts and zones, considering pods belonging to the same service or replication controller.
...
...
plugin/pkg/scheduler/algorithm/priorities/selector_spreading_test.go
View file @
ef686716
...
@@ -23,6 +23,7 @@ import (
...
@@ -23,6 +23,7 @@ import (
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1"
apps
"k8s.io/kubernetes/pkg/apis/apps/v1beta1"
extensions
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
extensions
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
schedulerapi
"k8s.io/kubernetes/plugin/pkg/scheduler/api"
schedulerapi
"k8s.io/kubernetes/plugin/pkg/scheduler/api"
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
...
@@ -60,6 +61,7 @@ func TestSelectorSpreadPriority(t *testing.T) {
...
@@ -60,6 +61,7 @@ func TestSelectorSpreadPriority(t *testing.T) {
rcs
[]
*
v1
.
ReplicationController
rcs
[]
*
v1
.
ReplicationController
rss
[]
*
extensions
.
ReplicaSet
rss
[]
*
extensions
.
ReplicaSet
services
[]
*
v1
.
Service
services
[]
*
v1
.
Service
sss
[]
*
apps
.
StatefulSet
expectedList
schedulerapi
.
HostPriorityList
expectedList
schedulerapi
.
HostPriorityList
test
string
test
string
}{
}{
...
@@ -203,6 +205,19 @@ func TestSelectorSpreadPriority(t *testing.T) {
...
@@ -203,6 +205,19 @@ func TestSelectorSpreadPriority(t *testing.T) {
test
:
"service with partial pod label matches with service and replica set"
,
test
:
"service with partial pod label matches with service and replica set"
,
},
},
{
{
pod
:
&
v1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
pods
:
[]
*
v1
.
Pod
{
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels2
}},
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
{
Spec
:
zone2Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
},
nodes
:
[]
string
{
"machine1"
,
"machine2"
},
services
:
[]
*
v1
.
Service
{{
Spec
:
v1
.
ServiceSpec
{
Selector
:
map
[
string
]
string
{
"baz"
:
"blah"
}}}},
sss
:
[]
*
apps
.
StatefulSet
{{
Spec
:
apps
.
StatefulSetSpec
{
Selector
:
&
metav1
.
LabelSelector
{
MatchLabels
:
map
[
string
]
string
{
"foo"
:
"bar"
}}}}},
expectedList
:
[]
schedulerapi
.
HostPriority
{{
Host
:
"machine1"
,
Score
:
0
},
{
Host
:
"machine2"
,
Score
:
5
}},
test
:
"service with partial pod label matches with service and replica set"
,
},
{
pod
:
&
v1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
map
[
string
]
string
{
"foo"
:
"bar"
,
"bar"
:
"foo"
},
OwnerReferences
:
controllerRef
(
"ReplicationController"
,
"name"
,
"abc123"
)}},
pod
:
&
v1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
map
[
string
]
string
{
"foo"
:
"bar"
,
"bar"
:
"foo"
},
OwnerReferences
:
controllerRef
(
"ReplicationController"
,
"name"
,
"abc123"
)}},
pods
:
[]
*
v1
.
Pod
{
pods
:
[]
*
v1
.
Pod
{
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels2
}},
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels2
}},
...
@@ -231,6 +246,19 @@ func TestSelectorSpreadPriority(t *testing.T) {
...
@@ -231,6 +246,19 @@ func TestSelectorSpreadPriority(t *testing.T) {
test
:
"disjoined service and replica set should be treated equally"
,
test
:
"disjoined service and replica set should be treated equally"
,
},
},
{
{
pod
:
&
v1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
map
[
string
]
string
{
"foo"
:
"bar"
,
"bar"
:
"foo"
},
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
pods
:
[]
*
v1
.
Pod
{
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels2
}},
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
{
Spec
:
zone2Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
},
nodes
:
[]
string
{
"machine1"
,
"machine2"
},
services
:
[]
*
v1
.
Service
{{
Spec
:
v1
.
ServiceSpec
{
Selector
:
map
[
string
]
string
{
"bar"
:
"foo"
}}}},
sss
:
[]
*
apps
.
StatefulSet
{{
Spec
:
apps
.
StatefulSetSpec
{
Selector
:
&
metav1
.
LabelSelector
{
MatchLabels
:
map
[
string
]
string
{
"foo"
:
"bar"
}}}}},
expectedList
:
[]
schedulerapi
.
HostPriority
{{
Host
:
"machine1"
,
Score
:
0
},
{
Host
:
"machine2"
,
Score
:
5
}},
test
:
"disjoined service and replica set should be treated equally"
,
},
{
pod
:
&
v1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"ReplicationController"
,
"name"
,
"abc123"
)}},
pod
:
&
v1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"ReplicationController"
,
"name"
,
"abc123"
)}},
pods
:
[]
*
v1
.
Pod
{
pods
:
[]
*
v1
.
Pod
{
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels2
}},
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels2
}},
...
@@ -257,6 +285,19 @@ func TestSelectorSpreadPriority(t *testing.T) {
...
@@ -257,6 +285,19 @@ func TestSelectorSpreadPriority(t *testing.T) {
test
:
"Replica set with partial pod label matches"
,
test
:
"Replica set with partial pod label matches"
,
},
},
{
{
pod
:
&
v1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
pods
:
[]
*
v1
.
Pod
{
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels2
}},
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
{
Spec
:
zone2Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
},
nodes
:
[]
string
{
"machine1"
,
"machine2"
},
sss
:
[]
*
apps
.
StatefulSet
{{
Spec
:
apps
.
StatefulSetSpec
{
Selector
:
&
metav1
.
LabelSelector
{
MatchLabels
:
map
[
string
]
string
{
"foo"
:
"bar"
}}}}},
// We use StatefulSet, instead of ReplicationController. The result should be exactly as above.
expectedList
:
[]
schedulerapi
.
HostPriority
{{
Host
:
"machine1"
,
Score
:
0
},
{
Host
:
"machine2"
,
Score
:
0
}},
test
:
"StatefulSet with partial pod label matches"
,
},
{
pod
:
&
v1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"ReplicationController"
,
"name"
,
"abc123"
)}},
pod
:
&
v1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"ReplicationController"
,
"name"
,
"abc123"
)}},
pods
:
[]
*
v1
.
Pod
{
pods
:
[]
*
v1
.
Pod
{
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels2
,
OwnerReferences
:
controllerRef
(
"ReplicationController"
,
"name"
,
"abc123"
)}},
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels2
,
OwnerReferences
:
controllerRef
(
"ReplicationController"
,
"name"
,
"abc123"
)}},
...
@@ -281,14 +322,28 @@ func TestSelectorSpreadPriority(t *testing.T) {
...
@@ -281,14 +322,28 @@ func TestSelectorSpreadPriority(t *testing.T) {
expectedList
:
[]
schedulerapi
.
HostPriority
{{
Host
:
"machine1"
,
Score
:
0
},
{
Host
:
"machine2"
,
Score
:
5
}},
expectedList
:
[]
schedulerapi
.
HostPriority
{{
Host
:
"machine1"
,
Score
:
0
},
{
Host
:
"machine2"
,
Score
:
5
}},
test
:
"Another replication set with partial pod label matches"
,
test
:
"Another replication set with partial pod label matches"
,
},
},
{
pod
:
&
v1
.
Pod
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
pods
:
[]
*
v1
.
Pod
{
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels2
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
{
Spec
:
zone1Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
{
Spec
:
zone2Spec
,
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels1
,
OwnerReferences
:
controllerRef
(
"StatefulSet"
,
"name"
,
"abc123"
)}},
},
nodes
:
[]
string
{
"machine1"
,
"machine2"
},
sss
:
[]
*
apps
.
StatefulSet
{{
Spec
:
apps
.
StatefulSetSpec
{
Selector
:
&
metav1
.
LabelSelector
{
MatchLabels
:
map
[
string
]
string
{
"baz"
:
"blah"
}}}}},
// We use StatefulSet, instead of ReplicationController. The result should be exactly as above.
expectedList
:
[]
schedulerapi
.
HostPriority
{{
Host
:
"machine1"
,
Score
:
0
},
{
Host
:
"machine2"
,
Score
:
5
}},
test
:
"Another stateful set with partial pod label matches"
,
},
}
}
for
_
,
test
:=
range
tests
{
for
_
,
test
:=
range
tests
{
nodeNameToInfo
:=
schedulercache
.
CreateNodeNameToInfoMap
(
test
.
pods
,
nil
)
nodeNameToInfo
:=
schedulercache
.
CreateNodeNameToInfoMap
(
test
.
pods
,
nil
)
selectorSpread
:=
SelectorSpread
{
selectorSpread
:=
SelectorSpread
{
serviceLister
:
schedulertesting
.
FakeServiceLister
(
test
.
services
),
serviceLister
:
schedulertesting
.
FakeServiceLister
(
test
.
services
),
controllerLister
:
schedulertesting
.
FakeControllerLister
(
test
.
rcs
),
controllerLister
:
schedulertesting
.
FakeControllerLister
(
test
.
rcs
),
replicaSetLister
:
schedulertesting
.
FakeReplicaSetLister
(
test
.
rss
),
replicaSetLister
:
schedulertesting
.
FakeReplicaSetLister
(
test
.
rss
),
statefulSetLister
:
schedulertesting
.
FakeStatefulSetLister
(
test
.
sss
),
}
}
list
,
err
:=
selectorSpread
.
CalculateSpreadPriority
(
test
.
pod
,
nodeNameToInfo
,
makeNodeList
(
test
.
nodes
))
list
,
err
:=
selectorSpread
.
CalculateSpreadPriority
(
test
.
pod
,
nodeNameToInfo
,
makeNodeList
(
test
.
nodes
))
if
err
!=
nil
{
if
err
!=
nil
{
...
@@ -346,6 +401,7 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
...
@@ -346,6 +401,7 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
rcs
[]
*
v1
.
ReplicationController
rcs
[]
*
v1
.
ReplicationController
rss
[]
*
extensions
.
ReplicaSet
rss
[]
*
extensions
.
ReplicaSet
services
[]
*
v1
.
Service
services
[]
*
v1
.
Service
sss
[]
*
apps
.
StatefulSet
expectedList
schedulerapi
.
HostPriorityList
expectedList
schedulerapi
.
HostPriorityList
test
string
test
string
}{
}{
...
@@ -493,9 +549,10 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
...
@@ -493,9 +549,10 @@ func TestZoneSelectorSpreadPriority(t *testing.T) {
for
_
,
test
:=
range
tests
{
for
_
,
test
:=
range
tests
{
nodeNameToInfo
:=
schedulercache
.
CreateNodeNameToInfoMap
(
test
.
pods
,
nil
)
nodeNameToInfo
:=
schedulercache
.
CreateNodeNameToInfoMap
(
test
.
pods
,
nil
)
selectorSpread
:=
SelectorSpread
{
selectorSpread
:=
SelectorSpread
{
serviceLister
:
schedulertesting
.
FakeServiceLister
(
test
.
services
),
serviceLister
:
schedulertesting
.
FakeServiceLister
(
test
.
services
),
controllerLister
:
schedulertesting
.
FakeControllerLister
(
test
.
rcs
),
controllerLister
:
schedulertesting
.
FakeControllerLister
(
test
.
rcs
),
replicaSetLister
:
schedulertesting
.
FakeReplicaSetLister
(
test
.
rss
),
replicaSetLister
:
schedulertesting
.
FakeReplicaSetLister
(
test
.
rss
),
statefulSetLister
:
schedulertesting
.
FakeStatefulSetLister
(
test
.
sss
),
}
}
list
,
err
:=
selectorSpread
.
CalculateSpreadPriority
(
test
.
pod
,
nodeNameToInfo
,
makeLabeledNodeList
(
labeledNodes
))
list
,
err
:=
selectorSpread
.
CalculateSpreadPriority
(
test
.
pod
,
nodeNameToInfo
,
makeLabeledNodeList
(
labeledNodes
))
if
err
!=
nil
{
if
err
!=
nil
{
...
...
plugin/pkg/scheduler/algorithm/types.go
View file @
ef686716
...
@@ -19,6 +19,7 @@ package algorithm
...
@@ -19,6 +19,7 @@ package algorithm
import
(
import
(
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1"
apps
"k8s.io/kubernetes/pkg/apis/apps/v1beta1"
extensions
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
extensions
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
schedulerapi
"k8s.io/kubernetes/plugin/pkg/scheduler/api"
schedulerapi
"k8s.io/kubernetes/plugin/pkg/scheduler/api"
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
"k8s.io/kubernetes/plugin/pkg/scheduler/schedulercache"
...
@@ -127,3 +128,19 @@ type EmptyReplicaSetLister struct{}
...
@@ -127,3 +128,19 @@ type EmptyReplicaSetLister struct{}
func
(
f
EmptyReplicaSetLister
)
GetPodReplicaSets
(
pod
*
v1
.
Pod
)
(
rss
[]
*
extensions
.
ReplicaSet
,
err
error
)
{
func
(
f
EmptyReplicaSetLister
)
GetPodReplicaSets
(
pod
*
v1
.
Pod
)
(
rss
[]
*
extensions
.
ReplicaSet
,
err
error
)
{
return
nil
,
nil
return
nil
,
nil
}
}
// StatefulSetLister interface represents anything that can produce a list of StatefulSet; the list is consumed by a scheduler.
type
StatefulSetLister
interface
{
// Gets the StatefulSet for the given pod.
GetPodStatefulSets
(
*
v1
.
Pod
)
([]
*
apps
.
StatefulSet
,
error
)
}
var
_
StatefulSetLister
=
&
EmptyStatefulSetLister
{}
// EmptyStatefulSetLister implements StatefulSetLister on []apps.StatefulSet returning empty data.
type
EmptyStatefulSetLister
struct
{}
// GetPodStatefulSets of EmptyStatefulSetLister returns nil.
func
(
f
EmptyStatefulSetLister
)
GetPodStatefulSets
(
pod
*
v1
.
Pod
)
(
sss
[]
*
apps
.
StatefulSet
,
err
error
)
{
return
nil
,
nil
}
plugin/pkg/scheduler/algorithmprovider/defaults/compatibility_test.go
View file @
ef686716
...
@@ -356,6 +356,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
...
@@ -356,6 +356,7 @@ func TestCompatibility_v1_Scheduler(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
.
CreateFromConfig
(
policy
);
err
!=
nil
{
)
.
CreateFromConfig
(
policy
);
err
!=
nil
{
...
...
plugin/pkg/scheduler/algorithmprovider/defaults/defaults.go
View file @
ef686716
...
@@ -93,7 +93,7 @@ func init() {
...
@@ -93,7 +93,7 @@ func init() {
"ServiceSpreadingPriority"
,
"ServiceSpreadingPriority"
,
factory
.
PriorityConfigFactory
{
factory
.
PriorityConfigFactory
{
Function
:
func
(
args
factory
.
PluginFactoryArgs
)
algorithm
.
PriorityFunction
{
Function
:
func
(
args
factory
.
PluginFactoryArgs
)
algorithm
.
PriorityFunction
{
return
priorities
.
NewSelectorSpreadPriority
(
args
.
ServiceLister
,
algorithm
.
EmptyControllerLister
{},
algorithm
.
EmptyReplicaSetLister
{})
return
priorities
.
NewSelectorSpreadPriority
(
args
.
ServiceLister
,
algorithm
.
EmptyControllerLister
{},
algorithm
.
EmptyReplicaSetLister
{}
,
algorithm
.
EmptyStatefulSetLister
{}
)
},
},
Weight
:
1
,
Weight
:
1
,
},
},
...
@@ -180,7 +180,7 @@ func defaultPriorities() sets.String {
...
@@ -180,7 +180,7 @@ func defaultPriorities() sets.String {
"SelectorSpreadPriority"
,
"SelectorSpreadPriority"
,
factory
.
PriorityConfigFactory
{
factory
.
PriorityConfigFactory
{
Function
:
func
(
args
factory
.
PluginFactoryArgs
)
algorithm
.
PriorityFunction
{
Function
:
func
(
args
factory
.
PluginFactoryArgs
)
algorithm
.
PriorityFunction
{
return
priorities
.
NewSelectorSpreadPriority
(
args
.
ServiceLister
,
args
.
ControllerLister
,
args
.
ReplicaSetLister
)
return
priorities
.
NewSelectorSpreadPriority
(
args
.
ServiceLister
,
args
.
ControllerLister
,
args
.
ReplicaSetLister
,
args
.
StatefulSetLister
)
},
},
Weight
:
1
,
Weight
:
1
,
},
},
...
...
plugin/pkg/scheduler/core/BUILD
View file @
ef686716
...
@@ -18,6 +18,7 @@ go_test(
...
@@ -18,6 +18,7 @@ go_test(
tags = ["automanaged"],
tags = ["automanaged"],
deps = [
deps = [
"//pkg/api/v1:go_default_library",
"//pkg/api/v1:go_default_library",
"//pkg/apis/apps/v1beta1:go_default_library",
"//pkg/apis/extensions/v1beta1:go_default_library",
"//pkg/apis/extensions/v1beta1:go_default_library",
"//plugin/pkg/scheduler/algorithm:go_default_library",
"//plugin/pkg/scheduler/algorithm:go_default_library",
"//plugin/pkg/scheduler/algorithm/predicates:go_default_library",
"//plugin/pkg/scheduler/algorithm/predicates:go_default_library",
...
...
plugin/pkg/scheduler/core/generic_scheduler_test.go
View file @
ef686716
...
@@ -30,6 +30,7 @@ import (
...
@@ -30,6 +30,7 @@ import (
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1"
apps
"k8s.io/kubernetes/pkg/apis/apps/v1beta1"
extensions
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
extensions
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
algorithmpredicates
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
algorithmpredicates
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm/predicates"
...
@@ -518,7 +519,8 @@ func TestZeroRequest(t *testing.T) {
...
@@ -518,7 +519,8 @@ func TestZeroRequest(t *testing.T) {
Function
:
algorithmpriorities
.
NewSelectorSpreadPriority
(
Function
:
algorithmpriorities
.
NewSelectorSpreadPriority
(
schedulertesting
.
FakeServiceLister
([]
*
v1
.
Service
{}),
schedulertesting
.
FakeServiceLister
([]
*
v1
.
Service
{}),
schedulertesting
.
FakeControllerLister
([]
*
v1
.
ReplicationController
{}),
schedulertesting
.
FakeControllerLister
([]
*
v1
.
ReplicationController
{}),
schedulertesting
.
FakeReplicaSetLister
([]
*
extensions
.
ReplicaSet
{})),
schedulertesting
.
FakeReplicaSetLister
([]
*
extensions
.
ReplicaSet
{}),
schedulertesting
.
FakeStatefulSetLister
([]
*
apps
.
StatefulSet
{})),
Weight
:
1
,
Weight
:
1
,
},
},
}
}
...
...
plugin/pkg/scheduler/factory/BUILD
View file @
ef686716
...
@@ -18,8 +18,10 @@ go_library(
...
@@ -18,8 +18,10 @@ go_library(
deps = [
deps = [
"//pkg/api/v1:go_default_library",
"//pkg/api/v1:go_default_library",
"//pkg/client/clientset_generated/clientset:go_default_library",
"//pkg/client/clientset_generated/clientset:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/apps/v1beta1:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/core/v1:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/core/v1:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/extensions/v1beta1:go_default_library",
"//pkg/client/informers/informers_generated/externalversions/extensions/v1beta1:go_default_library",
"//pkg/client/listers/apps/v1beta1:go_default_library",
"//pkg/client/listers/core/v1:go_default_library",
"//pkg/client/listers/core/v1:go_default_library",
"//pkg/client/listers/extensions/v1beta1:go_default_library",
"//pkg/client/listers/extensions/v1beta1:go_default_library",
"//plugin/pkg/scheduler:go_default_library",
"//plugin/pkg/scheduler:go_default_library",
...
...
plugin/pkg/scheduler/factory/factory.go
View file @
ef686716
...
@@ -33,8 +33,10 @@ import (
...
@@ -33,8 +33,10 @@ import (
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/cache"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
appsinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/apps/v1beta1"
coreinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/core/v1"
coreinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/core/v1"
extensionsinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/extensions/v1beta1"
extensionsinformers
"k8s.io/kubernetes/pkg/client/informers/informers_generated/externalversions/extensions/v1beta1"
appslisters
"k8s.io/kubernetes/pkg/client/listers/apps/v1beta1"
corelisters
"k8s.io/kubernetes/pkg/client/listers/core/v1"
corelisters
"k8s.io/kubernetes/pkg/client/listers/core/v1"
extensionslisters
"k8s.io/kubernetes/pkg/client/listers/extensions/v1beta1"
extensionslisters
"k8s.io/kubernetes/pkg/client/listers/extensions/v1beta1"
"k8s.io/kubernetes/plugin/pkg/scheduler"
"k8s.io/kubernetes/plugin/pkg/scheduler"
...
@@ -74,6 +76,8 @@ type ConfigFactory struct {
...
@@ -74,6 +76,8 @@ type ConfigFactory struct {
controllerLister
corelisters
.
ReplicationControllerLister
controllerLister
corelisters
.
ReplicationControllerLister
// a means to list all replicasets
// a means to list all replicasets
replicaSetLister
extensionslisters
.
ReplicaSetLister
replicaSetLister
extensionslisters
.
ReplicaSetLister
// a means to list all statefulsets
statefulSetLister
appslisters
.
StatefulSetLister
// Close this to stop all reflectors
// Close this to stop all reflectors
StopEverything
chan
struct
{}
StopEverything
chan
struct
{}
...
@@ -105,6 +109,7 @@ func NewConfigFactory(
...
@@ -105,6 +109,7 @@ func NewConfigFactory(
pvcInformer
coreinformers
.
PersistentVolumeClaimInformer
,
pvcInformer
coreinformers
.
PersistentVolumeClaimInformer
,
replicationControllerInformer
coreinformers
.
ReplicationControllerInformer
,
replicationControllerInformer
coreinformers
.
ReplicationControllerInformer
,
replicaSetInformer
extensionsinformers
.
ReplicaSetInformer
,
replicaSetInformer
extensionsinformers
.
ReplicaSetInformer
,
statefulSetInformer
appsinformers
.
StatefulSetInformer
,
serviceInformer
coreinformers
.
ServiceInformer
,
serviceInformer
coreinformers
.
ServiceInformer
,
hardPodAffinitySymmetricWeight
int
,
hardPodAffinitySymmetricWeight
int
,
)
scheduler
.
Configurator
{
)
scheduler
.
Configurator
{
...
@@ -120,6 +125,7 @@ func NewConfigFactory(
...
@@ -120,6 +125,7 @@ func NewConfigFactory(
serviceLister
:
serviceInformer
.
Lister
(),
serviceLister
:
serviceInformer
.
Lister
(),
controllerLister
:
replicationControllerInformer
.
Lister
(),
controllerLister
:
replicationControllerInformer
.
Lister
(),
replicaSetLister
:
replicaSetInformer
.
Lister
(),
replicaSetLister
:
replicaSetInformer
.
Lister
(),
statefulSetLister
:
statefulSetInformer
.
Lister
(),
schedulerCache
:
schedulerCache
,
schedulerCache
:
schedulerCache
,
StopEverything
:
stopEverything
,
StopEverything
:
stopEverything
,
schedulerName
:
schedulerName
,
schedulerName
:
schedulerName
,
...
@@ -426,10 +432,11 @@ func (f *ConfigFactory) GetPredicates(predicateKeys sets.String) (map[string]alg
...
@@ -426,10 +432,11 @@ func (f *ConfigFactory) GetPredicates(predicateKeys sets.String) (map[string]alg
func
(
f
*
ConfigFactory
)
getPluginArgs
()
(
*
PluginFactoryArgs
,
error
)
{
func
(
f
*
ConfigFactory
)
getPluginArgs
()
(
*
PluginFactoryArgs
,
error
)
{
return
&
PluginFactoryArgs
{
return
&
PluginFactoryArgs
{
PodLister
:
f
.
podLister
,
PodLister
:
f
.
podLister
,
ServiceLister
:
f
.
serviceLister
,
ServiceLister
:
f
.
serviceLister
,
ControllerLister
:
f
.
controllerLister
,
ControllerLister
:
f
.
controllerLister
,
ReplicaSetLister
:
f
.
replicaSetLister
,
ReplicaSetLister
:
f
.
replicaSetLister
,
StatefulSetLister
:
f
.
statefulSetLister
,
// All fit predicates only need to consider schedulable nodes.
// All fit predicates only need to consider schedulable nodes.
NodeLister
:
&
nodePredicateLister
{
f
.
nodeLister
},
NodeLister
:
&
nodePredicateLister
{
f
.
nodeLister
},
NodeInfo
:
&
predicates
.
CachedNodeInfo
{
NodeLister
:
f
.
nodeLister
},
NodeInfo
:
&
predicates
.
CachedNodeInfo
{
NodeLister
:
f
.
nodeLister
},
...
...
plugin/pkg/scheduler/factory/factory_test.go
View file @
ef686716
...
@@ -59,6 +59,7 @@ func TestCreate(t *testing.T) {
...
@@ -59,6 +59,7 @@ func TestCreate(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
@@ -88,6 +89,7 @@ func TestCreateFromConfig(t *testing.T) {
...
@@ -88,6 +89,7 @@ func TestCreateFromConfig(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
@@ -140,6 +142,7 @@ func TestCreateFromEmptyConfig(t *testing.T) {
...
@@ -140,6 +142,7 @@ func TestCreateFromEmptyConfig(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
@@ -194,6 +197,7 @@ func TestDefaultErrorFunc(t *testing.T) {
...
@@ -194,6 +197,7 @@ func TestDefaultErrorFunc(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
@@ -302,6 +306,7 @@ func TestResponsibleForPod(t *testing.T) {
...
@@ -302,6 +306,7 @@ func TestResponsibleForPod(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
@@ -314,6 +319,7 @@ func TestResponsibleForPod(t *testing.T) {
...
@@ -314,6 +319,7 @@ func TestResponsibleForPod(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
@@ -381,6 +387,7 @@ func TestInvalidHardPodAffinitySymmetricWeight(t *testing.T) {
...
@@ -381,6 +387,7 @@ func TestInvalidHardPodAffinitySymmetricWeight(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
-
1
,
-
1
,
)
)
...
@@ -424,6 +431,7 @@ func TestInvalidFactoryArgs(t *testing.T) {
...
@@ -424,6 +431,7 @@ func TestInvalidFactoryArgs(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
test
.
hardPodAffinitySymmetricWeight
,
test
.
hardPodAffinitySymmetricWeight
,
)
)
...
...
plugin/pkg/scheduler/factory/plugins.go
View file @
ef686716
...
@@ -38,6 +38,7 @@ type PluginFactoryArgs struct {
...
@@ -38,6 +38,7 @@ type PluginFactoryArgs struct {
ServiceLister
algorithm
.
ServiceLister
ServiceLister
algorithm
.
ServiceLister
ControllerLister
algorithm
.
ControllerLister
ControllerLister
algorithm
.
ControllerLister
ReplicaSetLister
algorithm
.
ReplicaSetLister
ReplicaSetLister
algorithm
.
ReplicaSetLister
StatefulSetLister
algorithm
.
StatefulSetLister
NodeLister
algorithm
.
NodeLister
NodeLister
algorithm
.
NodeLister
NodeInfo
predicates
.
NodeInfo
NodeInfo
predicates
.
NodeInfo
PVInfo
predicates
.
PersistentVolumeInfo
PVInfo
predicates
.
PersistentVolumeInfo
...
...
plugin/pkg/scheduler/testing/BUILD
View file @
ef686716
...
@@ -17,6 +17,7 @@ go_library(
...
@@ -17,6 +17,7 @@ go_library(
tags = ["automanaged"],
tags = ["automanaged"],
deps = [
deps = [
"//pkg/api/v1:go_default_library",
"//pkg/api/v1:go_default_library",
"//pkg/apis/apps/v1beta1:go_default_library",
"//pkg/apis/extensions/v1beta1:go_default_library",
"//pkg/apis/extensions/v1beta1:go_default_library",
"//plugin/pkg/scheduler/algorithm:go_default_library",
"//plugin/pkg/scheduler/algorithm:go_default_library",
"//plugin/pkg/scheduler/schedulercache:go_default_library",
"//plugin/pkg/scheduler/schedulercache:go_default_library",
...
...
plugin/pkg/scheduler/testing/fake_lister.go
View file @
ef686716
...
@@ -22,6 +22,7 @@ import (
...
@@ -22,6 +22,7 @@ import (
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/apimachinery/pkg/labels"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/api/v1"
apps
"k8s.io/kubernetes/pkg/apis/apps/v1beta1"
extensions
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
extensions
"k8s.io/kubernetes/pkg/apis/extensions/v1beta1"
.
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
.
"k8s.io/kubernetes/plugin/pkg/scheduler/algorithm"
)
)
...
@@ -138,3 +139,30 @@ func (f FakeReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*extensions.
...
@@ -138,3 +139,30 @@ func (f FakeReplicaSetLister) GetPodReplicaSets(pod *v1.Pod) (rss []*extensions.
return
return
}
}
var
_
StatefulSetLister
=
&
FakeStatefulSetLister
{}
// FakeStatefulSetLister implements ControllerLister on []apps.StatefulSet for testing purposes.
type
FakeStatefulSetLister
[]
*
apps
.
StatefulSet
// GetPodStatefulSets gets the StatefulSets that have the selector that match the labels on the given pod.
func
(
f
FakeStatefulSetLister
)
GetPodStatefulSets
(
pod
*
v1
.
Pod
)
(
sss
[]
*
apps
.
StatefulSet
,
err
error
)
{
var
selector
labels
.
Selector
for
_
,
ss
:=
range
f
{
if
ss
.
Namespace
!=
pod
.
Namespace
{
continue
}
selector
,
err
=
metav1
.
LabelSelectorAsSelector
(
ss
.
Spec
.
Selector
)
if
err
!=
nil
{
return
}
if
selector
.
Matches
(
labels
.
Set
(
pod
.
Labels
))
{
sss
=
append
(
sss
,
ss
)
}
}
if
len
(
sss
)
==
0
{
err
=
fmt
.
Errorf
(
"Could not find StatefulSet for pod %s in namespace %s with labels: %v"
,
pod
.
Name
,
pod
.
Namespace
,
pod
.
Labels
)
}
return
}
test/integration/scheduler/extender_test.go
View file @
ef686716
...
@@ -326,6 +326,7 @@ func TestSchedulerExtender(t *testing.T) {
...
@@ -326,6 +326,7 @@ func TestSchedulerExtender(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
...
test/integration/scheduler/scheduler_test.go
View file @
ef686716
...
@@ -71,6 +71,7 @@ func TestUnschedulableNodes(t *testing.T) {
...
@@ -71,6 +71,7 @@ func TestUnschedulableNodes(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
@@ -352,6 +353,7 @@ func TestMultiScheduler(t *testing.T) {
...
@@ -352,6 +353,7 @@ func TestMultiScheduler(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
@@ -435,6 +437,7 @@ func TestMultiScheduler(t *testing.T) {
...
@@ -435,6 +437,7 @@ func TestMultiScheduler(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
@@ -542,6 +545,7 @@ func TestAllocatable(t *testing.T) {
...
@@ -542,6 +545,7 @@ func TestAllocatable(t *testing.T) {
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
...
test/integration/scheduler_perf/util.go
View file @
ef686716
...
@@ -69,6 +69,7 @@ func mustSetupScheduler() (schedulerConfigurator scheduler.Configurator, destroy
...
@@ -69,6 +69,7 @@ func mustSetupScheduler() (schedulerConfigurator scheduler.Configurator, destroy
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
PersistentVolumeClaims
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Core
()
.
V1
()
.
ReplicationControllers
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Extensions
()
.
V1beta1
()
.
ReplicaSets
(),
informerFactory
.
Apps
()
.
V1beta1
()
.
StatefulSets
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
informerFactory
.
Core
()
.
V1
()
.
Services
(),
v1
.
DefaultHardPodAffinitySymmetricWeight
,
v1
.
DefaultHardPodAffinitySymmetricWeight
,
)
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment