Question: // Check iptables chain and rules epIpt := netlinktest.ExpectedIptablesChain{ string(kubeServicesChain): { <ins> {JumpChain: string(KubeLoadBalancerChain), MatchSet: kubeLoadBalancerSet}, {JumpChain: string(KubeMarkMasqChain), MatchSet: kubeClusterIPSet}, {JumpChain: string(KubeMarkMasqChain), MatchSet: kubeExternalIPSet}, {JumpChain: "ACCEPT", MatchSet: kubeExternalIPSet}, // With externalTrafficOnlyArgs {JumpChain: "ACCEPT", MatchSet: kubeExternalIPSet}, // With dstLocalOnlyArgs {JumpChain: string(KubeNodePortChain), MatchSet: ""}, </ins> {JumpChain: "ACCEPT", MatchSet: kubeClusterIPSet}, {JumpChain: "ACCEPT", MatchSet: kubeLoadBalancerSet}, <del> {JumpChain: "ACCEPT", MatchSet: kubeExternalIPSet}, </del> }, } checkIptables(t, ipt, epIpt)

<!-- Please use this template while reporting a bug and provide as much info as possible. Not doing so may result in your bug not being addressed in a timely manner. Thanks! If the matter is security related, please disclose it privately via --ipvs mode didn't preserve client IP for NodePort Service with protocol SCTP and ExternalTrafficPolicy Local. iptables mode works fine. ipvs mode with TCP and UDP protocol works fine. Client IP for NodePort Service should be preseved when ExternalTrafficPolicy is Local regardless of the mode and the protocol. kube-proxy mode to ipvs a NodePort service with protocol SCTP and ExternalTrafficPolicy Local the NodePort service, the client IP was not preserved This is caused by wrong order of iptables rules that match kubeNodePortLocalSetSCTP and kubeNodePortSetSCTP: Kubernetes version (use ): v1.22.0 Cloud provider or hardware configuration: OS (e.g: ): Kernel (e.g. ): Install tools: Network plugin and version (if this is a network-related bug): Others:
/sig network /assign
/triage accepted


