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
66bf4811
Unverified
Commit
66bf4811
authored
Dec 27, 2018
by
Kubernetes Prow Robot
Committed by
GitHub
Dec 27, 2018
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #72382 from liggitt/volumescheduling-ga
Stop checking VolumeScheduling feature gate
parents
c20aca07
73dcfe12
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
42 changed files
with
60 additions
and
384 deletions
+60
-384
BUILD
cmd/kube-scheduler/app/BUILD
+0
-3
server.go
cmd/kube-scheduler/app/server.go
+2
-15
validation.go
pkg/apis/core/validation/validation.go
+0
-11
validation_test.go
pkg/apis/core/validation/validation_test.go
+0
-13
BUILD
pkg/apis/storage/util/BUILD
+0
-1
util.go
pkg/apis/storage/util/util.go
+0
-8
util_test.go
pkg/apis/storage/util/util_test.go
+0
-43
BUILD
pkg/apis/storage/v1/BUILD
+0
-5
defaults.go
pkg/apis/storage/v1/defaults.go
+1
-3
defaults_test.go
pkg/apis/storage/v1/defaults_test.go
+1
-13
BUILD
pkg/apis/storage/v1beta1/BUILD
+0
-5
defaults.go
pkg/apis/storage/v1beta1/defaults.go
+1
-3
defaults_test.go
pkg/apis/storage/v1beta1/defaults_test.go
+1
-14
BUILD
pkg/apis/storage/validation/BUILD
+0
-5
validation.go
pkg/apis/storage/validation/validation.go
+0
-10
validation_test.go
pkg/apis/storage/validation/validation_test.go
+0
-32
BUILD
pkg/controller/cloud/BUILD
+0
-5
pvlcontroller.go
pkg/controller/cloud/pvlcontroller.go
+1
-3
pvlcontroller_test.go
pkg/controller/cloud/pvlcontroller_test.go
+0
-6
pv_controller.go
pkg/controller/volume/persistentvolume/pv_controller.go
+0
-4
pv_controller_test.go
pkg/controller/volume/persistentvolume/pv_controller_test.go
+0
-24
kube_features.go
pkg/features/kube_features.go
+2
-2
BUILD
pkg/scheduler/BUILD
+0
-5
predicates.go
pkg/scheduler/algorithm/predicates/predicates.go
+0
-6
predicates_test.go
pkg/scheduler/algorithm/predicates/predicates_test.go
+0
-5
BUILD
pkg/scheduler/factory/BUILD
+0
-2
factory.go
pkg/scheduler/factory/factory.go
+0
-7
scheduler.go
pkg/scheduler/scheduler.go
+0
-4
scheduler_test.go
pkg/scheduler/scheduler_test.go
+0
-5
aws_ebs.go
pkg/volume/awsebs/aws_ebs.go
+0
-2
azure_provision.go
pkg/volume/azure_dd/azure_provision.go
+0
-2
cinder.go
pkg/volume/cinder/cinder.go
+0
-2
gce_pd.go
pkg/volume/gcepd/gce_pd.go
+1
-1
BUILD
pkg/volume/util/BUILD
+0
-3
util_test.go
pkg/volume/util/util_test.go
+0
-81
BUILD
plugin/pkg/admission/storage/persistentvolume/label/BUILD
+0
-5
admission.go
...pkg/admission/storage/persistentvolume/label/admission.go
+0
-4
admission_test.go
...dmission/storage/persistentvolume/label/admission_test.go
+0
-5
policy.go
plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go
+3
-9
feature_gate.go
...ing/src/k8s.io/apiserver/pkg/util/feature/feature_gate.go
+7
-0
feature_gate_test.go
...rc/k8s.io/apiserver/pkg/util/feature/feature_gate_test.go
+40
-1
volume_binding_test.go
test/integration/scheduler/volume_binding_test.go
+0
-7
No files found.
cmd/kube-scheduler/app/BUILD
View file @
66bf4811
...
...
@@ -14,7 +14,6 @@ go_library(
"//cmd/kube-scheduler/app/options:go_default_library",
"//pkg/api/legacyscheme:go_default_library",
"//pkg/controller:go_default_library",
"//pkg/features:go_default_library",
"//pkg/scheduler:go_default_library",
"//pkg/scheduler/algorithmprovider:go_default_library",
"//pkg/scheduler/api:go_default_library",
...
...
@@ -38,10 +37,8 @@ go_library(
"//staging/src/k8s.io/apiserver/pkg/server/healthz:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/server/mux:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/server/routes:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/flag:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/globalflag:go_default_library",
"//staging/src/k8s.io/client-go/informers/storage/v1:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/typed/core/v1:go_default_library",
"//staging/src/k8s.io/client-go/tools/leaderelection:go_default_library",
"//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
...
...
cmd/kube-scheduler/app/server.go
View file @
66bf4811
...
...
@@ -38,17 +38,14 @@ import (
"k8s.io/apiserver/pkg/server/healthz"
"k8s.io/apiserver/pkg/server/mux"
"k8s.io/apiserver/pkg/server/routes"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
apiserverflag
"k8s.io/apiserver/pkg/util/flag"
"k8s.io/apiserver/pkg/util/globalflag"
storageinformers
"k8s.io/client-go/informers/storage/v1"
v1core
"k8s.io/client-go/kubernetes/typed/core/v1"
"k8s.io/client-go/tools/leaderelection"
schedulerserverconfig
"k8s.io/kubernetes/cmd/kube-scheduler/app/config"
"k8s.io/kubernetes/cmd/kube-scheduler/app/options"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/scheduler"
"k8s.io/kubernetes/pkg/scheduler/algorithmprovider"
schedulerapi
"k8s.io/kubernetes/pkg/scheduler/api"
...
...
@@ -165,11 +162,6 @@ func runCommand(cmd *cobra.Command, args []string, opts *options.Options) error
// Run executes the scheduler based on the given configuration. It only return on error or when stopCh is closed.
func
Run
(
cc
schedulerserverconfig
.
CompletedConfig
,
stopCh
<-
chan
struct
{})
error
{
var
storageClassInformer
storageinformers
.
StorageClassInformer
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
storageClassInformer
=
cc
.
InformerFactory
.
Storage
()
.
V1
()
.
StorageClasses
()
}
// Create the scheduler.
sched
,
err
:=
scheduler
.
New
(
cc
.
Client
,
cc
.
InformerFactory
.
Core
()
.
V1
()
.
Nodes
(),
...
...
@@ -181,7 +173,7 @@ func Run(cc schedulerserverconfig.CompletedConfig, stopCh <-chan struct{}) error
cc
.
InformerFactory
.
Apps
()
.
V1
()
.
StatefulSets
(),
cc
.
InformerFactory
.
Core
()
.
V1
()
.
Services
(),
cc
.
InformerFactory
.
Policy
()
.
V1beta1
()
.
PodDisruptionBudgets
(),
storageClassInformer
,
cc
.
InformerFactory
.
Storage
()
.
V1
()
.
StorageClasses
()
,
cc
.
Recorder
,
cc
.
ComponentConfig
.
AlgorithmSource
,
stopCh
,
...
...
@@ -335,11 +327,6 @@ func newHealthzHandler(config *kubeschedulerconfig.KubeSchedulerConfiguration, s
// NewSchedulerConfig creates the scheduler configuration. This is exposed for use by tests.
func
NewSchedulerConfig
(
s
schedulerserverconfig
.
CompletedConfig
)
(
*
factory
.
Config
,
error
)
{
var
storageClassInformer
storageinformers
.
StorageClassInformer
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
storageClassInformer
=
s
.
InformerFactory
.
Storage
()
.
V1
()
.
StorageClasses
()
}
// Set up the configurator which can create schedulers from configs.
configurator
:=
factory
.
NewConfigFactory
(
&
factory
.
ConfigFactoryArgs
{
SchedulerName
:
s
.
ComponentConfig
.
SchedulerName
,
...
...
@@ -353,7 +340,7 @@ func NewSchedulerConfig(s schedulerserverconfig.CompletedConfig) (*factory.Confi
StatefulSetInformer
:
s
.
InformerFactory
.
Apps
()
.
V1
()
.
StatefulSets
(),
ServiceInformer
:
s
.
InformerFactory
.
Core
()
.
V1
()
.
Services
(),
PdbInformer
:
s
.
InformerFactory
.
Policy
()
.
V1beta1
()
.
PodDisruptionBudgets
(),
StorageClassInformer
:
s
torageClassInformer
,
StorageClassInformer
:
s
.
InformerFactory
.
Storage
()
.
V1
()
.
StorageClasses
()
,
HardPodAffinitySymmetricWeight
:
s
.
ComponentConfig
.
HardPodAffinitySymmetricWeight
,
DisablePreemption
:
s
.
ComponentConfig
.
DisablePreemption
,
PercentageOfNodesToScore
:
s
.
ComponentConfig
.
PercentageOfNodesToScore
,
...
...
pkg/apis/core/validation/validation.go
View file @
66bf4811
...
...
@@ -1777,12 +1777,10 @@ func ValidatePersistentVolumeUpdate(newPv, oldPv *core.PersistentVolume) field.E
allErrs
=
append
(
allErrs
,
ValidateImmutableField
(
newPv
.
Spec
.
VolumeMode
,
oldPv
.
Spec
.
VolumeMode
,
field
.
NewPath
(
"volumeMode"
))
...
)
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
// Allow setting NodeAffinity if oldPv NodeAffinity was not set
if
oldPv
.
Spec
.
NodeAffinity
!=
nil
{
allErrs
=
append
(
allErrs
,
ValidateImmutableField
(
newPv
.
Spec
.
NodeAffinity
,
oldPv
.
Spec
.
NodeAffinity
,
field
.
NewPath
(
"nodeAffinity"
))
...
)
}
}
return
allErrs
}
...
...
@@ -3160,9 +3158,7 @@ func ValidateTopologySelectorTerm(term core.TopologySelectorTerm, fldPath *field
exprMap
:=
make
(
map
[
string
]
sets
.
String
)
exprPath
:=
fldPath
.
Child
(
"matchLabelExpressions"
)
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
// Allow empty MatchLabelExpressions, in case this field becomes optional in the future.
for
i
,
req
:=
range
term
.
MatchLabelExpressions
{
idxPath
:=
exprPath
.
Index
(
i
)
valueSet
,
exprErrs
:=
validateTopologySelectorLabelRequirement
(
req
,
idxPath
)
...
...
@@ -3174,9 +3170,6 @@ func ValidateTopologySelectorTerm(term core.TopologySelectorTerm, fldPath *field
}
exprMap
[
req
.
Key
]
=
valueSet
}
}
else
if
len
(
term
.
MatchLabelExpressions
)
!=
0
{
allErrs
=
append
(
allErrs
,
field
.
Forbidden
(
fldPath
,
"field is disabled by feature-gate VolumeScheduling"
))
}
return
exprMap
,
allErrs
}
...
...
@@ -5319,10 +5312,6 @@ func validateVolumeNodeAffinity(nodeAffinity *core.VolumeNodeAffinity, fldPath *
return
false
,
allErrs
}
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
allErrs
=
append
(
allErrs
,
field
.
Forbidden
(
fldPath
,
"Volume node affinity is disabled by feature-gate"
))
}
if
nodeAffinity
.
Required
!=
nil
{
allErrs
=
append
(
allErrs
,
ValidateNodeSelector
(
nodeAffinity
.
Required
,
fldPath
.
Child
(
"required"
))
...
)
}
else
{
...
...
pkg/apis/core/validation/validation_test.go
View file @
66bf4811
...
...
@@ -577,19 +577,6 @@ func TestValidateLocalVolumesDisabled(t *testing.T) {
}
})
}
for
name
,
scenario
:=
range
scenarios
{
t
.
Run
(
name
+
" VolumeScheduling disabled"
,
func
(
t
*
testing
.
T
)
{
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
false
)()
errs
:=
ValidatePersistentVolume
(
scenario
.
volume
)
if
len
(
errs
)
==
0
&&
scenario
.
isExpectedFailure
{
t
.
Errorf
(
"Unexpected success for scenario: %s"
,
name
)
}
if
len
(
errs
)
>
0
&&
!
scenario
.
isExpectedFailure
{
t
.
Errorf
(
"Unexpected failure for scenario: %s - %+v"
,
name
,
errs
)
}
})
}
}
func
testVolumeWithNodeAffinity
(
affinity
*
core
.
VolumeNodeAffinity
)
*
core
.
PersistentVolume
{
...
...
pkg/apis/storage/util/BUILD
View file @
66bf4811
...
...
@@ -39,7 +39,6 @@ go_test(
srcs = ["util_test.go"],
embed = [":go_default_library"],
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/storage:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
...
...
pkg/apis/storage/util/util.go
View file @
66bf4811
...
...
@@ -24,14 +24,6 @@ import (
// DropDisabledFields removes disabled fields from the StorageClass object.
func
DropDisabledFields
(
class
,
oldClass
*
storage
.
StorageClass
)
{
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
class
.
VolumeBindingMode
=
nil
class
.
AllowedTopologies
=
nil
if
oldClass
!=
nil
{
oldClass
.
VolumeBindingMode
=
nil
oldClass
.
AllowedTopologies
=
nil
}
}
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
ExpandPersistentVolumes
)
&&
!
allowVolumeExpansionInUse
(
oldClass
)
{
class
.
AllowVolumeExpansion
=
nil
}
...
...
pkg/apis/storage/util/util_test.go
View file @
66bf4811
...
...
@@ -24,53 +24,10 @@ import (
"k8s.io/apimachinery/pkg/util/diff"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/features"
)
func
TestDropAlphaFields
(
t
*
testing
.
T
)
{
bindingMode
:=
storage
.
VolumeBindingWaitForFirstConsumer
allowedTopologies
:=
[]
api
.
TopologySelectorTerm
{
{
MatchLabelExpressions
:
[]
api
.
TopologySelectorLabelRequirement
{
{
Key
:
"kubernetes.io/hostname"
,
Values
:
[]
string
{
"node1"
},
},
},
},
}
// Test that field gets dropped when feature gate is not set
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
false
)()
class
:=
&
storage
.
StorageClass
{
VolumeBindingMode
:
&
bindingMode
,
AllowedTopologies
:
allowedTopologies
,
}
DropDisabledFields
(
class
,
nil
)
if
class
.
VolumeBindingMode
!=
nil
{
t
.
Errorf
(
"VolumeBindingMode field didn't get dropped: %+v"
,
class
.
VolumeBindingMode
)
}
if
class
.
AllowedTopologies
!=
nil
{
t
.
Errorf
(
"AllowedTopologies field didn't get dropped: %+v"
,
class
.
AllowedTopologies
)
}
// Test that field does not get dropped when feature gate is set
class
=
&
storage
.
StorageClass
{
VolumeBindingMode
:
&
bindingMode
,
AllowedTopologies
:
allowedTopologies
,
}
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
DropDisabledFields
(
class
,
nil
)
if
class
.
VolumeBindingMode
!=
&
bindingMode
{
t
.
Errorf
(
"VolumeBindingMode field got unexpectantly modified: %+v"
,
class
.
VolumeBindingMode
)
}
if
!
reflect
.
DeepEqual
(
class
.
AllowedTopologies
,
allowedTopologies
)
{
t
.
Errorf
(
"AllowedTopologies field got unexpectantly modified: %+v"
,
class
.
AllowedTopologies
)
}
}
func
TestDropAllowVolumeExpansion
(
t
*
testing
.
T
)
{
allowVolumeExpansion
:=
false
scWithoutAllowVolumeExpansion
:=
func
()
*
storage
.
StorageClass
{
...
...
pkg/apis/storage/v1/BUILD
View file @
66bf4811
...
...
@@ -19,13 +19,11 @@ go_library(
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/storage:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/api/storage/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
],
)
...
...
@@ -52,10 +50,7 @@ go_test(
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//pkg/apis/storage/install:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/api/storage/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
],
)
pkg/apis/storage/v1/defaults.go
View file @
66bf4811
...
...
@@ -20,8 +20,6 @@ import (
"k8s.io/api/core/v1"
storagev1
"k8s.io/api/storage/v1"
"k8s.io/apimachinery/pkg/runtime"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
"k8s.io/kubernetes/pkg/features"
)
func
addDefaultingFuncs
(
scheme
*
runtime
.
Scheme
)
error
{
...
...
@@ -34,7 +32,7 @@ func SetDefaults_StorageClass(obj *storagev1.StorageClass) {
*
obj
.
ReclaimPolicy
=
v1
.
PersistentVolumeReclaimDelete
}
if
obj
.
VolumeBindingMode
==
nil
&&
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
if
obj
.
VolumeBindingMode
==
nil
{
obj
.
VolumeBindingMode
=
new
(
storagev1
.
VolumeBindingMode
)
*
obj
.
VolumeBindingMode
=
storagev1
.
VolumeBindingImmediate
}
...
...
pkg/apis/storage/v1/defaults_test.go
View file @
66bf4811
...
...
@@ -22,11 +22,8 @@ import (
storagev1
"k8s.io/api/storage/v1"
"k8s.io/apimachinery/pkg/runtime"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/kubernetes/pkg/api/legacyscheme"
_
"k8s.io/kubernetes/pkg/apis/storage/install"
"k8s.io/kubernetes/pkg/features"
)
func
roundTrip
(
t
*
testing
.
T
,
obj
runtime
.
Object
)
runtime
.
Object
{
...
...
@@ -53,7 +50,7 @@ func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
func
TestSetDefaultVolumeBindingMode
(
t
*
testing
.
T
)
{
class
:=
&
storagev1
.
StorageClass
{}
//
When feature gate is enabled,
field should be defaulted
// field should be defaulted
defaultMode
:=
storagev1
.
VolumeBindingImmediate
output
:=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1
.
StorageClass
)
outMode
:=
output
.
VolumeBindingMode
...
...
@@ -62,13 +59,4 @@ func TestSetDefaultVolumeBindingMode(t *testing.T) {
}
else
if
*
outMode
!=
defaultMode
{
t
.
Errorf
(
"Expected VolumeBindingMode to be defaulted to: %+v, got: %+v"
,
defaultMode
,
outMode
)
}
class
=
&
storagev1
.
StorageClass
{}
// When feature gate is disabled, field should not be defaulted
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
false
)()
output
=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1
.
StorageClass
)
if
output
.
VolumeBindingMode
!=
nil
{
t
.
Errorf
(
"Expected VolumeBindingMode to not be defaulted, got: %+v"
,
output
.
VolumeBindingMode
)
}
}
pkg/apis/storage/v1beta1/BUILD
View file @
66bf4811
...
...
@@ -19,13 +19,11 @@ go_library(
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/storage:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/api/storage/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
],
)
...
...
@@ -52,10 +50,7 @@ go_test(
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//pkg/apis/storage/install:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/api/storage/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
],
)
pkg/apis/storage/v1beta1/defaults.go
View file @
66bf4811
...
...
@@ -20,8 +20,6 @@ import (
"k8s.io/api/core/v1"
storagev1beta1
"k8s.io/api/storage/v1beta1"
"k8s.io/apimachinery/pkg/runtime"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
"k8s.io/kubernetes/pkg/features"
)
func
addDefaultingFuncs
(
scheme
*
runtime
.
Scheme
)
error
{
...
...
@@ -34,7 +32,7 @@ func SetDefaults_StorageClass(obj *storagev1beta1.StorageClass) {
*
obj
.
ReclaimPolicy
=
v1
.
PersistentVolumeReclaimDelete
}
if
obj
.
VolumeBindingMode
==
nil
&&
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
if
obj
.
VolumeBindingMode
==
nil
{
obj
.
VolumeBindingMode
=
new
(
storagev1beta1
.
VolumeBindingMode
)
*
obj
.
VolumeBindingMode
=
storagev1beta1
.
VolumeBindingImmediate
}
...
...
pkg/apis/storage/v1beta1/defaults_test.go
View file @
66bf4811
...
...
@@ -22,11 +22,8 @@ import (
storagev1beta1
"k8s.io/api/storage/v1beta1"
"k8s.io/apimachinery/pkg/runtime"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/kubernetes/pkg/api/legacyscheme"
_
"k8s.io/kubernetes/pkg/apis/storage/install"
"k8s.io/kubernetes/pkg/features"
)
func
roundTrip
(
t
*
testing
.
T
,
obj
runtime
.
Object
)
runtime
.
Object
{
...
...
@@ -53,7 +50,7 @@ func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
func
TestSetDefaultVolumeBindingMode
(
t
*
testing
.
T
)
{
class
:=
&
storagev1beta1
.
StorageClass
{}
//
When feature gate is enabled,
field should be defaulted
// field should be defaulted
defaultMode
:=
storagev1beta1
.
VolumeBindingImmediate
output
:=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1beta1
.
StorageClass
)
outMode
:=
output
.
VolumeBindingMode
...
...
@@ -62,14 +59,4 @@ func TestSetDefaultVolumeBindingMode(t *testing.T) {
}
else
if
*
outMode
!=
defaultMode
{
t
.
Errorf
(
"Expected VolumeBindingMode to be defaulted to: %+v, got: %+v"
,
defaultMode
,
outMode
)
}
class
=
&
storagev1beta1
.
StorageClass
{}
// When feature gate is disabled, field should not be defaulted
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
false
)()
output
=
roundTrip
(
t
,
runtime
.
Object
(
class
))
.
(
*
storagev1beta1
.
StorageClass
)
if
output
.
VolumeBindingMode
!=
nil
{
t
.
Errorf
(
"Expected VolumeBindingMode to not be defaulted, got: %+v"
,
output
.
VolumeBindingMode
)
}
}
pkg/apis/storage/validation/BUILD
View file @
66bf4811
...
...
@@ -15,12 +15,10 @@ go_library(
"//pkg/apis/core/helper:go_default_library",
"//pkg/apis/core/validation:go_default_library",
"//pkg/apis/storage:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/equality:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/validation:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
],
)
...
...
@@ -31,10 +29,7 @@ go_test(
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/apis/storage:go_default_library",
"//pkg/features:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
],
)
...
...
pkg/apis/storage/validation/validation.go
View file @
66bf4811
...
...
@@ -24,12 +24,10 @@ import (
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/validation"
"k8s.io/apimachinery/pkg/util/validation/field"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/core/helper"
apivalidation
"k8s.io/kubernetes/pkg/apis/core/validation"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/features"
)
const
(
...
...
@@ -233,15 +231,11 @@ var supportedVolumeBindingModes = sets.NewString(string(storage.VolumeBindingImm
// validateVolumeBindingMode tests that VolumeBindingMode specifies valid values.
func
validateVolumeBindingMode
(
mode
*
storage
.
VolumeBindingMode
,
fldPath
*
field
.
Path
)
field
.
ErrorList
{
allErrs
:=
field
.
ErrorList
{}
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
if
mode
==
nil
{
allErrs
=
append
(
allErrs
,
field
.
Required
(
fldPath
,
""
))
}
else
if
!
supportedVolumeBindingModes
.
Has
(
string
(
*
mode
))
{
allErrs
=
append
(
allErrs
,
field
.
NotSupported
(
fldPath
,
mode
,
supportedVolumeBindingModes
.
List
()))
}
}
else
if
mode
!=
nil
{
allErrs
=
append
(
allErrs
,
field
.
Forbidden
(
fldPath
,
"field is disabled by feature-gate VolumeScheduling"
))
}
return
allErrs
}
...
...
@@ -254,10 +248,6 @@ func validateAllowedTopologies(topologies []api.TopologySelectorTerm, fldPath *f
return
allErrs
}
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
allErrs
=
append
(
allErrs
,
field
.
Forbidden
(
fldPath
,
"field is disabled by feature-gate VolumeScheduling"
))
}
rawTopologies
:=
make
([]
map
[
string
]
sets
.
String
,
len
(
topologies
))
for
i
,
term
:=
range
topologies
{
idxPath
:=
fldPath
.
Index
(
i
)
...
...
pkg/apis/storage/validation/validation_test.go
View file @
66bf4811
...
...
@@ -22,11 +22,8 @@ import (
"testing"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/apis/storage"
"k8s.io/kubernetes/pkg/features"
)
var
(
...
...
@@ -480,22 +477,6 @@ func makeClass(mode *storage.VolumeBindingMode, topologies []api.TopologySelecto
}
}
// TODO: Remove these tests once feature gate is not required
func
TestValidateVolumeBindingModeAlphaDisabled
(
t
*
testing
.
T
)
{
errorCases
:=
map
[
string
]
*
storage
.
StorageClass
{
"immediate mode"
:
makeClass
(
&
immediateMode1
,
nil
),
"waiting mode"
:
makeClass
(
&
waitingMode
,
nil
),
"invalid mode"
:
makeClass
(
&
invalidMode
,
nil
),
}
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
false
)()
for
testName
,
storageClass
:=
range
errorCases
{
if
errs
:=
ValidateStorageClass
(
storageClass
);
len
(
errs
)
==
0
{
t
.
Errorf
(
"Expected failure for test: %v"
,
testName
)
}
}
}
type
bindingTest
struct
{
class
*
storage
.
StorageClass
shouldSucceed
bool
...
...
@@ -521,8 +502,6 @@ func TestValidateVolumeBindingMode(t *testing.T) {
},
}
// TODO: remove when feature gate not required
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
for
testName
,
testCase
:=
range
cases
{
errs
:=
ValidateStorageClass
(
testCase
.
class
)
if
testCase
.
shouldSucceed
&&
len
(
errs
)
!=
0
{
...
...
@@ -579,8 +558,6 @@ func TestValidateUpdateVolumeBindingMode(t *testing.T) {
},
}
// TODO: remove when feature gate not required
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
for
testName
,
testCase
:=
range
cases
{
errs
:=
ValidateStorageClassUpdate
(
testCase
.
newClass
,
testCase
.
oldClass
)
if
testCase
.
shouldSucceed
&&
len
(
errs
)
!=
0
{
...
...
@@ -883,7 +860,6 @@ func TestValidateAllowedTopologies(t *testing.T) {
},
}
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
for
testName
,
testCase
:=
range
cases
{
errs
:=
ValidateStorageClass
(
testCase
.
class
)
if
testCase
.
shouldSucceed
&&
len
(
errs
)
!=
0
{
...
...
@@ -893,12 +869,4 @@ func TestValidateAllowedTopologies(t *testing.T) {
t
.
Errorf
(
"Expected failure for test %q, got success"
,
testName
)
}
}
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
false
)()
for
testName
,
testCase
:=
range
cases
{
errs
:=
ValidateStorageClass
(
testCase
.
class
)
if
len
(
errs
)
==
0
&&
testCase
.
class
.
AllowedTopologies
!=
nil
{
t
.
Errorf
(
"Expected failure for test %q, got success"
,
testName
)
}
}
}
pkg/controller/cloud/BUILD
View file @
66bf4811
...
...
@@ -18,7 +18,6 @@ go_library(
"//pkg/api/v1/node:go_default_library",
"//pkg/apis/core/v1/helper:go_default_library",
"//pkg/controller:go_default_library",
"//pkg/features:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/scheduler/api:go_default_library",
"//pkg/util/node:go_default_library",
...
...
@@ -33,7 +32,6 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/util/strategicpatch:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/watch:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/informers/core/v1:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/scheme:go_default_library",
...
...
@@ -60,7 +58,6 @@ go_test(
"//pkg/cloudprovider/providers/fake:go_default_library",
"//pkg/controller:go_default_library",
"//pkg/controller/testutil:go_default_library",
"//pkg/features:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/scheduler/api:go_default_library",
"//pkg/volume/util:go_default_library",
...
...
@@ -69,8 +66,6 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/informers/core/v1:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
...
...
pkg/controller/cloud/pvlcontroller.go
View file @
66bf4811
...
...
@@ -33,7 +33,6 @@ import (
"k8s.io/apimachinery/pkg/util/strategicpatch"
"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/apimachinery/pkg/watch"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
"k8s.io/client-go/kubernetes"
corelisters
"k8s.io/client-go/listers/core/v1"
"k8s.io/client-go/tools/cache"
...
...
@@ -41,7 +40,6 @@ import (
cloudprovider
"k8s.io/cloud-provider"
v1helper
"k8s.io/kubernetes/pkg/apis/core/v1/helper"
"k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/features"
kubeletapis
"k8s.io/kubernetes/pkg/kubelet/apis"
volumeutil
"k8s.io/kubernetes/pkg/volume/util"
)
...
...
@@ -204,7 +202,7 @@ func (pvlc *PersistentVolumeLabelController) addLabelsAndAffinityToVolume(vol *v
func
(
pvlc
*
PersistentVolumeLabelController
)
createPatch
(
vol
*
v1
.
PersistentVolume
,
volLabels
map
[
string
]
string
)
([]
byte
,
error
)
{
volName
:=
vol
.
Name
newVolume
:=
vol
.
DeepCopyObject
()
.
(
*
v1
.
PersistentVolume
)
populateAffinity
:=
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
&&
len
(
volLabels
)
!=
0
populateAffinity
:=
len
(
volLabels
)
!=
0
if
newVolume
.
Labels
==
nil
{
newVolume
.
Labels
=
make
(
map
[
string
]
string
)
...
...
pkg/controller/cloud/pvlcontroller_test.go
View file @
66bf4811
...
...
@@ -27,11 +27,8 @@ import (
"k8s.io/apimachinery/pkg/runtime"
sets
"k8s.io/apimachinery/pkg/util/sets"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/client-go/kubernetes/fake"
core
"k8s.io/client-go/testing"
"k8s.io/kubernetes/pkg/features"
kubeletapis
"k8s.io/kubernetes/pkg/kubelet/apis"
volumeutil
"k8s.io/kubernetes/pkg/volume/util"
...
...
@@ -451,7 +448,6 @@ func TestCreatePatch(t *testing.T) {
},
}
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
for
d
,
tc
:=
range
testCases
{
cloud
:=
&
fakecloud
.
FakeCloud
{}
client
:=
fake
.
NewSimpleClientset
()
...
...
@@ -520,8 +516,6 @@ func TestAddLabelsToVolume(t *testing.T) {
},
}
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
for
d
,
tc
:=
range
testCases
{
labeledCh
:=
make
(
chan
bool
,
1
)
client
:=
fake
.
NewSimpleClientset
()
...
...
pkg/controller/volume/persistentvolume/pv_controller.go
View file @
66bf4811
...
...
@@ -286,10 +286,6 @@ func checkVolumeSatisfyClaim(volume *v1.PersistentVolume, claim *v1.PersistentVo
}
func
(
ctrl
*
PersistentVolumeController
)
shouldDelayBinding
(
claim
*
v1
.
PersistentVolumeClaim
)
(
bool
,
error
)
{
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
return
false
,
nil
}
// When feature VolumeScheduling enabled,
// Scheduler signal to the PV controller to start dynamic
// provisioning by setting the "annSelectedNode" annotation
...
...
pkg/controller/volume/persistentvolume/pv_controller_test.go
View file @
66bf4811
...
...
@@ -24,15 +24,12 @@ import (
storagev1
"k8s.io/api/storage/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/watch"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes/fake"
core
"k8s.io/client-go/testing"
"k8s.io/client-go/tools/cache"
"k8s.io/klog"
"k8s.io/kubernetes/pkg/controller"
"k8s.io/kubernetes/pkg/features"
)
var
(
...
...
@@ -336,24 +333,3 @@ func TestDelayBinding(t *testing.T) {
}
}
}
func
TestDelayBindingDisabled
(
t
*
testing
.
T
)
{
// When volumeScheduling feature gate is disabled, should always be immediate
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
false
)()
client
:=
&
fake
.
Clientset
{}
informerFactory
:=
informers
.
NewSharedInformerFactory
(
client
,
controller
.
NoResyncPeriodFunc
())
classInformer
:=
informerFactory
.
Storage
()
.
V1
()
.
StorageClasses
()
ctrl
:=
&
PersistentVolumeController
{
classLister
:
classInformer
.
Lister
(),
}
name
:=
"volumeScheduling-feature-disabled"
shouldDelay
,
err
:=
ctrl
.
shouldDelayBinding
(
makePVCClass
(
&
classWaitMode
,
false
))
if
err
!=
nil
{
t
.
Errorf
(
"Test %q returned error: %v"
,
name
,
err
)
}
if
shouldDelay
{
t
.
Errorf
(
"Test %q returned true, expected false"
,
name
)
}
}
pkg/features/kube_features.go
View file @
66bf4811
...
...
@@ -413,7 +413,7 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
PodShareProcessNamespace
:
{
Default
:
true
,
PreRelease
:
utilfeature
.
Beta
},
PodPriority
:
{
Default
:
true
,
PreRelease
:
utilfeature
.
Beta
},
TaintNodesByCondition
:
{
Default
:
true
,
PreRelease
:
utilfeature
.
Beta
},
MountPropagation
:
{
Default
:
true
,
PreRelease
:
utilfeature
.
GA
},
MountPropagation
:
{
Default
:
true
,
PreRelease
:
utilfeature
.
GA
,
LockToDefault
:
true
},
// remove in 1.14
QOSReserved
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
ExpandPersistentVolumes
:
{
Default
:
true
,
PreRelease
:
utilfeature
.
Beta
},
ExpandInUsePersistentVolumes
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
...
...
@@ -422,7 +422,7 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
CPUCFSQuotaPeriod
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
ServiceNodeExclusion
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
MountContainers
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
VolumeScheduling
:
{
Default
:
true
,
PreRelease
:
utilfeature
.
GA
},
VolumeScheduling
:
{
Default
:
true
,
PreRelease
:
utilfeature
.
GA
,
LockToDefault
:
true
},
// remove in 1.16
CSIPersistentVolume
:
{
Default
:
true
,
PreRelease
:
utilfeature
.
GA
},
CSIDriverRegistry
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
CSINodeInfo
:
{
Default
:
false
,
PreRelease
:
utilfeature
.
Alpha
},
...
...
pkg/scheduler/BUILD
View file @
66bf4811
...
...
@@ -9,7 +9,6 @@ go_library(
importpath = "k8s.io/kubernetes/pkg/scheduler",
visibility = ["//visibility:public"],
deps = [
"//pkg/features:go_default_library",
"//pkg/scheduler/algorithm:go_default_library",
"//pkg/scheduler/algorithm/predicates:go_default_library",
"//pkg/scheduler/api:go_default_library",
...
...
@@ -27,7 +26,6 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/informers/apps/v1:go_default_library",
"//staging/src/k8s.io/client-go/informers/core/v1:go_default_library",
"//staging/src/k8s.io/client-go/informers/policy/v1beta1:go_default_library",
...
...
@@ -46,7 +44,6 @@ go_test(
deps = [
"//pkg/api/legacyscheme:go_default_library",
"//pkg/controller/volume/persistentvolume:go_default_library",
"//pkg/features:go_default_library",
"//pkg/scheduler/algorithm:go_default_library",
"//pkg/scheduler/algorithm/predicates:go_default_library",
"//pkg/scheduler/api:go_default_library",
...
...
@@ -66,8 +63,6 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/util/diff:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library",
"//staging/src/k8s.io/client-go/kubernetes/fake:go_default_library",
"//staging/src/k8s.io/client-go/listers/core/v1:go_default_library",
...
...
pkg/scheduler/algorithm/predicates/predicates.go
View file @
66bf4811
...
...
@@ -635,7 +635,6 @@ func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta PredicateMetadata, nodeI
pvName
:=
pvc
.
Spec
.
VolumeName
if
pvName
==
""
{
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
scName
:=
v1helper
.
GetPersistentVolumeClaimClass
(
pvc
)
if
len
(
scName
)
>
0
{
class
,
_
:=
c
.
classInfo
.
GetStorageClassInfo
(
scName
)
...
...
@@ -649,7 +648,6 @@ func (c *VolumeZoneChecker) predicate(pod *v1.Pod, meta PredicateMetadata, nodeI
}
}
}
}
return
false
,
nil
,
fmt
.
Errorf
(
"PersistentVolumeClaim is not bound: %q"
,
pvcName
)
}
...
...
@@ -1618,10 +1616,6 @@ func NewVolumeBindingPredicate(binder *volumebinder.VolumeBinder) FitPredicate {
}
func
(
c
*
VolumeBindingChecker
)
predicate
(
pod
*
v1
.
Pod
,
meta
PredicateMetadata
,
nodeInfo
*
schedulernodeinfo
.
NodeInfo
)
(
bool
,
[]
PredicateFailureReason
,
error
)
{
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
return
true
,
nil
,
nil
}
node
:=
nodeInfo
.
Node
()
if
node
==
nil
{
return
false
,
nil
,
fmt
.
Errorf
(
"node not found"
)
...
...
pkg/scheduler/algorithm/predicates/predicates_test.go
View file @
66bf4811
...
...
@@ -29,10 +29,7 @@ import (
"k8s.io/apimachinery/pkg/api/resource"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/sets"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
v1helper
"k8s.io/kubernetes/pkg/apis/core/v1/helper"
"k8s.io/kubernetes/pkg/features"
kubeletapis
"k8s.io/kubernetes/pkg/kubelet/apis"
schedulerapi
"k8s.io/kubernetes/pkg/scheduler/api"
schedulernodeinfo
"k8s.io/kubernetes/pkg/scheduler/nodeinfo"
...
...
@@ -4884,8 +4881,6 @@ func TestVolumeZonePredicateWithVolumeBinding(t *testing.T) {
},
}
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
for
_
,
test
:=
range
tests
{
t
.
Run
(
test
.
name
,
func
(
t
*
testing
.
T
)
{
fit
:=
NewVolumeZonePredicate
(
pvInfo
,
pvcInfo
,
classInfo
)
...
...
pkg/scheduler/factory/BUILD
View file @
66bf4811
...
...
@@ -12,7 +12,6 @@ go_library(
visibility = ["//visibility:public"],
deps = [
"//pkg/api/v1/pod:go_default_library",
"//pkg/features:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/scheduler/algorithm:go_default_library",
"//pkg/scheduler/algorithm/predicates:go_default_library",
...
...
@@ -38,7 +37,6 @@ go_library(
"//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/client-go/informers/apps/v1:go_default_library",
"//staging/src/k8s.io/client-go/informers/core/v1:go_default_library",
"//staging/src/k8s.io/client-go/informers/policy/v1beta1:go_default_library",
...
...
pkg/scheduler/factory/factory.go
View file @
66bf4811
...
...
@@ -38,7 +38,6 @@ import (
"k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/wait"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
appsinformers
"k8s.io/client-go/informers/apps/v1"
coreinformers
"k8s.io/client-go/informers/core/v1"
policyinformers
"k8s.io/client-go/informers/policy/v1beta1"
...
...
@@ -51,7 +50,6 @@ import (
"k8s.io/client-go/tools/cache"
"k8s.io/client-go/tools/record"
podutil
"k8s.io/kubernetes/pkg/api/v1/pod"
"k8s.io/kubernetes/pkg/features"
kubeletapis
"k8s.io/kubernetes/pkg/kubelet/apis"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
...
...
@@ -378,7 +376,6 @@ func NewConfigFactory(args *ConfigFactoryArgs) Configurator {
},
)
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
// Setup volume binder
c
.
volumeBinder
=
volumebinder
.
NewVolumeBinder
(
args
.
Client
,
args
.
PvcInformer
,
args
.
PvInformer
,
args
.
StorageClassInformer
,
time
.
Duration
(
args
.
BindTimeoutSeconds
)
*
time
.
Second
)
...
...
@@ -387,7 +384,6 @@ func NewConfigFactory(args *ConfigFactoryArgs) Configurator {
AddFunc
:
c
.
onStorageClassAdd
,
},
)
}
// Setup cache comparer
debugger
:=
cachedebugger
.
New
(
...
...
@@ -491,9 +487,6 @@ func (c *configFactory) onPvcAdd(obj interface{}) {
}
func
(
c
*
configFactory
)
onPvcUpdate
(
old
,
new
interface
{})
{
if
!
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
return
}
c
.
podQueue
.
MoveAllToActiveQueue
()
}
...
...
pkg/scheduler/scheduler.go
View file @
66bf4811
...
...
@@ -29,14 +29,12 @@ import (
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/apimachinery/pkg/util/wait"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
appsinformers
"k8s.io/client-go/informers/apps/v1"
coreinformers
"k8s.io/client-go/informers/core/v1"
policyinformers
"k8s.io/client-go/informers/policy/v1beta1"
storageinformers
"k8s.io/client-go/informers/storage/v1"
clientset
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/record"
"k8s.io/kubernetes/pkg/features"
schedulerapi
"k8s.io/kubernetes/pkg/scheduler/api"
latestschedulerapi
"k8s.io/kubernetes/pkg/scheduler/api/latest"
kubeschedulerconfig
"k8s.io/kubernetes/pkg/scheduler/apis/config"
...
...
@@ -352,13 +350,11 @@ func (sched *Scheduler) preempt(preemptor *v1.Pod, scheduleErr error) (string, e
//
// This function modifies assumed if volume binding is required.
func
(
sched
*
Scheduler
)
assumeVolumes
(
assumed
*
v1
.
Pod
,
host
string
)
(
allBound
bool
,
err
error
)
{
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
allBound
,
err
=
sched
.
config
.
VolumeBinder
.
Binder
.
AssumePodVolumes
(
assumed
,
host
)
if
err
!=
nil
{
sched
.
recordSchedulingFailure
(
assumed
,
err
,
SchedulerError
,
fmt
.
Sprintf
(
"AssumePodVolumes failed: %v"
,
err
))
}
}
return
}
...
...
pkg/scheduler/scheduler_test.go
View file @
66bf4811
...
...
@@ -32,8 +32,6 @@ import (
"k8s.io/apimachinery/pkg/util/diff"
"k8s.io/apimachinery/pkg/util/sets"
"k8s.io/apimachinery/pkg/util/wait"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
"k8s.io/client-go/informers"
clientsetfake
"k8s.io/client-go/kubernetes/fake"
corelister
"k8s.io/client-go/listers/core/v1"
...
...
@@ -41,7 +39,6 @@ import (
"k8s.io/client-go/tools/record"
"k8s.io/kubernetes/pkg/api/legacyscheme"
"k8s.io/kubernetes/pkg/controller/volume/persistentvolume"
"k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/scheduler/algorithm"
"k8s.io/kubernetes/pkg/scheduler/algorithm/predicates"
"k8s.io/kubernetes/pkg/scheduler/api"
...
...
@@ -779,8 +776,6 @@ func TestSchedulerWithVolumeBinding(t *testing.T) {
// This can be small because we wait for pod to finish scheduling first
chanTimeout
:=
2
*
time
.
Second
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
table
:=
[]
struct
{
name
string
expectError
error
...
...
pkg/volume/awsebs/aws_ebs.go
View file @
66bf4811
...
...
@@ -576,12 +576,10 @@ func (c *awsElasticBlockStoreProvisioner) Provision(selectedNode *v1.Node, allow
}
}
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
pv
.
Spec
.
NodeAffinity
=
new
(
v1
.
VolumeNodeAffinity
)
pv
.
Spec
.
NodeAffinity
.
Required
=
new
(
v1
.
NodeSelector
)
pv
.
Spec
.
NodeAffinity
.
Required
.
NodeSelectorTerms
=
make
([]
v1
.
NodeSelectorTerm
,
1
)
pv
.
Spec
.
NodeAffinity
.
Required
.
NodeSelectorTerms
[
0
]
.
MatchExpressions
=
requirements
}
return
pv
,
nil
}
pkg/volume/azure_dd/azure_provision.go
View file @
66bf4811
...
...
@@ -311,7 +311,6 @@ func (p *azureDiskProvisioner) Provision(selectedNode *v1.Node, allowedTopologie
},
}
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
nodeSelectorTerms
:=
make
([]
v1
.
NodeSelectorTerm
,
0
)
if
zoned
{
...
...
@@ -357,7 +356,6 @@ func (p *azureDiskProvisioner) Provision(selectedNode *v1.Node, allowedTopologie
},
}
}
}
return
pv
,
nil
}
pkg/volume/cinder/cinder.go
View file @
66bf4811
...
...
@@ -561,7 +561,6 @@ func (c *cinderVolumeProvisioner) Provision(selectedNode *v1.Node, allowedTopolo
pv
.
Spec
.
AccessModes
=
c
.
plugin
.
GetAccessModes
()
}
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
requirements
:=
make
([]
v1
.
NodeSelectorRequirement
,
0
)
for
k
,
v
:=
range
labels
{
if
v
!=
""
{
...
...
@@ -574,7 +573,6 @@ func (c *cinderVolumeProvisioner) Provision(selectedNode *v1.Node, allowedTopolo
pv
.
Spec
.
NodeAffinity
.
Required
.
NodeSelectorTerms
=
make
([]
v1
.
NodeSelectorTerm
,
1
)
pv
.
Spec
.
NodeAffinity
.
Required
.
NodeSelectorTerms
[
0
]
.
MatchExpressions
=
requirements
}
}
return
pv
,
nil
}
...
...
pkg/volume/gcepd/gce_pd.go
View file @
66bf4811
...
...
@@ -551,7 +551,7 @@ func (c *gcePersistentDiskProvisioner) Provision(selectedNode *v1.Node, allowedT
}
}
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
&&
len
(
requirements
)
>
0
{
if
len
(
requirements
)
>
0
{
pv
.
Spec
.
NodeAffinity
=
new
(
v1
.
VolumeNodeAffinity
)
pv
.
Spec
.
NodeAffinity
.
Required
=
new
(
v1
.
NodeSelector
)
pv
.
Spec
.
NodeAffinity
.
Required
.
NodeSelectorTerms
=
make
([]
v1
.
NodeSelectorTerm
,
1
)
...
...
pkg/volume/util/BUILD
View file @
66bf4811
...
...
@@ -60,7 +60,6 @@ go_test(
deps = [
"//pkg/apis/core/install:go_default_library",
"//pkg/apis/core/v1/helper:go_default_library",
"//pkg/features:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/util/mount:go_default_library",
"//pkg/util/slice:go_default_library",
...
...
@@ -70,8 +69,6 @@ go_test(
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/sets:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
"//staging/src/k8s.io/client-go/util/testing:go_default_library",
],
)
...
...
pkg/volume/util/util_test.go
View file @
66bf4811
This diff is collapsed.
Click to expand it.
plugin/pkg/admission/storage/persistentvolume/label/BUILD
View file @
66bf4811
...
...
@@ -18,13 +18,11 @@ go_library(
"//pkg/cloudprovider/providers/aws:go_default_library",
"//pkg/cloudprovider/providers/azure:go_default_library",
"//pkg/cloudprovider/providers/gce:go_default_library",
"//pkg/features:go_default_library",
"//pkg/kubeapiserver/admission:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/volume:go_default_library",
"//pkg/volume/util:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/cloud-provider:go_default_library",
"//vendor/k8s.io/klog:go_default_library",
],
...
...
@@ -37,15 +35,12 @@ go_test(
deps = [
"//pkg/apis/core:go_default_library",
"//pkg/cloudprovider/providers/aws:go_default_library",
"//pkg/features:go_default_library",
"//pkg/kubelet/apis:go_default_library",
"//pkg/volume/util:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/admission:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature/testing:go_default_library",
],
)
...
...
plugin/pkg/admission/storage/persistentvolume/label/admission.go
View file @
66bf4811
...
...
@@ -23,14 +23,12 @@ import (
"sync"
"k8s.io/apiserver/pkg/admission"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
cloudprovider
"k8s.io/cloud-provider"
"k8s.io/klog"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/cloudprovider/providers/aws"
"k8s.io/kubernetes/pkg/cloudprovider/providers/azure"
"k8s.io/kubernetes/pkg/cloudprovider/providers/gce"
"k8s.io/kubernetes/pkg/features"
kubeapiserveradmission
"k8s.io/kubernetes/pkg/kubeapiserver/admission"
kubeletapis
"k8s.io/kubernetes/pkg/kubelet/apis"
vol
"k8s.io/kubernetes/pkg/volume"
...
...
@@ -158,7 +156,6 @@ func (l *persistentVolumeLabel) Admit(a admission.Attributes) (err error) {
requirements
=
append
(
requirements
,
api
.
NodeSelectorRequirement
{
Key
:
k
,
Operator
:
api
.
NodeSelectorOpIn
,
Values
:
values
})
}
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
if
volume
.
Spec
.
NodeAffinity
==
nil
{
volume
.
Spec
.
NodeAffinity
=
new
(
api
.
VolumeNodeAffinity
)
}
...
...
@@ -180,7 +177,6 @@ func (l *persistentVolumeLabel) Admit(a admission.Attributes) (err error) {
}
}
}
}
return
nil
}
...
...
plugin/pkg/admission/storage/persistentvolume/label/admission_test.go
View file @
66bf4811
...
...
@@ -27,11 +27,8 @@ import (
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/types"
"k8s.io/apiserver/pkg/admission"
utilfeature
"k8s.io/apiserver/pkg/util/feature"
utilfeaturetesting
"k8s.io/apiserver/pkg/util/feature/testing"
api
"k8s.io/kubernetes/pkg/apis/core"
"k8s.io/kubernetes/pkg/cloudprovider/providers/aws"
"k8s.io/kubernetes/pkg/features"
kubeletapis
"k8s.io/kubernetes/pkg/kubelet/apis"
volumeutil
"k8s.io/kubernetes/pkg/volume/util"
)
...
...
@@ -125,8 +122,6 @@ func TestAdmission(t *testing.T) {
},
}
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
// Non-cloud PVs are ignored
err
:=
handler
.
Admit
(
admission
.
NewAttributesRecord
(
&
ignoredPV
,
nil
,
api
.
Kind
(
"PersistentVolume"
)
.
WithVersion
(
"version"
),
ignoredPV
.
Namespace
,
ignoredPV
.
Name
,
api
.
Resource
(
"persistentvolumes"
)
.
WithVersion
(
"version"
),
""
,
admission
.
Create
,
false
,
nil
))
if
err
!=
nil
{
...
...
plugin/pkg/auth/authorizer/rbac/bootstrappolicy/policy.go
View file @
66bf4811
...
...
@@ -489,17 +489,14 @@ func ClusterRoles() []rbacv1.ClusterRole {
rbacv1helpers
.
NewRule
(
"create"
)
.
Groups
(
certificatesGroup
)
.
Resources
(
"certificatesigningrequests/selfnodeclient"
)
.
RuleOrDie
(),
},
},
}
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
roles
=
append
(
roles
,
rbacv1
.
ClusterRole
{
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"system:volume-scheduler"
},
Rules
:
[]
rbacv1
.
PolicyRule
{
rbacv1helpers
.
NewRule
(
ReadUpdate
...
)
.
Groups
(
legacyGroup
)
.
Resources
(
"persistentvolumes"
)
.
RuleOrDie
(),
rbacv1helpers
.
NewRule
(
Read
...
)
.
Groups
(
storageGroup
)
.
Resources
(
"storageclasses"
)
.
RuleOrDie
(),
rbacv1helpers
.
NewRule
(
ReadUpdate
...
)
.
Groups
(
legacyGroup
)
.
Resources
(
"persistentvolumeclaims"
)
.
RuleOrDie
(),
},
}
)
}
,
}
externalProvisionerRules
:=
[]
rbacv1
.
PolicyRule
{
...
...
@@ -535,6 +532,7 @@ func ClusterRoleBindings() []rbacv1.ClusterRoleBinding {
rbacv1helpers
.
NewClusterBinding
(
"system:kube-dns"
)
.
SAs
(
"kube-system"
,
"kube-dns"
)
.
BindingOrDie
(),
rbacv1helpers
.
NewClusterBinding
(
"system:kube-scheduler"
)
.
Users
(
user
.
KubeScheduler
)
.
BindingOrDie
(),
rbacv1helpers
.
NewClusterBinding
(
"system:aws-cloud-provider"
)
.
SAs
(
"kube-system"
,
"aws-cloud-provider"
)
.
BindingOrDie
(),
rbacv1helpers
.
NewClusterBinding
(
"system:volume-scheduler"
)
.
Users
(
user
.
KubeScheduler
)
.
BindingOrDie
(),
// This default binding of the system:node role to the system:nodes group is deprecated in 1.7 with the availability of the Node authorizer.
// This leaves the binding, but with an empty set of subjects, so that tightening reconciliation can remove the subject.
...
...
@@ -544,10 +542,6 @@ func ClusterRoleBindings() []rbacv1.ClusterRoleBinding {
},
}
if
utilfeature
.
DefaultFeatureGate
.
Enabled
(
features
.
VolumeScheduling
)
{
rolebindings
=
append
(
rolebindings
,
rbacv1helpers
.
NewClusterBinding
(
"system:volume-scheduler"
)
.
Users
(
user
.
KubeScheduler
)
.
BindingOrDie
())
}
addClusterRoleBindingLabel
(
rolebindings
)
return
rolebindings
...
...
staging/src/k8s.io/apiserver/pkg/util/feature/feature_gate.go
View file @
66bf4811
...
...
@@ -63,7 +63,11 @@ var (
)
type
FeatureSpec
struct
{
// Default is the default enablement state for the feature
Default
bool
// LockToDefault indicates that the feature is locked to its default and cannot be changed
LockToDefault
bool
// PreRelease indicates the maturity level of the feature
PreRelease
prerelease
}
...
...
@@ -199,6 +203,9 @@ func (f *featureGate) SetFromMap(m map[string]bool) error {
if
!
ok
{
return
fmt
.
Errorf
(
"unrecognized feature gate: %s"
,
k
)
}
if
featureSpec
.
LockToDefault
&&
featureSpec
.
Default
!=
v
{
return
fmt
.
Errorf
(
"cannot set feature gate %v to %v, feature is locked to %v"
,
k
,
v
,
featureSpec
.
Default
)
}
enabled
[
k
]
=
v
// Handle "special" features like "all alpha gates"
if
fn
,
found
:=
f
.
special
[
k
];
found
{
...
...
staging/src/k8s.io/apiserver/pkg/util/feature/feature_gate_test.go
View file @
66bf4811
...
...
@@ -221,6 +221,8 @@ func TestFeatureGateSetFromMap(t *testing.T) {
// gates for testing
const
testAlphaGate
Feature
=
"TestAlpha"
const
testBetaGate
Feature
=
"TestBeta"
const
testLockedTrueGate
Feature
=
"TestLockedTrue"
const
testLockedFalseGate
Feature
=
"TestLockedFalse"
tests
:=
[]
struct
{
name
string
...
...
@@ -270,6 +272,39 @@ func TestFeatureGateSetFromMap(t *testing.T) {
},
setmapError
:
"unrecognized feature gate:"
,
},
{
name
:
"set locked gates"
,
setmap
:
map
[
string
]
bool
{
"TestLockedTrue"
:
true
,
"TestLockedFalse"
:
false
,
},
expect
:
map
[
Feature
]
bool
{
testAlphaGate
:
false
,
testBetaGate
:
false
,
},
},
{
name
:
"set locked gates"
,
setmap
:
map
[
string
]
bool
{
"TestLockedTrue"
:
false
,
},
expect
:
map
[
Feature
]
bool
{
testAlphaGate
:
false
,
testBetaGate
:
false
,
},
setmapError
:
"cannot set feature gate TestLockedTrue to false, feature is locked to true"
,
},
{
name
:
"set locked gates"
,
setmap
:
map
[
string
]
bool
{
"TestLockedFalse"
:
true
,
},
expect
:
map
[
Feature
]
bool
{
testAlphaGate
:
false
,
testBetaGate
:
false
,
},
setmapError
:
"cannot set feature gate TestLockedFalse to true, feature is locked to false"
,
},
}
for
i
,
test
:=
range
tests
{
t
.
Run
(
fmt
.
Sprintf
(
"SetFromMap %s"
,
test
.
name
),
func
(
t
*
testing
.
T
)
{
...
...
@@ -277,10 +312,14 @@ func TestFeatureGateSetFromMap(t *testing.T) {
f
.
Add
(
map
[
Feature
]
FeatureSpec
{
testAlphaGate
:
{
Default
:
false
,
PreRelease
:
Alpha
},
testBetaGate
:
{
Default
:
false
,
PreRelease
:
Beta
},
testLockedTrueGate
:
{
Default
:
true
,
PreRelease
:
GA
,
LockToDefault
:
true
},
testLockedFalseGate
:
{
Default
:
false
,
PreRelease
:
GA
,
LockToDefault
:
true
},
})
err
:=
f
.
SetFromMap
(
test
.
setmap
)
if
test
.
setmapError
!=
""
{
if
!
strings
.
Contains
(
err
.
Error
(),
test
.
setmapError
)
{
if
err
==
nil
{
t
.
Errorf
(
"expected error, got none"
)
}
else
if
!
strings
.
Contains
(
err
.
Error
(),
test
.
setmapError
)
{
t
.
Errorf
(
"%d: SetFromMap(%#v) Expected err:%v, Got err:%v"
,
i
,
test
.
setmap
,
test
.
setmapError
,
err
)
}
}
else
if
err
!=
nil
{
...
...
test/integration/scheduler/volume_binding_test.go
View file @
66bf4811
...
...
@@ -97,7 +97,6 @@ type testPVC struct {
}
func
TestVolumeBinding
(
t
*
testing
.
T
)
{
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
PersistentLocalVolumes
,
true
)()
config
:=
setupCluster
(
t
,
"volume-scheduling-"
,
2
,
0
,
0
)
defer
config
.
teardown
()
...
...
@@ -268,7 +267,6 @@ func TestVolumeBinding(t *testing.T) {
// TestVolumeBindingRescheduling tests scheduler will retry scheduling when needed.
func
TestVolumeBindingRescheduling
(
t
*
testing
.
T
)
{
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
PersistentLocalVolumes
,
true
)()
config
:=
setupCluster
(
t
,
"volume-scheduling-"
,
2
,
0
,
0
)
defer
config
.
teardown
()
...
...
@@ -412,7 +410,6 @@ func TestVolumeBindingDynamicStressSlow(t *testing.T) {
}
func
testVolumeBindingStress
(
t
*
testing
.
T
,
schedulerResyncPeriod
time
.
Duration
,
dynamic
bool
,
provisionDelaySeconds
int
)
{
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
PersistentLocalVolumes
,
true
)()
config
:=
setupCluster
(
t
,
"volume-binding-stress-"
,
1
,
schedulerResyncPeriod
,
provisionDelaySeconds
)
defer
config
.
teardown
()
...
...
@@ -502,7 +499,6 @@ func testVolumeBindingStress(t *testing.T, schedulerResyncPeriod time.Duration,
}
func
testVolumeBindingWithAffinity
(
t
*
testing
.
T
,
anti
bool
,
numNodes
,
numPods
,
numPVsFirstNode
int
)
{
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
PersistentLocalVolumes
,
true
)()
config
:=
setupCluster
(
t
,
"volume-pod-affinity-"
,
numNodes
,
0
,
0
)
defer
config
.
teardown
()
...
...
@@ -629,7 +625,6 @@ func TestVolumeBindingWithAffinity(t *testing.T) {
}
func
TestPVAffinityConflict
(
t
*
testing
.
T
)
{
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
PersistentLocalVolumes
,
true
)()
config
:=
setupCluster
(
t
,
"volume-scheduling-"
,
3
,
0
,
0
)
defer
config
.
teardown
()
...
...
@@ -690,7 +685,6 @@ func TestPVAffinityConflict(t *testing.T) {
}
func
TestVolumeProvision
(
t
*
testing
.
T
)
{
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
PersistentLocalVolumes
,
true
)()
config
:=
setupCluster
(
t
,
"volume-scheduling"
,
1
,
0
,
0
)
defer
config
.
teardown
()
...
...
@@ -830,7 +824,6 @@ func TestVolumeProvision(t *testing.T) {
// on provision failure.
func
TestRescheduleProvisioning
(
t
*
testing
.
T
)
{
// Set feature gates
defer
utilfeaturetesting
.
SetFeatureGateDuringTest
(
t
,
utilfeature
.
DefaultFeatureGate
,
features
.
VolumeScheduling
,
true
)()
controllerCh
:=
make
(
chan
struct
{})
context
:=
initTestMaster
(
t
,
"reschedule-volume-provision"
,
nil
)
...
...
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