Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add validation for kube-scheduler configuration options #66799

Merged
merged 1 commit into from
Sep 4, 2018

Conversation

noqcks
Copy link
Contributor

@noqcks noqcks commented Jul 30, 2018

What this PR does / why we need it: This adds validation to the kube-scheduler so that we're not accepting bogus values to the kube-scheduler. As requested by @bsalamat in issue #66743

Which issue(s) this PR fixes:
Fixes #66743

Special notes for your reviewer:

  • Not sure if this validation is too heavy handed. Would love some feedback.
  • I started working on this before I realized @islinwb was also working on this same problem... [WIP]validate KubeSchedulerConfiguration and kube-scheduler flags #66787 I put this PR up anyways since I'm sure good code exists in both. I wasn't aware of the /assign command so didn't assign myself before starting work.
  • I didn't have time to work on adding validation to deprecated cli options. If the rest of this looks ok, I can finish that up.
  • I hope the location of IsValidSocketAddr is correct. Lmk if it isn't.

Release note:

Adding validation to kube-scheduler at the API level

@k8s-ci-robot k8s-ci-robot added release-note Denotes a PR that will be considered when it comes time to generate release notes. size/L Denotes a PR that changes 100-499 lines, ignoring generated files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. sig/scheduling Categorizes an issue or PR as relevant to SIG Scheduling. labels Jul 30, 2018
@k8s-github-robot k8s-github-robot added the kind/api-change Categorizes issue or PR as related to adding, removing, or otherwise changing an API label Jul 30, 2018
@noqcks
Copy link
Contributor Author

noqcks commented Jul 30, 2018

/assign @bsalamat

Copy link
Member

@bsalamat bsalamat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, @noqcks!
Some early comments.

var errs []string
ip, port, err := net.SplitHostPort(value)
if err != nil {
return append(errs, "must be a valid socket address format, (e.g. 0.0.0.0:10254)")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should support IPv6 as well. So, you may want to augment your example.

@@ -511,3 +511,28 @@ func TestIsFullyQualifiedName(t *testing.T) {
}
}
}

func TestIsValidSocketAddr(t *testing.T) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please add IPv6 examples as well.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added.

"time"
)

func TestValidateKubeSchedulerConfiguration(t *testing.T) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you also add a test that the old style (deprecated) options still work?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added some validations for deprecated options @bsalamat, but for some reason the function ListAlgorithmProviders was not returning the proper values I would expect "ClusterAutoscalerProvider | DefaultProvider" and was instead returning an empty string 🤔 .

I'm not sure exactly how I could get this to work. I was planning on using factory.ListAlgorithmProviders() in the Validate function. If you have any idea of a way I could get the list of valid algorithm providers I would love to understand. Thanks.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The use of different algorithm providers are not very important in my opinion. Actually, I think it is not used anymore (I am not sure though).