Question: Status: v1.NodeStatus{ Conditions: []v1.NodeCondition{ { <ins> Type:               v1.NodeOutOfDisk, Status:             v1.ConditionFalse, Reason:             "KubeletHasSufficientDisk", Message:            fmt.Sprintf("kubelet has sufficient disk space available"), LastHeartbeatTime:  metav1.Time{}, LastTransitionTime: metav1.Time{}, }, { </ins> Type:               v1.NodeMemoryPressure, Status:             v1.ConditionFalse, Reason:             "KubeletHasSufficientMemory",

Both https://k8s- and https://k8s- started failing recently. Their 1.7 counterparts are passing. The difference between the last passing and the first failing tests is: Probably something in broke the tests. /sig scheduling /cc /kind bug
It looks like there isn't enough cpu on the master to run the cos-nvidia-installer daemonset. Did we add any addons recently?
My previous comment is a red herring. It is an issue with . Ill post a fix soon. From the scheduler logs on the master:
that's a benign error. The daemonset is not expected to run on the master. But there is no easy way to express that request in our APIs.
Yes, the pod not scheduling on the master is benign. The actual error is that we do not report node condition , so it is left as . The fix is to report that is false.
The tests are still failing. /reopen
/assign
I will be updating to track progress.
tests are green again! /close


Question: set = obj.(*apps.StatefulSet) } if set.Status.Replicas != 3 { <del> t.Error("Falied to scale statefulset to 3 replicas") </del> <ins> t.Errorf("set.Status.Replicas = %v; want 3", set.Status.Replicas) </ins> } }

Is this a BUG REPORT or FEATURE REQUEST?: /kind feature What happened: Unit test error message match the conventional Go style: For example: if got, want := set.Status.Replicas, 3; got != want { t.Errorf("set.Status.Replicas = %v; want %v", got, want) }
There are no sig labels on this issue. Please by: a sig: e.g., to notify the contributor experience sig, OR the label manually: e.g., to apply the label Note: Method 1 will trigger an email to the group. You can find the group list and label list . The in the method 1 has to be replaced with one of these: bugs, feature-requests, pr-reviews, test-failures, proposals
/sig testing
/assign
/reopen


Question: "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/sets" <ins> utiltesting "k8s.io/client-go/util/testing" </ins> // util.go uses api.Codecs.LegacyCodec so import this package to do some // resource initialization. _ "k8s.io/kubernetes/pkg/apis/core/install" "k8s.io/kubernetes/pkg/apis/core/v1/helper" <ins> "k8s.io/kubernetes/pkg/util/mount" </ins> ) var nodeLabels map[string]string = map[string]string{

<!-- Thanks for filing an issue! Before hitting the button, please answer these questions.--Is this a request for help? (If yes, you should use our troubleshooting guide and community support channels, see ): No What keywords did you search in Kubernetes issues before filing this one? (If you have found any duplicates, you should instead reply there.): glusterfs, umount Is this a BUG REPORT or FEATURE REQUEST? (choose one): BUG REPORT <!-- If this is a BUG REPORT, please: Fill in as much of the template below as you can. If you leave out information, we can't help you as well. If this is a FEATURE REQUEST, please: Describe in detail the feature/behavior/change you'd like to see. In both cases, be ready for followup questions, and please respond in a timely manner. If we can't reproduce a bug or think a feature already exists, we might close your issue. If we're wrong, PLEASE feel free to reopen it and explain why. --Kubernetes version (use ): Client Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"", GitTreeState:"clean", BuildDate:"2017-01-12T04:57:25Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} Server Version: version.Info{Major:"1", Minor:"5", GitVersion:"v1.5.2", GitCommit:"", GitTreeState:"clean", BuildDate:"2017-01-12T04:52:34Z", GoVersion:"go1.7.4", Compiler:"gc", Platform:"linux/amd64"} Environment: Cloud provider or hardware configuration: aws OS (e.g. from /etc/os-release): ubuntu 16.04 Kernel (e.g. ): Linux hostname 4.4.0-59-generic -Ubuntu SMP Fri Jan 6 17:47:47 UTC 2017 x8664 x8664 x86_64 GNU/Linux Install tools: terraform/ansible Others: What happened: Kubernetes allows users to delete a glusterfs pvc before it is has been umounted from all kubelets. This leaves orphaned mount points on the kubelet boxes and the kubelets looping trying and remove them.

What you expected to happen: The kubelet should successfully remove the mountpoints. How to reproduce it (as minimally and precisely as possible): Example deployment with with a heketi/glusterfs storageclass. gluster- To reproduce : kubectl create -f gluster- <wait for all containers to come upkubectl delete -f gluster- This will cause heketi to remove the glusterfs volume before some of the pods have umounted it. All mount points still online will error with: 'transport endpoint is not connected' These can still be umounted, however the way the code is written it will try to "stat" the mount point before trying the umount. This will error with something like the following: This will prevent the umount and pod cleanup. Anything else we need to know: The code looks something like this: I realise the importance of checking to see if a mountpoint is still up before removing it. My first thoughts were to restrict the stat checks to only error if the mount point didn't actually exist. Also checking /proc/mounts seems like a more reliable method for checking if something is mounted on linux.
Would prevent this scenario?
[MILESTONENOTIFIER] Milestone Removed From Issue Important: Code freeze is in effect and only issues with may remain in the v1.9 milestone. <details<summaryHelp</summary<ul<li<a href=""Additional instructions</a</li<li<a href=""Commands for setting labels</a</li</ul</details


Question: set_num_migs if [[ ${KUBE_USE_EXISTING_MASTER:-} == "true" ]]; then <ins> detect-master </ins> parse-master-env create-nodes elif [[ ${KUBE_REPLICATE_EXISTING_MASTER:-} == "true" ]]; then

Create a service , and manually create an Endpoints with an external IP address. Access the service proxy, it fails with 503, "no endpoints available for service ...". I would expect proxy to work (parity with pod-endpoint based Services). Note: 198.18.0.254 is RFC 6890 (reserved for benchmarking). I was using it to test timeout scenarios. With this example, I expect to timeout. Instead, it fails immediately with 503. If I comment out the below validation and compile kube-apiserver, it works as I expect: <details</details<detailsGKE </detailsNo response No response No response No response
This issue is currently awaiting triage. If a SIG or subproject determines this is a relevant issue, they will accept it by applying the label and provide further guidance. The label can be by org members by writing in a comment. <detailsInstructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
/cc /cc
is ok to be able to use IPs that don't belong to pod so the apiserver can be used as a proxy to external endpoints? There were several CVEs on that area, or may remember better than me
No. Limiting the apiserver proxy to IPs set by an actor with pod status permissions is intentional
Xref
/remove-kind bug /kind documentation this is working as intended, if it is unclear this is as intended, we should improve documentation to make that clear
Agree it is WAI - what's the right place to document this? k/website or is ther an API doc-comment for /proxy/ that feeds into openapi? I don't see any obvious place to document the limitations of that sub-resource
Looks like addressed this but was inadvertently lost near August 2022.
should we remove this too?
Yeah, do you want to do it or shall I? Antonio Ojea
Tim Hockin


Question: "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/runtime/serializer" utilnet "k8s.io/apimachinery/pkg/util/net" <ins> "k8s.io/apimachinery/pkg/util/wait" </ins> ) type tcpLB struct {

<!-- Please use this template while reporting a bug and provide as much info as possible. Not doing so may result in your bug not being addressed in a timely manner. Thanks! If the matter is security related, please disclose it privately via --In , client-go don't share transport when c.Dial is not nil, but kubelet custorm Dial by default, After PR is integrated, the connections between kubelet and kube-apiserver in our cluster with 4000 nodes increases by five times. kubelet share transport by default, one kubelet only keep one connection to kube-apiserver. start kubelet with rotate-certificates=false Kubernetes version (use ): v1.19.4 Cloud provider or hardware configuration: OS (e.g: ):EulerOS 2.9 Kernel (e.g. ): Install tools: Network plugin and version (if this is a network-related bug): Others:
/sig api-machinery /sig node
/triage accepted /assign
how many connections between kubelet and kube apiserver on one node after PR in your case? it's mentioned it increases by five times, does that mean before the PR, there is one connection, after the PR, there are 5 or 6 connections?
before the PR, there is one connection, after the PR, there 3 connections, there are some customization capabilities in our product, and we'll have another two connections. In our kubelet startup parameters, rotate-certificates=false
Some increase was expected, since multiple REST clients constructed from a config with a custom dialer cannot safely share a transport, and client-go constructs a REST client for each API group/version accessed. Something like would be required to rework how client-go constructs clients to start sharing REST clients above the transport level between API groups/versions. I think this is working as intended until client-go client construction is reworked.
do you know where in the code the 5 connections are created? are they all safe to share the transport? also are the 5 connections all active all the time? if not, IdleConnTimeout should cause the connection to be closed.
I test the code on master branch, if I change rotateCertificates to false, there are 6 connections between kubelet and kube-apiserver ! !

transport will share when config.Transport not nil if rotateCertificates is true, config.Transport will been set in kubeletcertificate.UpdateTransport but if rotateCertificates is false, config.Transport will not been set.
/area kubelet Any update on this issue?
I will work on this issue
Hi if rotate-certificates=false kubelet customizes the dialer to provide a closeAllConns to close the connection when the connection is dead but not been closed. In , there is a discuss about another solution after client-go has HTTP 2.0 health check, so we don't need this change. So we can solve the current problem by reverting . I have submitted to revert , and this change requires your final confirmation. Thanks you.
are we guaranteed kubelets always speak to kube-apiserver over http/2? if they use a load-balancer that is not http/2 capable, isn't the "close all connections" fix still required as a backstop?
I thought http1.1 wasn't affected because it will always try to connect a new connection
I'm not confident in that. The original issue dated back to before client-go defaulted to http/2, and we definitely saw issues with stuck TCP connections then.
yeah, I could reproduce it with http1.1, however, it can be solved using the transport CloseIdleConnections method please take a look , the last commit needs more work, but I think that the 2 first commits exposeing the CloseIdleConnections() are useful
ok, this seems to work , but it will be nice to have more feedback would you be able to test and see if this solve your issue?
Hi aojea, I have test on v1.21.1 before merge , there are 6 connections to kube-apiserver from kubelet ! after merge , there is only 1 connection to kube-apiserver from kubelet ! so, can solve my issue. thank you very much.


Question: func SetupNVIDIAGPUNode(f *framework.Framework, setupResourceGatherer bool) *framework.ContainerResourceGatherer { logOSImages(f) <ins> var err error var ds *appsv1.DaemonSet </ins> dsYamlURLFromEnv := os.Getenv("NVIDIA_DRIVER_INSTALLER_DAEMONSET") if dsYamlURLFromEnv != "" { <del> dsYamlURL = dsYamlURLFromEnv </del> <ins> // Using DaemonSet from remote URL framework.Logf("Using remote nvidia-driver-installer daemonset manifest from %v", dsYamlURLFromEnv) ds, err = e2emanifest.DaemonSetFromURL(dsYamlURLFromEnv) framework.ExpectNoError(err, "failed get remote") </ins> } else { <del> dsYamlURL = "https://raw.githubusercontent.com/GoogleCloudPlatform/container-engine-accelerators/master/daemonset.yaml" </del> <ins> // Using default local DaemonSet framework.Logf("Using default local nvidia-driver-installer daemonset manifest.") data, err := e2etestfiles.Read("test/e2e/testing-manifests/scheduling/nvidia-driver-installer.yaml") framework.ExpectNoError(err, "failed to read local manifest for nvidia-driver-installer daemonset") ds, err = e2emanifest.DaemonSetFromData(data) framework.ExpectNoError(err, "failed to parse local manifest for nvidia-driver-installer daemonset") </ins> } gpuResourceName = e2egpu.NVIDIAGPUResourceName <del> framework.Logf("Using %v", dsYamlURL) // Creates the DaemonSet that installs Nvidia Drivers. ds, err := e2emanifest.DaemonSetFromURL(dsYamlURL) framework.ExpectNoError(err) </del> ds.Namespace = f.Namespace.Name _, err = f.ClientSet.AppsV1().DaemonSets(f.Namespace.Name).Create(context.TODO(), ds, metav1.CreateOptions{}) framework.ExpectNoError(err, "failed to create nvidia-driver-installer daemonset")

<!-- Please only use this template for submitting reports about continuously failing tests or jobs in Kubernetes CI --Which jobs are failing: Which test(s) are failing: Since when has it been failing: Testgrid link: Reason for failure: Anything else we need to know: /sig scheduling /cc /priority critical-urgent /milestone v1.19
Appears to have started failing after , which seems unrelated. /cc
according to the build log , the test timed out because it could not find gpu on any nodes. Is it probably a test-infra issue?
I think you are right, I don't see anything changing in the config so must be underlying infra issue /cc
yes, the issue is that the nodes do not have the GPU required to run the test The same infra commit () was used for the last passing job () and the first failing job ()
not sure who owns the node setup for the gpu tests, but I would guess
test-infra-maintainers owns e.g. prow, I don't think anything there relates to the GPUs the infra commit (test-infra commit) not changing suggests perhaps a change to the scripts / test harness in this repo?
the delta between the passing and failing runs only changed an ingress e2e test ()
The image is used in when installing the Nvidia driver. Given that ([1]) is lastly updated on July 17, 2020 at 12:22:11 AM UTC-7 (latest tag points to v2.0.0), does it seem this version is incompatible? BTW: the latest successful run pulled the image with SHA: 8d86a652759f80595cafed7d3dcde3dc53f57f9bc1e33b27bc3cfa7afea8d483 ([2]), maybe we can try that SHA specifically? [1]: [2]:
Forgot to mention, the shows that the deamonset was pending:
yes, and the log also shows that the pod was pending because the init container failed to complete could we change the image to  whose digest is exactly .


Question: // Start pod By(fmt.Sprintf("Creating pod %s", pod.Name)) <del> pod, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(pod) Expect(err).ToNot(HaveOccurred(), "while creating pod") </del> <ins> var podClient *framework.PodClient podClient = f.PodClient() pod = podClient.Create(pod) </ins> defer func() { framework.DeletePodWithWait(f, f.ClientSet, pod) }() <del> err = framework.WaitForPodRunningInNamespace(f.ClientSet, pod) </del> <ins> err := framework.WaitForPodRunningInNamespace(f.ClientSet, pod) </ins> Expect(err).ToNot(HaveOccurred(), "while waiting for pod to be running") <del> var podClient *framework.PodClient podClient = f.PodClient() </del> By("updating the pod") podClient.Update(podName, func(pod *v1.Pod) { pod.ObjectMeta.Annotations = map[string]string{"mysubpath": "newsubpath"}

Which jobs are failing: All new tests introduced for api change Which test(s) are failing: New alpha subpathExpr tests [Feature:VolumeSubpathEnvExpansion][NodeAlphaFeature:VolumeSubpathEnvExpansion] Existing tests are working fine and the whole suite works correctly in the gce suite https://k8s- Since when has it been failing: 21st February 2019 (since merge of PR) Testgrid link: https://k8s- Reason for failure: Investigation shows that node e2e tests use a different framework pod creation pattern Doing some comparisons of tests that work and those that don't reveals differences in the standard client set as and the existing ones which do work go through the intermediate which uses The version has an additional function specifically for node tests
/sig storage
/sig node /sig test
/assign
/cc
/sig test


Question: "//pkg/util/net:go_default_library", "//pkg/util/proxy:go_default_library", "//pkg/util/runtime:go_default_library", <ins> "//pkg/util/sets:go_default_library", </ins> "//pkg/util/strategicpatch:go_default_library", "//pkg/util/wsstream:go_default_library", <ins> "//pkg/version:go_default_library", </ins> "//pkg/watch:go_default_library", "//pkg/watch/versioned:go_default_library", "//vendor:bitbucket.org/ww/goautoneg",

Is this expected? Does it mean that we cannot drop and replace alpha api without waiting for the new gcloud version?
cc:
cc
cc:
My money is on the TPR discovery code that is trying to identify TPR versions and hacks them into the list of registered APIs.
I guess it's not on HEAD? Do you have the PR#?
had a PR moving StatefulSet from v1alpha1 to v1beta1 and she didn't have the same problem. It's interesting why graduating PDB will have the problem
My PR has similar failure but different symptom. I created a GCE cluster locally. doesn't give me that error, but addon-manager isn't working properly. From addon-manager container log, I saw similar error:
Ah, I was using new kubectl
was using the newly built kubectl so we didn't see the problem at first. Addon-manager is using 1.4.4 kubectl, so we observed problem later.
Hmm, if the problem is the old versions of kubectl unable to dealing with new REST endpoints, then the problem is hard. I'll take a look.
is correct. See this .
I thought the TPR code was inert by default and required a flag to kick in
It seems the flag is enabled for most commands:
We need to support 1 minor version skew for kubectl, so we have to workaround in the server. We can hide those new APIVersions in the discovery API from old kubectl. I'm going to send a PR. In the mean time, if someone can come up with a better idea.
kubectl bug is fixed in , need to cherrypick the change to 1.4. is working on server side temp fix
should fix the problem.
The issue was "fixed" because the "unable to register" error was ignored (not returned, just logged), see:
that line in doesn't seem like a fix... it seems like it's leaving the client restmapper in an unknown state, which seems bad to me
Yeah it's not really a fix
Looks like kubectl should try to register the version to the existing group. IMO this isn't a blocker for
can you make sure there's a 1.5 issue tracking the failure to register the new versions into existing groups correctly, or we'll have a related issue in the future
Filed to track this


Question: go.uber.org/atomic v1.4.0 // indirect go.uber.org/multierr v1.1.0 // indirect go.uber.org/zap v1.10.0 <ins> golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073 </ins> k8s.io/apimachinery v0.0.0 k8s.io/client-go v0.0.0 k8s.io/klog/v2 v2.5.0

<!-- Please use this template while reporting a bug and provide as much info as possible. Not doing so may result in your bug not being addressed in a timely manner. Thanks! If the matter is security related, please disclose it privately via --What happened: Start kubelet on a Windows node and you will get this error: What you expected to happen: The process start time to be read appropriately for Windows How to reproduce it (as minimally and precisely as possible): Start kubelet on a Windows node Anything else we need to know?: The gauge falls back to but we get this error. This information is avaliable via the windows package so we should be able to get an accurate time. Environment: Kubernetes version (use ): 1.20.1 Cloud provider or hardware configuration: azure OS (e.g: ): Windows 2019 Kernel (e.g. ): Version 10.0..1637 Install tools: aks-engine (but would be any) Network plugin and version (if this is a network-related bug): Others: /sig windows /assign
/triage accepted


Question: // individual resource enablement/disablement is only supported in the extensions/v1beta1 API group for legacy reasons. // all other API groups are expected to contain coherent sets of resources that are enabled/disabled together. if len(tokens) > 2 && (groupVersion != schema.GroupVersion{Group: "extensions", Version: "v1beta1"}) { <del> return nil, fmt.Errorf("invalid key %s, individual resource enablement/disablement is not supported in %s", key, groupVersion.String()) </del> <ins> klog.Warningf("ignoring invalid key %s, individual resource enablement/disablement is not supported in %s, and will prevent starting in future releases", key, groupVersion.String()) continue </ins> } // Exclude group not registered into the registry.

https://k8s- sample failure: (also affecting other CI jobs) cc /sig gcp
/assign We're interested in disabling the job as blocking entirely. We're of the opinion this shouldn't have bee allowed to block the community in the first place. I swear there's a historical issue around tightening the regex somewhere.
... wrong button sorry about that
possibly caused by erroring on invalid values that were previously silently skipped opened to downgrade that error to a warning for a release
Well, I mentioned the idea of making the job optional in
PR out to drop the runifchanged regex from pull-kubernetes-e2e-gke
Confirmed turns the test green
Can call this closed when merges
/pony hooray
Couldn't find a pony matching that query. <detailsIn response to : /pony hooray Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details


Question: * configmaps (aka 'cm') * controllerrevisions * cronjobs <ins> * customresourcedefinition (aka 'crd') </ins> * daemonsets (aka 'ds') * deployments (aka 'deploy') * endpoints (aka 'ep')

<!-- This form is for bug reports and feature requests ONLY! If you're looking for help check and the . --/kind feature What happened: in kubectl 1.7.0 and cluster 1.7.0 What you expected to happen: there is an in the list and tells the short-cut was . How to reproduce it (as minimally and precisely as possible): none Anything else we need to know?: Environment: Kubernetes version (use ):Cloud provider or hardware configuration**: OS (e.g. from /etc/os-release): Kernel (e.g. ): Install tools: Others:
There are no sig labels on this issue. Please by: a sig: e.g., to notify the contributor experience sig, OR the label manually: e.g., to apply the label Note: Method 1 will trigger an email to the group. You can find the group list and label list . The in the method 1 has to be replaced with one of these: bugs, feature-requests, pr-reviews, test-failures, proposals
/sig cli yeah we should do it.
/assign will fix it.


Question: break } } <ins> } else { // ReadOnly rbd volume should not check rbd status of being used to // support mounted as read-only by multiple consumers simultaneously. needValidUsed = !b.rbd.ReadOnly </ins> } err := wait.ExponentialBackoff(backoff, func() (bool, error) { used, rbdOutput, err := util.rbdStatus(&b)

<!-- This form is for bug reports and feature requests ONLY! If you're looking for help check and the . If this may be security issue, please disclose it privately via --Is this a BUG REPORT or FEATURE REQUEST?: What happened: I created a job with parallelism=2, 1 container in each pod, and a rbd volume attached to the container. Attachment was read-only. Only 1 pod got the RBD mounted while the other POD failed with "still in use" in syslog, referencing the code in that checks watchers. Note that this is not the same thing as this: which refers to persistent volumes. This is not a persistent volume -the use case is to map read-only data to multiple containers from a single RBD, like for using a reference data set, etc. According to the documentation this should work (see below). What you expected to happen: I expect this to happen per the documentation: "A feature of RBD is that it can be mounted as read-only by multiple consumers simultaneously. This means that you can pre-populate a volume with your dataset and then serve it in parallel from as many Pods as you need. Unfortunately, RBD volumes can only be mounted by a single consumer in read-write mode - no simultaneous writers allowed." How to reproduce it (as minimally and precisely as possible): Create 2 pods, each with 1 container mapping a single rbd read only. Anything else we need to know?: Environment: Kubernetes version (use ): 4 Cloud provider or hardware configuration: self, x8664 systems OS (e.g. from /etc/os-release): Ubuntu Xenial Kernel (e.g. ): Linux dal1util6p30 4.4.0-116-generic -Ubuntu SMP Mon Feb 12 21:23:04 UTC 2018 x8664 x8664 x86_64 GNU/Linux Install tools: ceph Others: I believe that in the case where a read-only mapping is being requested, the code should not check watchers. Again this is consistent with the documentation but it doesn't work that way. If a PV/PVC is the "right" way to do this it seems seriously overkill and the management overhead is severe, especially in a large scale environment.

The documentation states that the advantage of RBD is to be able to attach read-only volumes to multiple containers concurrently, and this is how I believe it should work. The watcher check is artificial and really needs to apply only to read/write. I can fix this bug myself but would like to understand the reasoning behind it a bit more. Thanks! Leo Reiter
/sig
Reiterating the mentions to trigger a notification: <detailsIn response to : /sig Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
Reiterating the mentions to trigger a notification: <detailsIn response to : /sig Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
I will check the problem.
/assign


Question: { name: "ErrTopologySpreadConstraintsNotMatch should be tried as it indicates that the pod is unschedulable due to topology spread constraints", nodesStatuses: framework.NodeToStatusMap{ <del> "machine1": framework.NewStatus(framework.Unschedulable, algorithmpredicates.ErrTopologySpreadConstraintsNotMatch.GetReason()), </del> <ins> "machine1": framework.NewStatus(framework.Unschedulable, podtopologyspread.ErrReasonConstraintsNotMatch), </ins> "machine2": framework.NewStatus(framework.UnschedulableAndUnresolvable, algorithmpredicates.ErrPodNotMatchHostName.GetReason()), <del> "machine3": framework.NewStatus(framework.Unschedulable, algorithmpredicates.ErrTopologySpreadConstraintsNotMatch.GetReason()), </del> <ins> "machine3": framework.NewStatus(framework.Unschedulable, podtopologyspread.ErrReasonConstraintsNotMatch), </ins> }, expected: map[string]bool{"machine1": true, "machine3": true, "machine4": true}, },

Part of /priority important-soon See example /sig scheduling /kind cleanup
/help
/assign
/remove-help


an APIService that routes to an external API server (e.g. service catalog) via a service in namespace a caBundle in the APIService the external API server with a certificate signed for Result: Normal API requests (get/put/post) work as expected Normal watch requests work as expected Upgrade requests (e.g. websocket watch requests) return a 500 error with text like cc


Question: } pod.Spec.Containers = newContainers if !api.Semantic.DeepEqual(pod.Spec, oldPod.Spec) { <del> // TODO: a better error would include all immutable fields explicitly. allErrs = append(allErrs, errs.NewFieldInvalid("spec.containers", newPod.Spec.Containers, "some fields are immutable")) </del> <ins> allErrs = append(allErrs, errs.NewFieldInvalid("spec", newPod.Spec, "may not update fields other than container.image")) </ins> } newPod.Status = oldPod.Status

For example, creating a service with id 'redis-master10012345678999' fails and the returned message contains the following: "message": "service "redis-master10012345678999" is invalid: name: invalid value 'redis-master10012345678999' 'invalid value' is too general, users should understand exactly what is wrong with the input. for example - is it too long? does it contain characters that are not allowed?
Agree - there is now a place to stick the explanations in the ValidationError - we need to link together validation logic and that string. , abonas wrote:
I checked and it seems there are only two errors that do not have detailed explanation. I'll send a PR to fix this.
This is one:
Thanks for the pointer Brian! I'll send second PR to fix this one.
Still second PR to be sent.


Question: ### Cluster Created by Kubeadm <del> If you are using kubeadm with a [configuration file](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file), you have to add `mode: ipvs` below the `kubeProxy` field as part of the kubeadm configuration. </del> <ins> If you are using kubeadm with a [configuration file](https://kubernetes.io/docs/reference/setup-tools/kubeadm/kubeadm-init/#config-file), you have to add mode: ipvs in a KubeProxyConfiguration (separated by -- that is also passed to kubeadm init). </ins> ```yaml ... <del> kubeProxy: config: mode: ipvs </del> <ins> apiVersion: kubeproxy.config.k8s.io/v1alpha1 kind: KubeProxyConfiguration mode: ipvs </ins> ... ```

says: ... My understanding is, that is not anymore correct. The correct snippet would be:
This issue is currently awaiting triage. If a SIG or subproject determines this is a relevant issue, they will accept it by applying the label and provide further guidance. The label can be by org members by writing in a comment. <detailsInstructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
/sig network
/remove-kimd bug /kind cleanup
/remove-kind bug (typo in previous comment)
/assign


Question: } return sourcePod.Status.PodIP, host } <ins> // createSecondNodePortService creates a service with the same selector as config.NodePortService and same HTTP Port func createSecondNodePortService(f *framework.Framework, config *e2enetwork.NetworkingTestConfig) (*v1.Service, int) { svc := &v1.Service{ ObjectMeta: metav1.ObjectMeta{ Name: secondNodePortSvcName, }, Spec: v1.ServiceSpec{ Type: v1.ServiceTypeNodePort, Ports: []v1.ServicePort{ { Port:       e2enetwork.ClusterHTTPPort, Name:       "http", Protocol:   v1.ProtocolTCP, TargetPort: intstr.FromInt(e2enetwork.EndpointHTTPPort), }, }, Selector: config.NodePortService.Spec.Selector, }, } createdService := config.CreateService(svc) err := framework.WaitForServiceEndpointsNum(f.ClientSet, config.Namespace, secondNodePortSvcName, len(config.EndpointPods), time.Second, wait.ForeverTestTimeout) framework.ExpectNoError(err, "failed to validate endpoints for service %s in namespace: %s", secondNodePortSvcName, config.Namespace) var httpPort int for _, p := range createdService.Spec.Ports { switch p.Protocol { case v1.ProtocolTCP: httpPort = int(p.NodePort) default: continue } } return createdService, httpPort } </ins>

What happened: indicates that we're missing an e2e test for. This specific issue is just a tracker to create a new E2E test that demonstrated .
/sig network
/assign
btw, should this be a part of conformance?
/triage unresolved Comment when the issue is assessed and confirmed. I am a bot run by vllry.
If this issue has been triaged, please comment . If you aren't able to handle this issue, consider unassigning yourself and/or adding the label. I am a bot run by vllry.
/remove-triage unresolved
I can start working on this.
Sure/ are you working full time on it ? If so I'll drop the issue from my work ... Otherwise we can collaborate as I already have some code for this. Let me know. Was hoping to have this done in the next week or so.
I would love to collaborate, especially if you already have some code. But if you want to drop this from your work, I don't mind taking it on full time either. I can pick up from where ever you left off.
ok, if youve got full bandwidth go for it. if make progress on it this wk ill just drop it . I actually dont know where my old branch is for this :), so i guess youll have to start from scratch. One thing to note ~ Might be seeing if any tests can be reused for this or extended in a simple way by just adding a secondary service, rather then writing a full blown test from scratch. Let me know how it goes thanks !
I will let you know how it progresses. Thanks !
thanks for getting this taken care of :) looks like the PR is LGTM.
Thanks for letting me take a stab at it!


Question: ) // NewManager returns a new token manager. <del> func NewManager(c corev1.CoreV1Interface) *Manager { </del> <ins> func NewManager(c clientset.Interface) *Manager { </ins> m := &Manager{ getToken: func(name, namespace string, tr *authenticationv1.TokenRequest) (*authenticationv1.TokenRequest, error) { <del> return c.ServiceAccounts(namespace).CreateToken(name, tr) </del> <ins> if c == nil { return nil, errors.New("cannot use TokenManager when kubelet is in standalone mode") } return c.CoreV1().ServiceAccounts(namespace).CreateToken(name, tr) </ins> }, cache: make(map[string]*authenticationv1.TokenRequest), clock: clock.RealClock{},