@@ -0,0 +1,109 @@
/*
Copyright 2017 The Kubernetes Authors.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2018

if len(cc.SchedulerName) == 0 {
allErrs = append(allErrs, field.Required(field.NewPath("schedulerName"), ""))
}

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the empty lines bellow {s can be removed here in ValidateKubeSchedulerConfiguration().

allErrs = append(allErrs, field.Invalid(fldPath.Child("qps"), cc.QPS, "must be non-negative value"))
}
return allErrs

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please, remove this empty line.

allErrs = append(allErrs, field.Required(fldPath.Child("kubeConfigFile"), ""))
}
if cc.QPS < 0 {
allErrs = append(allErrs, field.Invalid(fldPath.Child("qps"), cc.QPS, "must be non-negative value"))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

must be -> must be a

func ValidateSchedulerPolicySource(cc *componentconfig.SchedulerPolicySource, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
if cc.File == nil && cc.ConfigMap == nil {
allErrs = append(allErrs, field.Invalid(fldPath.Child("file"), nil, "need to set atleast one of File or ConfigMap"))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

need to set atleast one of File or ConfigMap
->
needs to set either File or ConfigMap
?

allErrs = append(allErrs, field.Invalid(fldPath.Child("leaseDuration"), cc.LeaseDuration, "must be greater than or equal to 0"))
}
if cc.RenewDeadline.Duration < 0 {
allErrs = append(allErrs, field.Invalid(fldPath.Child("renewDeadline"), cc.LeaseDuration, "must be positive integer"))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a positive

allErrs = append(allErrs, field.Invalid(fldPath.Child("renewDeadline"), cc.RenewDeadline, "RenewDeadline must be less than or equal to LeaseDuration"))
}
if cc.RetryPeriod.Duration <= 0 {
allErrs = append(allErrs, field.Invalid(fldPath.Child("retryPeriod"), cc.RetryPeriod, "must be positive integer"))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

a positive

@@ -0,0 +1,199 @@
/*
Copyright 2014 The Kubernetes Authors.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

2018

@neolit123
Copy link
Member

@noqcks thanks for the PR.
please make sure you run ./hack/update-bazel.sh and include any file changes in this PR.

@dims
Copy link
Member

dims commented Jul 31, 2018

/ok-to-test

@k8s-ci-robot k8s-ci-robot removed the needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. label Jul 31, 2018
@neolit123
Copy link
Member

neolit123 commented Jul 31, 2018

@noqcks
hi, the bazel test is complaining about:

I0731 23:35:06.761] /bazel-scratch/.cache/bazel/_bazel_root/e9f728bbd90b3fba632eb31b20e1dacd/sandbox/linux-sandbox/4523/execroot/main/cmd/kube-scheduler/app/options/options.go:188:15: cannot use validation.ValidateKubeSchedulerConfiguration(&o.ComponentConfig) (type field.ErrorList) as type []error in append

edit: have a look at the failing tests logs by clicking their link links.

@neolit123
Copy link
Member

@noqcks

the verify test indicates some small problems:
https://k8s-gubernator.appspot.com/build/kubernetes-jenkins/pr-logs/pull/66799/pull-kubernetes-verify/100514/:

pkg/apis/componentconfig/validation/validation.go:25:1: exported function ValidateKubeSchedulerConfiguration should have comment or be unexported
pkg/apis/componentconfig/validation/validation.go:48:1: exported function ValidateClientConnectionConfiguration should have comment or be unexported
pkg/apis/componentconfig/validation/validation.go:59:1: exported function 
....

@neolit123
Copy link
Member

@noqcks the e2e tests flake from time to time.

@noqcks
Copy link
Contributor Author

noqcks commented Aug 1, 2018

@neolit123 not sure how I can debug these failed e2e tests 🤔I can't find anything in the logs that shows an error on my side. lmk if you have any ideas.

@neolit123
Copy link
Member

@noqcks

possibly flakes, still.
hint: call /test on the red [x] tests only.

/test pull-kubernetes-e2e-gce
/test pull-kubernetes-e2e-gce-device-plugin-gpu
/test pull-kubernetes-kubemark-e2e-gce-big

@neolit123
Copy link
Member

@noqcks
just babysit the tests with the /test xxxxxx command until they become green.

@noqcks
Copy link
Contributor Author

noqcks commented Aug 1, 2018

I may try again a little later tonight. I checked a couple other PRs and they also seem to be failing e2e tests in the same manner.

Thank you for the help

@cblecker
Copy link
Member

cblecker commented Aug 1, 2018

/retest

if cc.File == nil && cc.ConfigMap == nil {
allErrs = append(allErrs, field.Invalid(fldPath.Child("file"), nil, "needs to set either File or ConfigMap"))
if cc == nil {
allErrs = append(allErrs, field.Invalid(fldPath.Child("policy"), nil, "need to set Policy"))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could be refactored as:

allErrs := field.ErrorList{}
if cc == nil {
	return append(allErrs, field.Invalid(fldPath.Child("policy"), nil, "need to set Policy"))
}
if cc.File == nil && cc.ConfigMap == nil {
	return append(allErrs, field.Invalid(fldPath.Child("file"), nil, "need to set either File or ConfigMap"))
}
return allErrs

to avoid indenting the } else part.

@noqcks
Copy link
Contributor Author

noqcks commented Aug 2, 2018

@neolit123 pull-kubernetes-kubemark-e2e-gce-big seems to be running an older commit 🤔 Is there a way I can make it run on 31e73be


func TestValidateDeprecatedKubeSchedulerConfiguration(t *testing.T) {
scenarios := map[string]struct {
isExpectedFailure bool
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

optional: s/isExpectedFailure/expectedToFail/

"time"
)

func TestValidateKubeSchedulerConfiguration(t *testing.T) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The use of different algorithm providers are not very important in my opinion. Actually, I think it is not used anymore (I am not sure though).

// ValidateSchedulerPolicySource ensures validation of the SchedulerPolicySource struct
func ValidateSchedulerPolicySource(cc *componentconfig.SchedulerPolicySource, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
if cc.File == nil && cc.ConfigMap == nil {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Scheduler policy is not mandatory. If no policy is provided, the scheduler uses its own default config.

// ValidateClientConnectionConfiguration ensures validation of the ClientConnectionConfiguration struct
func ValidateClientConnectionConfiguration(cc *componentconfig.ClientConnectionConfiguration, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
if len(cc.KubeConfigFile) == 0 {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think KubeConfigFile is mandatory either.

// ValidateKubeSchedulerLeaderElectionConfiguration ensures validation of the KubeSchedulerLeaderElectionConfiguration struct
func ValidateKubeSchedulerLeaderElectionConfiguration(cc *componentconfig.KubeSchedulerLeaderElectionConfiguration, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
allErrs = append(allErrs, ValidateLeaderElectionConfiguration(&cc.LeaderElectionConfiguration, field.NewPath("leaderElectionConfiguration"))...)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should validate leader election config only when leader election is enabled.

// ValidateLeaderElectionConfiguration ensures validation of the LeaderElectionConfiguration struct
func ValidateLeaderElectionConfiguration(cc *componentconfig.LeaderElectionConfiguration, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
if cc.LeaseDuration.Duration <= 0 {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am not sure if 0 is a valid Duration. If it is not, the error message at the next line should be changed.

Copy link
Contributor Author

@noqcks noqcks Aug 3, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if cc.RenewDeadline.Duration > cc.LeaseDuration.Duration {
allErrs = append(allErrs, field.Invalid(fldPath.Child("renewDeadline"), cc.RenewDeadline, "RenewDeadline must be less than or equal to LeaseDuration"))
}
if cc.RetryPeriod.Duration <= 0 {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

similar to the previous comment.

if !cc.LeaderElect {
return allErrs
}
if cc.LeaseDuration.Duration < 1 {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actually, the error condition should remain as cc.LeaseDuration.Duration <= 0 here and below.

@timothysc timothysc removed their request for review August 4, 2018 15:12
@noqcks
Copy link
Contributor Author

noqcks commented Aug 7, 2018

ready for another review on this I believe @bsalamat

Copy link
Member

@bsalamat bsalamat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, @noqcks! Mostly minor comments.

for _, msg := range validation.IsValidSocketAddr(cc.MetricsBindAddress) {
allErrs = append(allErrs, field.Invalid(field.NewPath("metricsBindAddress"), cc.MetricsBindAddress, msg))
}
if 0 <= cc.HardPodAffinitySymmetricWeight && cc.HardPodAffinitySymmetricWeight >= 100 {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

0 and 100 are valid. So, you should replace <= and >= with < and >.

return allErrs
}
if cc.LeaseDuration.Duration <= 0 {
allErrs = append(allErrs, field.Invalid(fldPath.Child("leaseDuration"), cc.LeaseDuration, "must be non-negative"))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the error message states that the value "must be non-negative". Non-negative includes zero, but zero causes an error. So, the error message should be changed to "must be positive" or "must be larger than zero". The same problem exists in the following checks as well.

func ValidateKubeSchedulerLeaderElectionConfiguration(cc *componentconfig.KubeSchedulerLeaderElectionConfiguration, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
allErrs = append(allErrs, ValidateLeaderElectionConfiguration(&cc.LeaderElectionConfiguration, field.NewPath("leaderElectionConfiguration"))...)
if len(cc.LockObjectNamespace) == 0 {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When cc.LeaderElect is false, we should skip these two checks too.

if cc.RetryPeriod.Duration <= 0 {
allErrs = append(allErrs, field.Invalid(fldPath.Child("retryPeriod"), cc.RetryPeriod, "must be non-negative"))
}
if cc.LeaseDuration.Duration <= cc.RenewDeadline.Duration {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LeaseDuration and RenewDeadline can be equal and that's not an error. Please replace <= by <.

},
}

renewDeadlineExceedsLeaseDuration := validConfig.DeepCopy()
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please add test cases for renewDeadline and LeaseDuration being zero as well?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added

@k8s-ci-robot k8s-ci-robot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Aug 27, 2018
@bsalamat bsalamat added this to the v1.12 milestone Aug 27, 2018
Copy link
Member

@bsalamat bsalamat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Aug 27, 2018
@wilberusa
Copy link

wilberusa commented Aug 27, 2018 via email

@noqcks
Copy link
Contributor Author

noqcks commented Aug 27, 2018

@luxas ready for review

Copy link
Member

@luxas luxas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm
Thanks!

@luxas
Copy link
Member

luxas commented Aug 29, 2018

ping @deads2k @liggitt for the final approval

allErrs = append(allErrs, field.Invalid(field.NewPath("metricsBindAddress"), cc.MetricsBindAddress, msg))
}
if cc.HardPodAffinitySymmetricWeight < 0 || cc.HardPodAffinitySymmetricWeight > 100 {
allErrs = append(allErrs, field.Invalid(field.NewPath("hardPodAffinitySymmetricWeight"), cc.HardPodAffinitySymmetricWeight, "not in valid range 0-100"))
Copy link
Member

@liggitt liggitt Aug 29, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

where is this range documented or enforced today? It is described in the API type field godoc, but not in the CLI flag help, which is where most users are currently setting it.

  • what is the current behavior if a negative number is set via the CLI?
  • what is the current behavior if a number over 100 is set via the CLI?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please also add that to the flag help. if setting this to a value less than 0 or greater than 100 does not prevent the scheduler from working today, then I wouldn't make this a fatal error.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added in 3f7830f6826b0ac8b5170f00014d4aaee3fb621f

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if setting this to a value less than 0 or greater than 100 does not prevent the scheduler from working today, then I wouldn't make this a fatal error.

can you comment on this? @bsalamat, do you know what the effect of setting this to a value outside the 0-100 range is?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@liggitt Scheduler has a check to ensure that this value is between 1 and 100. This is done at the scheduler creation. So, it was not possible to provide a value out of this range before this PR.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, great

Copy link
Member

@liggitt liggitt Aug 31, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does that mean the allowed range is 1-100 or 0-100? Or is 0 a marker value that means to disable that weight?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

0 is changed to the default weight in our defaulting logic.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I am referring to this piece of code:

obj.HardPodAffinitySymmetricWeight = api.DefaultHardPodAffinitySymmetricWeight

}
if cc.LeaseDuration.Duration < cc.RenewDeadline.Duration {
allErrs = append(allErrs, field.Invalid(fldPath.Child("leaseDuration"), cc.RenewDeadline, "LeaseDuration must be greater than RenewDeadline"))
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is ResourceLock not required?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added in a5554d8dc7b46622ed8bb3c9fffe21a0ea247f94

func ValidateClientConnectionConfiguration(cc *config.ClientConnectionConfiguration, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
if cc.QPS < 0 {
allErrs = append(allErrs, field.Invalid(fldPath.Child("qps"), cc.QPS, "must be non-negative"))
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is not accurate... a negative number disables QPS rate limiting today

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is the only validation I see around the client config struct today:

func validateClientConnectionConfiguration(config apimachineryconfig.ClientConnectionConfiguration, fldPath *field.Path) field.ErrorList {
allErrs := field.ErrorList{}
allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(config.Burst), fldPath.Child("Burst"))...)
return allErrs
}

that could be useful to promote to a reusable method

Copy link
Contributor Author

@noqcks noqcks Aug 29, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, I'll fix.

For Burst, is there any range that's not accepted?

}

qpsLessThanZero := validConfig.DeepCopy()
qpsLessThanZero.QPS = -1
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

negative numbers are accepted today and disable client-side rate limiting. please add a test ensuring this continues to be accepted.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added in 125f64b

@k8s-ci-robot k8s-ci-robot removed the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Aug 29, 2018
@noqcks
Copy link
Contributor Author

noqcks commented Aug 29, 2018

@liggitt ready for another review

@liggitt
Copy link
Member

liggitt commented Aug 31, 2018

One last question on the 0-100 range, might need a doc update depending on what is actually allowed. Lgtm otherwise after a squash

@liggitt
Copy link
Member

liggitt commented Sep 1, 2018

/approve

will leave lgtm to @bsalamat after squash

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Sep 1, 2018
adding validation for componentconfig

adding validation to cmd kube-scheduler

Add support for ipv6 in IsValidSocketAddr function

updating copyright date in componentconfig/validation/validation.go

updating copyright date in componentconfig/validation/validation_test.go

adding validation for cli options

adding BUILD files

updating validate function to return []errors in cmd/kube-scheduler

ok, really returning []error this time

adding comments for exported componentconfig Validation functions

silly me, not checking structs along the way :'(

refactor to avoid else statement

moving policy nil check up one function

rejigging some deprecated cmd validations

stumbling my way around validation slowly but surely

updating according to review from @bsalamat

- not validating leader election config unless leader election is enabled
- leader election time values cannot be zero
- removing validation for KubeConfigFile
- removing validation for scheduler policy

leader elect options should be non-negative

adding test cases for renewDeadline and leaseDuration being zero

fixing logic in componentconfig validation 😅

removing KubeConfigFile reference from tests as it was removed in master

kubernetes@2ff9bd6

removing bogus space after var assignment

adding more tests for componentconfig based on feedback

making updates to validation because types were moved on master

update bazel build

adding validation for staging/apimachinery

adding validation for staging/apiserver

adding fieldPaths for staging validations

moving staging validations out of componentconfig

updating test case scenario for staging/apimachinery

./hack/update-bazel.sh

moving kube-scheduler validations from componentconfig

./hack/update-bazel.sh

removing non-negative check for QPS

resourceLock required

adding HardPodAffinitySymmetricWeight 0-100 range to cmd flag help section
@noqcks
Copy link
Contributor Author

noqcks commented Sep 1, 2018

squashed

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Sep 3, 2018
Copy link
Member

@bsalamat bsalamat left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm

@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: bsalamat, liggitt, luxas, noqcks

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@fejta-bot
Copy link

/retest
This bot automatically retries jobs that failed/flaked on approved PRs (send feedback to fejta).

Review the full test history for this PR.

Silence the bot with an /lgtm cancel comment for consistent failures.

@k8s-github-robot
Copy link

/test all [submit-queue is verifying that this PR is safe to merge]

@k8s-github-robot
Copy link

Automatic merge from submit-queue. If you want to cherry-pick this change to another branch, please follow the instructions here: https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md.

@k8s-github-robot k8s-github-robot merged commit f3b98a0 into kubernetes:master Sep 4, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. area/apiserver cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/api-change Categorizes issue or PR as related to adding, removing, or otherwise changing an API lgtm "Looks good to me", indicates that a PR is ready to be merged. release-note Denotes a PR that will be considered when it comes time to generate release notes. sig/api-machinery Categorizes an issue or PR as relevant to SIG API Machinery. sig/scheduling Categorizes an issue or PR as relevant to SIG Scheduling. size/XL Denotes a PR that changes 500-999 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Add validation for kube-scheduler configuration options