/kind bug /priority failing-test /priority important-critical /milestone v1.11 /assign cc All GKE jobs are failing in various release dashboards. Code freeze for 1.11 is a couple of hours away.
Common error appears to be:
Failures seem to align with when was merged. But nothing in that PR seems suspicious. Having verify. Bringing up my own cluster on head to try and get a live cluster.
I have a quick try to reproduce one of the failure test cases by gcloud container clusters create --addons=HttpLoadBalancing,HorizontalPodAutoscaling,KubernetesDashboard --machine-type=n1-standard-2 --image-type=gci --num-nodes=3 --cluster-version=1.11.0-beta.1.222+ test- The cluster isn't up. What I observed is the following: 1) kubelet on master is in crash-loop due to a panic No other master components could be up. 2) kubelet is in crashloop in node as well.
/sig node Looks like has a patch up at
/priority critical-urgent
/status approved-for-milestone
Waiting for new runs to verify the fix. Will reopen this issue if needed
/reopen Reopening this one until its actually verified to ensure it shows up in our tracking queries.
I see the GKE tests cleaning up in the . still doesn't seem to have the change (will have to wait for cutover?). The fix looks promising. Will wait for a couple more runs before I close
[MILESTONENOTIFIER] Milestone Issue Needs Attention Action required: During code freeze, issues in the milestone should be in progress. If this issue is not being actively worked on, please remove it from the milestone. If it is being worked on, please add the label so it can be tracked with other in-flight issues. Action Required: This issue has not been updated since Jun 6. Please provide an update. Note: This issue is marked as , and must be updated every 1 day during code freeze. Example update: <details<summaryIssue Labels</summary- : Issue will be escalated to these SIGs if needed. : Never automatically move issue out of a release milestone; continually escalate to contributor and SIG through all available channels. : Fixes a bug discovered during the current release.

</details<details<summaryHelp</summary<ul<li<a href=""Additional instructions</a</li<li<a href=""Commands for setting labels</a</li</ul</details
all the GKE ones still look good /close


Question: func initImageConfigs(list RegistryList) (map[ImageID]Config, map[ImageID]Config) { configs := map[ImageID]Config{} <del> configs[Agnhost] = Config{list.PromoterE2eRegistry, "agnhost", "2.45"} </del> <ins> configs[Agnhost] = Config{list.PromoterE2eRegistry, "agnhost", "2.47"} </ins> configs[AgnhostPrivate] = Config{list.PrivateRegistry, "agnhost", "2.6"} configs[AuthenticatedAlpine] = Config{list.GcAuthenticatedRegistry, "alpine", "3.7"} configs[AuthenticatedWindowsNanoServer] = Config{list.GcAuthenticatedRegistry, "windows-nanoserver", "v1"}

The image is built as a legacy Schema 1 image and will not work with most runtimes soon: ref:
This issue is currently awaiting triage. If a SIG or subproject determines this is a relevant issue, they will accept it by applying the label and provide further guidance. The label can be by org members by writing in a comment. <detailsInstructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
/sig node
cc You seemed to have built the image from on 2016-06-24T22:29:32 , could you rebuild and push the image?
/sig testing
I actually ran into an issue with this one a few months ago. There was very little in the image for testing and I believe that pointed me to the new test images they are using. We found that this image was quite old and essentially unmaintained.
Where is the new image?
PR to merge stress to agnhost:
Next:


Question: fs.DurationVar(&c.HTTPCheckFrequency.Duration, "http-check-frequency", c.HTTPCheckFrequency.Duration, "Duration between checking http for new data") fs.StringVar(&c.StaticPodURL, "manifest-url", c.StaticPodURL, "URL for accessing additional Pod specifications to run") fs.Var(cliflag.NewColonSeparatedMultimapStringString(&c.StaticPodURLHeader), "manifest-url-header", "Comma-separated list of HTTP headers to use when accessing the url provided to --manifest-url. Multiple headers with the same name will be added in the same order provided. This flag can be repeatedly invoked. For example: --manifest-url-header 'a:hello,b:again,c:world' --manifest-url-header 'b:beautiful'") <del> fs.Var(&utilflag.IPVar{Val: &c.Address}, "address", "The IP address for the Kubelet to serve on (set to '0.0.0.0' or '::' for listening in all interfaces and IP families)") </del> <ins> fs.Var(&utilflag.IPVar{Val: &c.Address}, "address", "The IP address for the Kubelet to serve on (set to '0.0.0.0' or '::' for listening on all interfaces and IP address families)") </ins> fs.Int32Var(&c.Port, "port", c.Port, "The port for the Kubelet to serve on.") fs.Int32Var(&c.ReadOnlyPort, "read-only-port", c.ReadOnlyPort, "The read-only port for the Kubelet to serve on with no authentication/authorization (set to 0 to disable)")

The docs are ambiguous on whether a socket will be limited to either the IPv4 or IPv6 address familiy. E.g., contains This wording in bold suggests that when is 0.0.0.0, the API server will listen on IPv6 addresses too, potentially. That would be incorrect and prevent limiting the address family from the config (to enforce single-stack). According to a report to me, indeed this incorrect behavior is the case. In any case, the wording is ambiguous. Moreover, the source code base contains quite a few literals that aren't accompanied by , suggesting that IPv4 is assumed in some paths. Unless ... Kubernetes has this special algorithm that equates either {0.0.0.0} or {::} with {0.0.0.0, ::}.
See:
/sig docs
The label(s) cannot be applied, because the repository doesn't have them. <detailsIn response to : /sig doc Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
/sig docs
The Kubernetes project currently lacks enough contributors to adequately respond to all issues. This bot triages un-triaged issues according to the following rules: After 90d of inactivity, is applied After 30d of inactivity since was applied, is applied After 30d of inactivity since was applied, the issue is closed You can: Mark this issue as fresh with Close this issue with Offer to help out with [Issue Triage][1] Please send feedback to sig-contributor-experience at . /lifecycle stale [1]:
/remove-lifecycle stale
that code is used to discover the advertised address if that is not provided, the family of the IP is used for the discovery. The bind address is passed as is to the listener and in golang, 0.0.0.0 and :: behaves the same, it opens a socket in all the addresses in the host The doc is correct
The docs are ambiguous since the behavior rather than being logical, relies on a Go-based implementation detail.
I can't understand why do you consider it ambiguous if that defines exactly what is going to happen. yeah, sometimes this happens unfortunately, but we can't do much about it without breaking compatibility, can we?

All interfaces could mean all interfaces for the specified address family, or all interfaces across address families. The latter is bizarre (non-standard and unproductive), but the actual behavior. What Go does and that Kubernetes exposes this behavior to the user without modification should be documented.
How do you word it then?
Can you explain where the difficulty is in reading and interpreting my comments? For me, it can't be any clearer.
lol, sorry, now I got it, I was confused because I remembered to change some of them to clarify exactly this and I was not realizing this flag was not correct. It is my fault , I honestly don't know why omitted the IP families but you are right, my apologies again , it was some kind of frequency illusion or bias. This is a good first issue for someone that wants to do a contribution to the project, just update this line I think is easy to understand and is coherent with the other flags /help /triage accepted
This request has been marked as needing help from a contributor. Please ensure that the issue body includes answers to the following questions: Why are we solving this issue? To address this issue, are there any code changes? If there are code changes, what needs to be done in the code and what places can the assignee treat as reference points? Does this issue have zero to low barrier of entry? How can the assignee reach out to you for help? For more details on the requirements of such an issue, please see and ensure that they are met. If this request no longer meets these requirements, the label can be removed by commenting with the command. <detailsIn response to : Can you explain where the difficulty is in reading and interpreting my comments? For me, it can't be any clearer. and I was not realizing this flag was not correct. /triage accepted Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
I suggest then:
/assign
Hi, I see that there are another instances where "for listening in all interfaces and IP families" appear, like in: I am thinking to include them along with the change on "" file when submitting a PR WDYT?


Question: var err error svc, err = clientset.Core().Services(namespace).Create(svc) <ins> if err != nil { return nil, nil, nil, err } </ins> ips := []string{} hostnames := []string{}

<!-- Thanks for filing an issue! Before hitting the button, please answer these questions.--Is this a request for help? (If yes, you should use our troubleshooting guide and community support channels, see ): What keywords did you search in Kubernetes issues before filing this one? (If you have found any duplicates, you should instead reply there.): Is this a BUG REPORT or FEATURE REQUEST? (choose one): FEATURE REQUEST <!-- If this is a BUG REPORT, please: Fill in as much of the template below as you can. If you leave out information, we can't help you as well. If this is a FEATURE REQUEST, please: Describe in detail the feature/behavior/change you'd like to see. In both cases, be ready for followup questions, and please respond in a timely manner. If we can't reproduce a bug or think a feature already exists, we might close your issue. If we're wrong, PLEASE feel free to reopen it and explain why. --Kubernetes version (use ): 1.6.2 Environment: Cloud provider or hardware configuration: AWS using Juju OS (e.g. from /etc/os-release): Ubuntu Xenial Kernel (e.g. ): 4.4.0-59-generic Install tools: Juju Others: What happened: kubefed init entered a infinite loop health checking the federation api service What you expected to happen: kubefed to exit with a success code How to reproduce it (as minimally and precisely as possible): Anything else we need to know: When doing a kubefed init on a cluster setup using VMs on aws (using Juju in my case) the worker nodes have two IPs: one that is visible to the internet and one internal visible only to VMs within aws. In my case for example the VM on aws hosting the kubernetes-worker node had external IP in the 54.174.73.1/24 subnet and it also had an internal IP in the 172.31.60.1/24 subnet. Using a client machine outside aws to bootstrap federation: I got the kubefed client stuck on doing a health check against the clouds internal subnet https://172.31.60.XXX:/healthz . To address this I can use the flag and pass the external IP of any kubernetes-worker node.

With this flag kubeconfig file gets updated with the right endpoint for the federation-apiserver. However, apart from the I should also be able to specify the desired port the service will be listening on. I have to make sure that port is opened on the aws routing/firewall prior to issuing . In the example above, kubefed init will try to reach https://54.174.73.XXX:/healthz, port is randomly assigned and is not reachable. I should be able to first open the port on aws and then do a with and port pinned to .
/cc
/assign
is there a reason why you are not using the default load balanced service on AWS?
I am using Juju to stay cloud agnostic. AWS just happened to be where I deployed this time. Juju just grabs machines (virtual or physical) from wherever you have resources from. In effect your cluster is more like an on-prem than anything else. How would the default load balanced service work?
got it.


Question: } cycleState := framework.NewCycleState() _, preFilterStatus := p.(framework.PreFilterPlugin).PreFilter(context.Background(), cycleState, test.pod) <ins> if diff := cmp.Diff(test.wantPreFilterStatus, preFilterStatus); diff != "" { t.Error("status does not match (-expected +actual):n", diff) } </ins> if !preFilterStatus.IsSuccess() { <del> t.Errorf("prefilter failed with status: %v", preFilterStatus) </del> <ins> return </ins> } <del> gotStatus := p.(framework.FilterPlugin).Filter(context.Background(), cycleState, test.pod, nodeInfo) if diff := cmp.Diff(gotStatus, test.wantStatus); diff != "" { t.Errorf("status does not match: %v, want: %v", gotStatus, test.wantStatus) </del> <ins> filterStatus := p.(framework.FilterPlugin).Filter(ctx, cycleState, test.pod, nodeInfo) if !filterStatus.IsSuccess() { t.Error("status does not match (-expected +actual):n- Successn +n", filterStatus.Code()) </ins> } }) }

/kind feature /sig scheduling Filter will return for all nodes when is and is . This can be done is PreFilter. Executing this code in the filter will cause it to be repeated tens of times, with the worst-case scenario being repeated thousands of times. Maybe we should move this to PreFilter like:
This issue is currently awaiting triage. If a SIG or subproject determines this is a relevant issue, they will accept it by applying the label and provide further guidance. The label can be by org members by writing in a comment. <detailsInstructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
Sounds reasonable to me :) I think you can go ahead and file a pr for this.
/assign
Sure.
Hi, If you don't mind, I can try to do this.
/assign


Question: <del> /* Copyright 2015 The Kubernetes Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ package defaults import ( "fmt" "net/http/httptest" "reflect" "testing" "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/informers" clientset "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" utiltesting "k8s.io/client-go/util/testing" _ "k8s.io/kubernetes/pkg/apis/core/install" schedulerapi "k8s.io/kubernetes/pkg/scheduler/api" latestschedulerapi "k8s.io/kubernetes/pkg/scheduler/api/latest" "k8s.io/kubernetes/pkg/scheduler/factory" ) func TestCompatibility_v1_Scheduler(t *testing.T) { // Add serialized versions of scheduler config that exercise available options to ensure compatibility between releases schedulerFiles := map[string]struct { JSON           string ExpectedPolicy schedulerapi.Policy }{ // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. "1.0": { JSON: `{ "kind": "Policy", "apiVersion": "v1", "predicates": [ {"name": "MatchNodeSelector"}, {"name": "PodFitsResources"}, {"name": "PodFitsPorts"}, {"name": "NoDiskConflict"}, {"name": "TestServiceAffinity", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}, {"name": "TestLabelsPresence",  "argument": {"labelsPresence"  : {"labels" : ["foo"], "presence":true}}} ],"priorities": [ {"name": "LeastRequestedPriority",   "weight": 1}, {"name": "ServiceSpreadingPriority", "weight": 2}, {"name": "TestServiceAntiAffinity",  "weight": 3, "argument": {"serviceAntiAffinity": {"label": "zone"}}}, {"name": "TestLabelPreference",      "weight": 4, "argument": {"labelPreference": {"label": "bar", "presence":true}}} ] }`, ExpectedPolicy: schedulerapi.Policy{ Predicates: []schedulerapi.PredicatePolicy{ {Name: "MatchNodeSelector"}, {Name: "PodFitsResources"}, {Name: "PodFitsPorts"}, {Name: "NoDiskConflict"}, {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, }, Priorities: []schedulerapi.PriorityPolicy{ {Name: "LeastRequestedPriority", Weight: 1}, {Name: "ServiceSpreadingPriority", Weight: 2}, {Name: "TestServiceAntiAffinity", Weight: 3, Argument: &schedulerapi.PriorityArgument{ServiceAntiAffinity: &schedulerapi.ServiceAntiAffinity{Label: "zone"}}}, {Name: "TestLabelPreference", Weight: 4, Argument: &schedulerapi.PriorityArgument{LabelPreference: &schedulerapi.LabelPreference{Label: "bar", Presence: true}}}, }, }, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. "1.1": { JSON: `{ "kind": "Policy", "apiVersion": "v1", "predicates": [ {"name": "MatchNodeSelector"}, {"name": "PodFitsHostPorts"}, {"name": "PodFitsResources"}, {"name": "NoDiskConflict"}, {"name": "HostName"}, {"name": "TestServiceAffinity", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}, {"name": "TestLabelsPresence",  "argument": {"labelsPresence"  : {"labels" : ["foo"], "presence":true}}} ],"priorities": [ {"name": "EqualPriority",   "weight": 2}, {"name": "LeastRequestedPriority",   "weight": 2}, {"name": "BalancedResourceAllocation",   "weight": 2}, {"name": "SelectorSpreadPriority",   "weight": 2}, {"name": "TestServiceAntiAffinity",  "weight": 3, "argument": {"serviceAntiAffinity": {"label": "zone"}}}, {"name": "TestLabelPreference",      "weight": 4, "argument": {"labelPreference": {"label": "bar", "presence":true}}} ] }`, ExpectedPolicy: schedulerapi.Policy{ Predicates: []schedulerapi.PredicatePolicy{ {Name: "MatchNodeSelector"}, {Name: "PodFitsHostPorts"}, {Name: "PodFitsResources"}, {Name: "NoDiskConflict"}, {Name: "HostName"}, {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, }, Priorities: []schedulerapi.PriorityPolicy{ {Name: "EqualPriority", Weight: 2}, {Name: "LeastRequestedPriority", Weight: 2}, {Name: "BalancedResourceAllocation", Weight: 2}, {Name: "SelectorSpreadPriority", Weight: 2}, {Name: "TestServiceAntiAffinity", Weight: 3, Argument: &schedulerapi.PriorityArgument{ServiceAntiAffinity: &schedulerapi.ServiceAntiAffinity{Label: "zone"}}}, {Name: "TestLabelPreference", Weight: 4, Argument: &schedulerapi.PriorityArgument{LabelPreference: &schedulerapi.LabelPreference{Label: "bar", Presence: true}}}, }, }, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. "1.2": { JSON: `{ "kind": "Policy", "apiVersion": "v1", "predicates": [ {"name": "MatchNodeSelector"}, {"name": "PodFitsResources"}, {"name": "PodFitsHostPorts"}, {"name": "HostName"}, {"name": "NoDiskConflict"}, {"name": "NoVolumeZoneConflict"}, {"name": "MaxEBSVolumeCount"}, {"name": "MaxGCEPDVolumeCount"}, {"name": "MaxAzureDiskVolumeCount"}, {"name": "TestServiceAffinity", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}, {"name": "TestLabelsPresence",  "argument": {"labelsPresence"  : {"labels" : ["foo"], "presence":true}}} ],"priorities": [ {"name": "EqualPriority",   "weight": 2}, {"name": "NodeAffinityPriority",   "weight": 2}, {"name": "ImageLocalityPriority",   "weight": 2}, {"name": "LeastRequestedPriority",   "weight": 2}, {"name": "BalancedResourceAllocation",   "weight": 2}, {"name": "SelectorSpreadPriority",   "weight": 2}, {"name": "TestServiceAntiAffinity",  "weight": 3, "argument": {"serviceAntiAffinity": {"label": "zone"}}}, {"name": "TestLabelPreference",      "weight": 4, "argument": {"labelPreference": {"label": "bar", "presence":true}}} ] }`, ExpectedPolicy: schedulerapi.Policy{ Predicates: []schedulerapi.PredicatePolicy{ {Name: "MatchNodeSelector"}, {Name: "PodFitsResources"}, {Name: "PodFitsHostPorts"}, {Name: "HostName"}, {Name: "NoDiskConflict"}, {Name: "NoVolumeZoneConflict"}, {Name: "MaxEBSVolumeCount"}, {Name: "MaxGCEPDVolumeCount"}, {Name: "MaxAzureDiskVolumeCount"}, {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, }, Priorities: []schedulerapi.PriorityPolicy{ {Name: "EqualPriority", Weight: 2}, {Name: "NodeAffinityPriority", Weight: 2}, {Name: "ImageLocalityPriority", Weight: 2}, {Name: "LeastRequestedPriority", Weight: 2}, {Name: "BalancedResourceAllocation", Weight: 2}, {Name: "SelectorSpreadPriority", Weight: 2}, {Name: "TestServiceAntiAffinity", Weight: 3, Argument: &schedulerapi.PriorityArgument{ServiceAntiAffinity: &schedulerapi.ServiceAntiAffinity{Label: "zone"}}}, {Name: "TestLabelPreference", Weight: 4, Argument: &schedulerapi.PriorityArgument{LabelPreference: &schedulerapi.LabelPreference{Label: "bar", Presence: true}}}, }, }, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. "1.3": { JSON: `{ "kind": "Policy", "apiVersion": "v1", "predicates": [ {"name": "MatchNodeSelector"}, {"name": "PodFitsResources"}, {"name": "PodFitsHostPorts"}, {"name": "HostName"}, {"name": "NoDiskConflict"}, {"name": "NoVolumeZoneConflict"}, {"name": "PodToleratesNodeTaints"}, {"name": "CheckNodeMemoryPressure"}, {"name": "MaxEBSVolumeCount"}, {"name": "MaxGCEPDVolumeCount"}, {"name": "MaxAzureDiskVolumeCount"}, {"name": "MatchInterPodAffinity"}, {"name": "GeneralPredicates"}, {"name": "TestServiceAffinity", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}, {"name": "TestLabelsPresence",  "argument": {"labelsPresence"  : {"labels" : ["foo"], "presence":true}}} ],"priorities": [ {"name": "EqualPriority",   "weight": 2}, {"name": "ImageLocalityPriority",   "weight": 2}, {"name": "LeastRequestedPriority",   "weight": 2}, {"name": "BalancedResourceAllocation",   "weight": 2}, {"name": "SelectorSpreadPriority",   "weight": 2}, {"name": "NodeAffinityPriority",   "weight": 2}, {"name": "TaintTolerationPriority",   "weight": 2}, {"name": "InterPodAffinityPriority",   "weight": 2} ] }`, ExpectedPolicy: schedulerapi.Policy{ Predicates: []schedulerapi.PredicatePolicy{ {Name: "MatchNodeSelector"}, {Name: "PodFitsResources"}, {Name: "PodFitsHostPorts"}, {Name: "HostName"}, {Name: "NoDiskConflict"}, {Name: "NoVolumeZoneConflict"}, {Name: "PodToleratesNodeTaints"}, {Name: "CheckNodeMemoryPressure"}, {Name: "MaxEBSVolumeCount"}, {Name: "MaxGCEPDVolumeCount"}, {Name: "MaxAzureDiskVolumeCount"}, {Name: "MatchInterPodAffinity"}, {Name: "GeneralPredicates"}, {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, }, Priorities: []schedulerapi.PriorityPolicy{ {Name: "EqualPriority", Weight: 2}, {Name: "ImageLocalityPriority", Weight: 2}, {Name: "LeastRequestedPriority", Weight: 2}, {Name: "BalancedResourceAllocation", Weight: 2}, {Name: "SelectorSpreadPriority", Weight: 2}, {Name: "NodeAffinityPriority", Weight: 2}, {Name: "TaintTolerationPriority", Weight: 2}, {Name: "InterPodAffinityPriority", Weight: 2}, }, }, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. "1.4": { JSON: `{ "kind": "Policy", "apiVersion": "v1", "predicates": [ {"name": "MatchNodeSelector"}, {"name": "PodFitsResources"}, {"name": "PodFitsHostPorts"}, {"name": "HostName"}, {"name": "NoDiskConflict"}, {"name": "NoVolumeZoneConflict"}, {"name": "PodToleratesNodeTaints"}, {"name": "CheckNodeMemoryPressure"}, {"name": "CheckNodeDiskPressure"}, {"name": "MaxEBSVolumeCount"}, {"name": "MaxGCEPDVolumeCount"}, {"name": "MaxAzureDiskVolumeCount"}, {"name": "MatchInterPodAffinity"}, {"name": "GeneralPredicates"}, {"name": "TestServiceAffinity", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}, {"name": "TestLabelsPresence",  "argument": {"labelsPresence"  : {"labels" : ["foo"], "presence":true}}} ],"priorities": [ {"name": "EqualPriority",   "weight": 2}, {"name": "ImageLocalityPriority",   "weight": 2}, {"name": "LeastRequestedPriority",   "weight": 2}, {"name": "BalancedResourceAllocation",   "weight": 2}, {"name": "SelectorSpreadPriority",   "weight": 2}, {"name": "NodePreferAvoidPodsPriority",   "weight": 2}, {"name": "NodeAffinityPriority",   "weight": 2}, {"name": "TaintTolerationPriority",   "weight": 2}, {"name": "InterPodAffinityPriority",   "weight": 2}, {"name": "MostRequestedPriority",   "weight": 2} ] }`, ExpectedPolicy: schedulerapi.Policy{ Predicates: []schedulerapi.PredicatePolicy{ {Name: "MatchNodeSelector"}, {Name: "PodFitsResources"}, {Name: "PodFitsHostPorts"}, {Name: "HostName"}, {Name: "NoDiskConflict"}, {Name: "NoVolumeZoneConflict"}, {Name: "PodToleratesNodeTaints"}, {Name: "CheckNodeMemoryPressure"}, {Name: "CheckNodeDiskPressure"}, {Name: "MaxEBSVolumeCount"}, {Name: "MaxGCEPDVolumeCount"}, {Name: "MaxAzureDiskVolumeCount"}, {Name: "MatchInterPodAffinity"}, {Name: "GeneralPredicates"}, {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, }, Priorities: []schedulerapi.PriorityPolicy{ {Name: "EqualPriority", Weight: 2}, {Name: "ImageLocalityPriority", Weight: 2}, {Name: "LeastRequestedPriority", Weight: 2}, {Name: "BalancedResourceAllocation", Weight: 2}, {Name: "SelectorSpreadPriority", Weight: 2}, {Name: "NodePreferAvoidPodsPriority", Weight: 2}, {Name: "NodeAffinityPriority", Weight: 2}, {Name: "TaintTolerationPriority", Weight: 2}, {Name: "InterPodAffinityPriority", Weight: 2}, {Name: "MostRequestedPriority", Weight: 2}, }, }, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. "1.7": { JSON: `{ "kind": "Policy", "apiVersion": "v1", "predicates": [ {"name": "MatchNodeSelector"}, {"name": "PodFitsResources"}, {"name": "PodFitsHostPorts"}, {"name": "HostName"}, {"name": "NoDiskConflict"}, {"name": "NoVolumeZoneConflict"}, {"name": "PodToleratesNodeTaints"}, {"name": "CheckNodeMemoryPressure"}, {"name": "CheckNodeDiskPressure"}, {"name": "MaxEBSVolumeCount"}, {"name": "MaxGCEPDVolumeCount"}, {"name": "MaxAzureDiskVolumeCount"}, {"name": "MatchInterPodAffinity"}, {"name": "GeneralPredicates"}, {"name": "TestServiceAffinity", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}, {"name": "TestLabelsPresence",  "argument": {"labelsPresence"  : {"labels" : ["foo"], "presence":true}}} ],"priorities": [ {"name": "EqualPriority",   "weight": 2}, {"name": "ImageLocalityPriority",   "weight": 2}, {"name": "LeastRequestedPriority",   "weight": 2}, {"name": "BalancedResourceAllocation",   "weight": 2}, {"name": "SelectorSpreadPriority",   "weight": 2}, {"name": "NodePreferAvoidPodsPriority",   "weight": 2}, {"name": "NodeAffinityPriority",   "weight": 2}, {"name": "TaintTolerationPriority",   "weight": 2}, {"name": "InterPodAffinityPriority",   "weight": 2}, {"name": "MostRequestedPriority",   "weight": 2} ],"extenders": [{ "urlPrefix":        "/prefix", "filterVerb":       "filter", "prioritizeVerb":   "prioritize", "weight":           1, "BindVerb":         "bind", "enableHttps":      true, "tlsConfig":        {"Insecure":true}, "httpTimeout":      1, "nodeCacheCapable": true }] }`, ExpectedPolicy: schedulerapi.Policy{ Predicates: []schedulerapi.PredicatePolicy{ {Name: "MatchNodeSelector"}, {Name: "PodFitsResources"}, {Name: "PodFitsHostPorts"}, {Name: "HostName"}, {Name: "NoDiskConflict"}, {Name: "NoVolumeZoneConflict"}, {Name: "PodToleratesNodeTaints"}, {Name: "CheckNodeMemoryPressure"}, {Name: "CheckNodeDiskPressure"}, {Name: "MaxEBSVolumeCount"}, {Name: "MaxGCEPDVolumeCount"}, {Name: "MaxAzureDiskVolumeCount"}, {Name: "MatchInterPodAffinity"}, {Name: "GeneralPredicates"}, {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, }, Priorities: []schedulerapi.PriorityPolicy{ {Name: "EqualPriority", Weight: 2}, {Name: "ImageLocalityPriority", Weight: 2}, {Name: "LeastRequestedPriority", Weight: 2}, {Name: "BalancedResourceAllocation", Weight: 2}, {Name: "SelectorSpreadPriority", Weight: 2}, {Name: "NodePreferAvoidPodsPriority", Weight: 2}, {Name: "NodeAffinityPriority", Weight: 2}, {Name: "TaintTolerationPriority", Weight: 2}, {Name: "InterPodAffinityPriority", Weight: 2}, {Name: "MostRequestedPriority", Weight: 2}, }, ExtenderConfigs: []schedulerapi.ExtenderConfig{{ URLPrefix:        "/prefix", FilterVerb:       "filter", PrioritizeVerb:   "prioritize", Weight:           1, BindVerb:         "bind", // 1.7 was missing json tags on the BindVerb field and required "BindVerb" EnableHTTPS:      true, TLSConfig:        &restclient.TLSClientConfig{Insecure: true}, HTTPTimeout:      1, NodeCacheCapable: true, }}, }, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. "1.8": { JSON: `{ "kind": "Policy", "apiVersion": "v1", "predicates": [ {"name": "MatchNodeSelector"}, {"name": "PodFitsResources"}, {"name": "PodFitsHostPorts"}, {"name": "HostName"}, {"name": "NoDiskConflict"}, {"name": "NoVolumeZoneConflict"}, {"name": "PodToleratesNodeTaints"}, {"name": "CheckNodeMemoryPressure"}, {"name": "CheckNodeDiskPressure"}, {"name": "CheckNodeCondition"}, {"name": "MaxEBSVolumeCount"}, {"name": "MaxGCEPDVolumeCount"}, {"name": "MaxAzureDiskVolumeCount"}, {"name": "MatchInterPodAffinity"}, {"name": "GeneralPredicates"}, {"name": "TestServiceAffinity", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}, {"name": "TestLabelsPresence",  "argument": {"labelsPresence"  : {"labels" : ["foo"], "presence":true}}} ],"priorities": [ {"name": "EqualPriority",   "weight": 2}, {"name": "ImageLocalityPriority",   "weight": 2}, {"name": "LeastRequestedPriority",   "weight": 2}, {"name": "BalancedResourceAllocation",   "weight": 2}, {"name": "SelectorSpreadPriority",   "weight": 2}, {"name": "NodePreferAvoidPodsPriority",   "weight": 2}, {"name": "NodeAffinityPriority",   "weight": 2}, {"name": "TaintTolerationPriority",   "weight": 2}, {"name": "InterPodAffinityPriority",   "weight": 2}, {"name": "MostRequestedPriority",   "weight": 2} ],"extenders": [{ "urlPrefix":        "/prefix", "filterVerb":       "filter", "prioritizeVerb":   "prioritize", "weight":           1, "bindVerb":         "bind", "enableHttps":      true, "tlsConfig":        {"Insecure":true}, "httpTimeout":      1, "nodeCacheCapable": true }] }`, ExpectedPolicy: schedulerapi.Policy{ Predicates: []schedulerapi.PredicatePolicy{ {Name: "MatchNodeSelector"}, {Name: "PodFitsResources"}, {Name: "PodFitsHostPorts"}, {Name: "HostName"}, {Name: "NoDiskConflict"}, {Name: "NoVolumeZoneConflict"}, {Name: "PodToleratesNodeTaints"}, {Name: "CheckNodeMemoryPressure"}, {Name: "CheckNodeDiskPressure"}, {Name: "CheckNodeCondition"}, {Name: "MaxEBSVolumeCount"}, {Name: "MaxGCEPDVolumeCount"}, {Name: "MaxAzureDiskVolumeCount"}, {Name: "MatchInterPodAffinity"}, {Name: "GeneralPredicates"}, {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, }, Priorities: []schedulerapi.PriorityPolicy{ {Name: "EqualPriority", Weight: 2}, {Name: "ImageLocalityPriority", Weight: 2}, {Name: "LeastRequestedPriority", Weight: 2}, {Name: "BalancedResourceAllocation", Weight: 2}, {Name: "SelectorSpreadPriority", Weight: 2}, {Name: "NodePreferAvoidPodsPriority", Weight: 2}, {Name: "NodeAffinityPriority", Weight: 2}, {Name: "TaintTolerationPriority", Weight: 2}, {Name: "InterPodAffinityPriority", Weight: 2}, {Name: "MostRequestedPriority", Weight: 2}, }, ExtenderConfigs: []schedulerapi.ExtenderConfig{{ URLPrefix:        "/prefix", FilterVerb:       "filter", PrioritizeVerb:   "prioritize", Weight:           1, BindVerb:         "bind", // 1.8 became case-insensitive and tolerated "bindVerb" EnableHTTPS:      true, TLSConfig:        &restclient.TLSClientConfig{Insecure: true}, HTTPTimeout:      1, NodeCacheCapable: true, }}, }, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. "1.9": { JSON: `{ "kind": "Policy", "apiVersion": "v1", "predicates": [ {"name": "MatchNodeSelector"}, {"name": "PodFitsResources"}, {"name": "PodFitsHostPorts"}, {"name": "HostName"}, {"name": "NoDiskConflict"}, {"name": "NoVolumeZoneConflict"}, {"name": "PodToleratesNodeTaints"}, {"name": "CheckNodeMemoryPressure"}, {"name": "CheckNodeDiskPressure"}, {"name": "CheckNodeCondition"}, {"name": "MaxEBSVolumeCount"}, {"name": "MaxGCEPDVolumeCount"}, {"name": "MaxAzureDiskVolumeCount"}, {"name": "MatchInterPodAffinity"}, {"name": "GeneralPredicates"}, {"name": "CheckVolumeBinding"}, {"name": "TestServiceAffinity", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}, {"name": "TestLabelsPresence",  "argument": {"labelsPresence"  : {"labels" : ["foo"], "presence":true}}} ],"priorities": [ {"name": "EqualPriority",   "weight": 2}, {"name": "ImageLocalityPriority",   "weight": 2}, {"name": "LeastRequestedPriority",   "weight": 2}, {"name": "BalancedResourceAllocation",   "weight": 2}, {"name": "SelectorSpreadPriority",   "weight": 2}, {"name": "NodePreferAvoidPodsPriority",   "weight": 2}, {"name": "NodeAffinityPriority",   "weight": 2}, {"name": "TaintTolerationPriority",   "weight": 2}, {"name": "InterPodAffinityPriority",   "weight": 2}, {"name": "MostRequestedPriority",   "weight": 2} ],"extenders": [{ "urlPrefix":        "/prefix", "filterVerb":       "filter", "prioritizeVerb":   "prioritize", "weight":           1, "bindVerb":         "bind", "enableHttps":      true, "tlsConfig":        {"Insecure":true}, "httpTimeout":      1, "nodeCacheCapable": true }] }`, ExpectedPolicy: schedulerapi.Policy{ Predicates: []schedulerapi.PredicatePolicy{ {Name: "MatchNodeSelector"}, {Name: "PodFitsResources"}, {Name: "PodFitsHostPorts"}, {Name: "HostName"}, {Name: "NoDiskConflict"}, {Name: "NoVolumeZoneConflict"}, {Name: "PodToleratesNodeTaints"}, {Name: "CheckNodeMemoryPressure"}, {Name: "CheckNodeDiskPressure"}, {Name: "CheckNodeCondition"}, {Name: "MaxEBSVolumeCount"}, {Name: "MaxGCEPDVolumeCount"}, {Name: "MaxAzureDiskVolumeCount"}, {Name: "MatchInterPodAffinity"}, {Name: "GeneralPredicates"}, {Name: "CheckVolumeBinding"}, {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, }, Priorities: []schedulerapi.PriorityPolicy{ {Name: "EqualPriority", Weight: 2}, {Name: "ImageLocalityPriority", Weight: 2}, {Name: "LeastRequestedPriority", Weight: 2}, {Name: "BalancedResourceAllocation", Weight: 2}, {Name: "SelectorSpreadPriority", Weight: 2}, {Name: "NodePreferAvoidPodsPriority", Weight: 2}, {Name: "NodeAffinityPriority", Weight: 2}, {Name: "TaintTolerationPriority", Weight: 2}, {Name: "InterPodAffinityPriority", Weight: 2}, {Name: "MostRequestedPriority", Weight: 2}, }, ExtenderConfigs: []schedulerapi.ExtenderConfig{{ URLPrefix:        "/prefix", FilterVerb:       "filter", PrioritizeVerb:   "prioritize", Weight:           1, BindVerb:         "bind", // 1.9 was case-insensitive and tolerated "bindVerb" EnableHTTPS:      true, TLSConfig:        &restclient.TLSClientConfig{Insecure: true}, HTTPTimeout:      1, NodeCacheCapable: true, }}, }, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. "1.10": { JSON: `{ "kind": "Policy", "apiVersion": "v1", "predicates": [ {"name": "MatchNodeSelector"}, {"name": "PodFitsResources"}, {"name": "PodFitsHostPorts"}, {"name": "HostName"}, {"name": "NoDiskConflict"}, {"name": "NoVolumeZoneConflict"}, {"name": "PodToleratesNodeTaints"}, {"name": "CheckNodeMemoryPressure"}, {"name": "CheckNodeDiskPressure"}, {"name": "CheckNodePIDPressure"}, {"name": "CheckNodeCondition"}, {"name": "MaxEBSVolumeCount"}, {"name": "MaxGCEPDVolumeCount"}, {"name": "MaxAzureDiskVolumeCount"}, {"name": "MatchInterPodAffinity"}, {"name": "GeneralPredicates"}, {"name": "CheckVolumeBinding"}, {"name": "TestServiceAffinity", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}, {"name": "TestLabelsPresence",  "argument": {"labelsPresence"  : {"labels" : ["foo"], "presence":true}}} ],"priorities": [ {"name": "EqualPriority",   "weight": 2}, {"name": "ImageLocalityPriority",   "weight": 2}, {"name": "LeastRequestedPriority",   "weight": 2}, {"name": "BalancedResourceAllocation",   "weight": 2}, {"name": "SelectorSpreadPriority",   "weight": 2}, {"name": "NodePreferAvoidPodsPriority",   "weight": 2}, {"name": "NodeAffinityPriority",   "weight": 2}, {"name": "TaintTolerationPriority",   "weight": 2}, {"name": "InterPodAffinityPriority",   "weight": 2}, {"name": "MostRequestedPriority",   "weight": 2} ],"extenders": [{ "urlPrefix":        "/prefix", "filterVerb":       "filter", "prioritizeVerb":   "prioritize", "weight":           1, "bindVerb":         "bind", "enableHttps":      true, "tlsConfig":        {"Insecure":true}, "httpTimeout":      1, "nodeCacheCapable": true, "managedResources": [{"name":"example.com/foo","ignoredByScheduler":true}], "ignorable":true }] }`, ExpectedPolicy: schedulerapi.Policy{ Predicates: []schedulerapi.PredicatePolicy{ {Name: "MatchNodeSelector"}, {Name: "PodFitsResources"}, {Name: "PodFitsHostPorts"}, {Name: "HostName"}, {Name: "NoDiskConflict"}, {Name: "NoVolumeZoneConflict"}, {Name: "PodToleratesNodeTaints"}, {Name: "CheckNodeMemoryPressure"}, {Name: "CheckNodeDiskPressure"}, {Name: "CheckNodePIDPressure"}, {Name: "CheckNodeCondition"}, {Name: "MaxEBSVolumeCount"}, {Name: "MaxGCEPDVolumeCount"}, {Name: "MaxAzureDiskVolumeCount"}, {Name: "MatchInterPodAffinity"}, {Name: "GeneralPredicates"}, {Name: "CheckVolumeBinding"}, {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, }, Priorities: []schedulerapi.PriorityPolicy{ {Name: "EqualPriority", Weight: 2}, {Name: "ImageLocalityPriority", Weight: 2}, {Name: "LeastRequestedPriority", Weight: 2}, {Name: "BalancedResourceAllocation", Weight: 2}, {Name: "SelectorSpreadPriority", Weight: 2}, {Name: "NodePreferAvoidPodsPriority", Weight: 2}, {Name: "NodeAffinityPriority", Weight: 2}, {Name: "TaintTolerationPriority", Weight: 2}, {Name: "InterPodAffinityPriority", Weight: 2}, {Name: "MostRequestedPriority", Weight: 2}, }, ExtenderConfigs: []schedulerapi.ExtenderConfig{{ URLPrefix:        "/prefix", FilterVerb:       "filter", PrioritizeVerb:   "prioritize", Weight:           1, BindVerb:         "bind", // 1.10 was case-insensitive and tolerated "bindVerb" EnableHTTPS:      true, TLSConfig:        &restclient.TLSClientConfig{Insecure: true}, HTTPTimeout:      1, NodeCacheCapable: true, ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, Ignorable:        true, }}, }, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. "1.11": { JSON: `{ "kind": "Policy", "apiVersion": "v1", "predicates": [ {"name": "MatchNodeSelector"}, {"name": "PodFitsResources"}, {"name": "PodFitsHostPorts"}, {"name": "HostName"}, {"name": "NoDiskConflict"}, {"name": "NoVolumeZoneConflict"}, {"name": "PodToleratesNodeTaints"}, {"name": "CheckNodeMemoryPressure"}, {"name": "CheckNodeDiskPressure"}, {"name": "CheckNodePIDPressure"}, {"name": "CheckNodeCondition"}, {"name": "MaxEBSVolumeCount"}, {"name": "MaxGCEPDVolumeCount"}, {"name": "MaxAzureDiskVolumeCount"}, {"name": "MatchInterPodAffinity"}, {"name": "GeneralPredicates"}, {"name": "CheckVolumeBinding"}, {"name": "TestServiceAffinity", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}, {"name": "TestLabelsPresence",  "argument": {"labelsPresence"  : {"labels" : ["foo"], "presence":true}}} ],"priorities": [ {"name": "EqualPriority",   "weight": 2}, {"name": "ImageLocalityPriority",   "weight": 2}, {"name": "LeastRequestedPriority",   "weight": 2}, {"name": "BalancedResourceAllocation",   "weight": 2}, {"name": "SelectorSpreadPriority",   "weight": 2}, {"name": "NodePreferAvoidPodsPriority",   "weight": 2}, {"name": "NodeAffinityPriority",   "weight": 2}, {"name": "TaintTolerationPriority",   "weight": 2}, {"name": "InterPodAffinityPriority",   "weight": 2}, {"name": "MostRequestedPriority",   "weight": 2}, { "name": "RequestedToCapacityRatioPriority", "weight": 2, "argument": { "requestedToCapacityRatioArguments": { "shape": [ {"utilization": 0,  "score": 0}, {"utilization": 50, "score": 7} ] } }} ],"extenders": [{ "urlPrefix":        "/prefix", "filterVerb":       "filter", "prioritizeVerb":   "prioritize", "weight":           1, "bindVerb":         "bind", "enableHttps":      true, "tlsConfig":        {"Insecure":true}, "httpTimeout":      1, "nodeCacheCapable": true, "managedResources": [{"name":"example.com/foo","ignoredByScheduler":true}], "ignorable":true }] }`, ExpectedPolicy: schedulerapi.Policy{ Predicates: []schedulerapi.PredicatePolicy{ {Name: "MatchNodeSelector"}, {Name: "PodFitsResources"}, {Name: "PodFitsHostPorts"}, {Name: "HostName"}, {Name: "NoDiskConflict"}, {Name: "NoVolumeZoneConflict"}, {Name: "PodToleratesNodeTaints"}, {Name: "CheckNodeMemoryPressure"}, {Name: "CheckNodeDiskPressure"}, {Name: "CheckNodePIDPressure"}, {Name: "CheckNodeCondition"}, {Name: "MaxEBSVolumeCount"}, {Name: "MaxGCEPDVolumeCount"}, {Name: "MaxAzureDiskVolumeCount"}, {Name: "MatchInterPodAffinity"}, {Name: "GeneralPredicates"}, {Name: "CheckVolumeBinding"}, {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, }, Priorities: []schedulerapi.PriorityPolicy{ {Name: "EqualPriority", Weight: 2}, {Name: "ImageLocalityPriority", Weight: 2}, {Name: "LeastRequestedPriority", Weight: 2}, {Name: "BalancedResourceAllocation", Weight: 2}, {Name: "SelectorSpreadPriority", Weight: 2}, {Name: "NodePreferAvoidPodsPriority", Weight: 2}, {Name: "NodeAffinityPriority", Weight: 2}, {Name: "TaintTolerationPriority", Weight: 2}, {Name: "InterPodAffinityPriority", Weight: 2}, {Name: "MostRequestedPriority", Weight: 2}, { Name:   "RequestedToCapacityRatioPriority", Weight: 2, Argument: &schedulerapi.PriorityArgument{ RequestedToCapacityRatioArguments: &schedulerapi.RequestedToCapacityRatioArguments{ UtilizationShape: []schedulerapi.UtilizationShapePoint{ {Utilization: 0, Score: 0}, {Utilization: 50, Score: 7}, }}, }, }, }, ExtenderConfigs: []schedulerapi.ExtenderConfig{{ URLPrefix:        "/prefix", FilterVerb:       "filter", PrioritizeVerb:   "prioritize", Weight:           1, BindVerb:         "bind", // 1.11 restored case-sensitivity, but allowed either "BindVerb" or "bindVerb" EnableHTTPS:      true, TLSConfig:        &restclient.TLSClientConfig{Insecure: true}, HTTPTimeout:      1, NodeCacheCapable: true, ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, Ignorable:        true, }}, }, }, // Do not change this JSON after the corresponding release has been tagged. // A failure indicates backwards compatibility with the specified release was broken. "1.12": { JSON: `{ "kind": "Policy", "apiVersion": "v1", "predicates": [ {"name": "MatchNodeSelector"}, {"name": "PodFitsResources"}, {"name": "PodFitsHostPorts"}, {"name": "HostName"}, {"name": "NoDiskConflict"}, {"name": "NoVolumeZoneConflict"}, {"name": "PodToleratesNodeTaints"}, {"name": "CheckNodeMemoryPressure"}, {"name": "CheckNodeDiskPressure"}, {"name": "CheckNodePIDPressure"}, {"name": "CheckNodeCondition"}, {"name": "MaxEBSVolumeCount"}, {"name": "MaxGCEPDVolumeCount"}, {"name": "MaxAzureDiskVolumeCount"}, {"name": "MaxCSIVolumeCountPred"}, {"name": "MatchInterPodAffinity"}, {"name": "GeneralPredicates"}, {"name": "CheckVolumeBinding"}, {"name": "TestServiceAffinity", "argument": {"serviceAffinity" : {"labels" : ["region"]}}}, {"name": "TestLabelsPresence",  "argument": {"labelsPresence"  : {"labels" : ["foo"], "presence":true}}} ],"priorities": [ {"name": "EqualPriority",   "weight": 2}, {"name": "ImageLocalityPriority",   "weight": 2}, {"name": "LeastRequestedPriority",   "weight": 2}, {"name": "BalancedResourceAllocation",   "weight": 2}, {"name": "SelectorSpreadPriority",   "weight": 2}, {"name": "NodePreferAvoidPodsPriority",   "weight": 2}, {"name": "NodeAffinityPriority",   "weight": 2}, {"name": "TaintTolerationPriority",   "weight": 2}, {"name": "InterPodAffinityPriority",   "weight": 2}, {"name": "MostRequestedPriority",   "weight": 2}, { "name": "RequestedToCapacityRatioPriority", "weight": 2, "argument": { "requestedToCapacityRatioArguments": { "shape": [ {"utilization": 0,  "score": 0}, {"utilization": 50, "score": 7} ] } }} ],"extenders": [{ "urlPrefix":        "/prefix", "filterVerb":       "filter", "prioritizeVerb":   "prioritize", "weight":           1, "bindVerb":         "bind", "enableHttps":      true, "tlsConfig":        {"Insecure":true}, "httpTimeout":      1, "nodeCacheCapable": true, "managedResources": [{"name":"example.com/foo","ignoredByScheduler":true}], "ignorable":true }] }`, ExpectedPolicy: schedulerapi.Policy{ Predicates: []schedulerapi.PredicatePolicy{ {Name: "MatchNodeSelector"}, {Name: "PodFitsResources"}, {Name: "PodFitsHostPorts"}, {Name: "HostName"}, {Name: "NoDiskConflict"}, {Name: "NoVolumeZoneConflict"}, {Name: "PodToleratesNodeTaints"}, {Name: "CheckNodeMemoryPressure"}, {Name: "CheckNodeDiskPressure"}, {Name: "CheckNodePIDPressure"}, {Name: "CheckNodeCondition"}, {Name: "MaxEBSVolumeCount"}, {Name: "MaxGCEPDVolumeCount"}, {Name: "MaxAzureDiskVolumeCount"}, {Name: "MaxCSIVolumeCountPred"}, {Name: "MatchInterPodAffinity"}, {Name: "GeneralPredicates"}, {Name: "CheckVolumeBinding"}, {Name: "TestServiceAffinity", Argument: &schedulerapi.PredicateArgument{ServiceAffinity: &schedulerapi.ServiceAffinity{Labels: []string{"region"}}}}, {Name: "TestLabelsPresence", Argument: &schedulerapi.PredicateArgument{LabelsPresence: &schedulerapi.LabelsPresence{Labels: []string{"foo"}, Presence: true}}}, }, Priorities: []schedulerapi.PriorityPolicy{ {Name: "EqualPriority", Weight: 2}, {Name: "ImageLocalityPriority", Weight: 2}, {Name: "LeastRequestedPriority", Weight: 2}, {Name: "BalancedResourceAllocation", Weight: 2}, {Name: "SelectorSpreadPriority", Weight: 2}, {Name: "NodePreferAvoidPodsPriority", Weight: 2}, {Name: "NodeAffinityPriority", Weight: 2}, {Name: "TaintTolerationPriority", Weight: 2}, {Name: "InterPodAffinityPriority", Weight: 2}, {Name: "MostRequestedPriority", Weight: 2}, { Name:   "RequestedToCapacityRatioPriority", Weight: 2, Argument: &schedulerapi.PriorityArgument{ RequestedToCapacityRatioArguments: &schedulerapi.RequestedToCapacityRatioArguments{ UtilizationShape: []schedulerapi.UtilizationShapePoint{ {Utilization: 0, Score: 0}, {Utilization: 50, Score: 7}, }}, }, }, }, ExtenderConfigs: []schedulerapi.ExtenderConfig{{ URLPrefix:        "/prefix", FilterVerb:       "filter", PrioritizeVerb:   "prioritize", Weight:           1, BindVerb:         "bind", // 1.11 restored case-sensitivity, but allowed either "BindVerb" or "bindVerb" EnableHTTPS:      true, TLSConfig:        &restclient.TLSClientConfig{Insecure: true}, HTTPTimeout:      1, NodeCacheCapable: true, ManagedResources: []schedulerapi.ExtenderManagedResource{{Name: v1.ResourceName("example.com/foo"), IgnoredByScheduler: true}}, Ignorable:        true, }}, }, }, } registeredPredicates := sets.NewString(factory.ListRegisteredFitPredicates()...) registeredPriorities := sets.NewString(factory.ListRegisteredPriorityFunctions()...) seenPredicates := sets.NewString() seenPriorities := sets.NewString() for v, tc := range schedulerFiles { fmt.Printf("%s: Testing scheduler confign", v) policy := schedulerapi.Policy{} if err := runtime.DecodeInto(latestschedulerapi.Codec, []byte(tc.JSON), &policy); err != nil { t.Errorf("%s: Error decoding: %v", v, err) continue } for _, predicate := range policy.Predicates { seenPredicates.Insert(predicate.Name) } for _, priority := range policy.Priorities { seenPriorities.Insert(priority.Name) } if !reflect.DeepEqual(policy, tc.ExpectedPolicy) { t.Errorf("%s: Expected:nt%#vnGot:nt%#v", v, tc.ExpectedPolicy, policy) } handler := utiltesting.FakeHandler{ StatusCode:   500, ResponseBody: "", T:            t, } server := httptest.NewServer(&handler) defer server.Close() client := clientset.NewForConfigOrDie(&restclient.Config{Host: server.URL, ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Group: "", Version: "v1"}}}) informerFactory := informers.NewSharedInformerFactory(client, 0) if _, err := factory.NewConfigFactory(&factory.ConfigFactoryArgs{ SchedulerName:                  "some-scheduler-name", Client:                         client, NodeInformer:                   informerFactory.Core().V1().Nodes(), PodInformer:                    informerFactory.Core().V1().Pods(), PvInformer:                     informerFactory.Core().V1().PersistentVolumes(), PvcInformer:                    informerFactory.Core().V1().PersistentVolumeClaims(), ReplicationControllerInformer:  informerFactory.Core().V1().ReplicationControllers(), ReplicaSetInformer:             informerFactory.Apps().V1().ReplicaSets(), StatefulSetInformer:            informerFactory.Apps().V1().StatefulSets(), ServiceInformer:                informerFactory.Core().V1().Services(), PdbInformer:                    informerFactory.Policy().V1beta1().PodDisruptionBudgets(), StorageClassInformer:           informerFactory.Storage().V1().StorageClasses(), HardPodAffinitySymmetricWeight: v1.DefaultHardPodAffinitySymmetricWeight, DisablePreemption:              false, PercentageOfNodesToScore:       schedulerapi.DefaultPercentageOfNodesToScore, }).CreateFromConfig(policy); err != nil { t.Errorf("%s: Error constructing: %v", v, err) continue } } if !seenPredicates.HasAll(registeredPredicates.List()...) { t.Errorf("Registered predicates are missing from compatibility test (add to test stanza for version currently in development): %#v", registeredPredicates.Difference(seenPredicates).List()) } if !seenPriorities.HasAll(registeredPriorities.List()...) { t.Errorf("Registered priorities are missing from compatibility test (add to test stanza for version currently in development): %#v", registeredPriorities.Difference(seenPriorities).List()) } } </del>

PLEASE COORDINATE WITH SIG-SCHEDULING BEFORE WORKING ON THIS ISSUE. We want to avoid the situation where two people accidentally start work on the same fix. Main tracking issue: If you contributed in phase 1, please give others a chance before claiming this issue. You can also help out by reviewing the phase 2 PRs. The tests in ensure backwards compatibility with the types in . It makes more sense for these tests to live in that package. /sig scheduling /kind cleanup /help /good-first-issue
This request has been marked as suitable for new contributors. Please ensure the request meets the requirements listed . If this request no longer meets these requirements, the label can be removed by commenting with the command. <detailsIn response to : PLEASE COORDINATE WITH SIG-SCHEDULING BEFORE WORKING ON THIS ISSUE. We want to avoid the situation where two people accidentally start work on the same fix. The tests in ensure backwards compatibility with the types in . It makes more sense for these tests to live in that package. /kind cleanup /help /good-first-issue Instructions for interacting with me using PR comments are available . If you have questions or suggestions related to my behavior, please file an issue against the repository. </details
I would like to take it and thanks
Hi! I am contributer and I would like to take it.
while you're working on do you mind letting take a crack at this one?
OK, go head
, thanks!
/lifecycle active for
Thanks for taking care of this one! :smiley:
You are wellcome


Question: myKubelet := kubelet.NewIntegrationTestKubelet(machineList[0], &fakeDocker1) go util.Forever(func() { myKubelet.Run(cfg1.Updates()) }, 0) go util.Forever(func() { <del> kubelet.ListenAndServeKubeletServer(myKubelet, cfg1.Channel("http"), http.DefaultServeMux, "localhost", 10250) </del> <ins> kubelet.ListenAndServeKubeletServer(myKubelet, cfg1.Channel("http"), "localhost", 10250) </ins> }, 0) // Kubelet (machine)

The Kubelet REST end-point has turned into a complicated switch-case code block that is harder to maintain overtime. The Kubelet should move to a http.ServeMux pattern and register handler functions to a pattern.
I am working on a PR to submit in next couple of days that will make this change, so feel free to assign to me if possible.
Tagging because I asked for this in one of his PRs
This one is also under my radar. If no one had time, feel free to assign it to me too.
I have a branch in progress. Feel free to offer feedback on it when I submit. Sent from my iPhone