mirror of https://github.com/k3s-io/k3s
Merge pull request #26886 from kevin-wangzefeng/fix_scheduling_e2e_test_leak
Automatic merge from submit-queue fix node.labels leak in scheduler predicates e2e closes #26698 cc @davidopp @wojtek-t @fejta @gmarekpull/6/head
commit
14e05064c8
|
@ -125,6 +125,23 @@ func cleanupPods(c *client.Client, ns string) {
|
|||
}
|
||||
}
|
||||
|
||||
func removeLabelOffNode(c *client.Client, nodeName string, labelKey string) {
|
||||
By("removing the label " + labelKey + " off the node " + nodeName)
|
||||
node, err := c.Nodes().Get(nodeName)
|
||||
framework.ExpectNoError(err)
|
||||
if node.Labels == nil || len(node.Labels[labelKey]) == 0 {
|
||||
return
|
||||
}
|
||||
delete(node.Labels, labelKey)
|
||||
nodeUpdated, err := c.Nodes().Update(node)
|
||||
framework.ExpectNoError(err)
|
||||
|
||||
By("verifying the node doesn't have the label " + labelKey)
|
||||
if nodeUpdated.Labels != nil || len(nodeUpdated.Labels[labelKey]) != 0 {
|
||||
framework.Failf("Failed removing label " + labelKey + " of the node " + nodeName)
|
||||
}
|
||||
}
|
||||
|
||||
// Waits until all existing pods are scheduled and returns their amount.
|
||||
func waitForStableCluster(c *client.Client) int {
|
||||
timeout := 10 * time.Minute
|
||||
|
@ -410,7 +427,6 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
})
|
||||
|
||||
It("validates that a pod with an invalid NodeAffinity is rejected", func() {
|
||||
|
||||
By("Trying to launch a pod with an invalid Affinity data.")
|
||||
podName := "without-label"
|
||||
_, err := c.Pods(ns).Create(&api.Pod{
|
||||
|
@ -494,6 +510,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
node, err := c.Nodes().Get(nodeName)
|
||||
framework.ExpectNoError(err)
|
||||
Expect(node.Labels[k]).To(Equal(v))
|
||||
defer removeLabelOffNode(c, nodeName, k)
|
||||
|
||||
By("Trying to relaunch the pod, now with labels.")
|
||||
labelPodName := "with-labels"
|
||||
|
@ -631,6 +648,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
node, err := c.Nodes().Get(nodeName)
|
||||
framework.ExpectNoError(err)
|
||||
Expect(node.Labels[k]).To(Equal(v))
|
||||
defer removeLabelOffNode(c, nodeName, k)
|
||||
|
||||
By("Trying to relaunch the pod, now with labels.")
|
||||
labelPodName := "with-labels"
|
||||
|
@ -680,6 +698,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
labelPod, err := c.Pods(ns).Get(labelPodName)
|
||||
framework.ExpectNoError(err)
|
||||
Expect(labelPod.Spec.NodeName).To(Equal(nodeName))
|
||||
|
||||
})
|
||||
|
||||
// Verify that an escaped JSON string of NodeAffinity in a YAML PodSpec works.
|
||||
|
@ -725,6 +744,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
node, err := c.Nodes().Get(nodeName)
|
||||
framework.ExpectNoError(err)
|
||||
Expect(node.Labels[k]).To(Equal(v))
|
||||
defer removeLabelOffNode(c, nodeName, k)
|
||||
|
||||
By("Trying to launch a pod that with NodeAffinity setting as embedded JSON string in the annotation value.")
|
||||
labelPodName := "with-labels"
|
||||
|
@ -889,6 +909,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
node, err := c.Nodes().Get(nodeName)
|
||||
framework.ExpectNoError(err)
|
||||
Expect(node.Labels[k]).To(Equal(v))
|
||||
defer removeLabelOffNode(c, nodeName, k)
|
||||
|
||||
By("Trying to launch the pod, now with podAffinity.")
|
||||
labelPodName := "with-podaffinity-" + string(util.NewUUID())
|
||||
|
@ -980,6 +1001,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
node, err := c.Nodes().Get(nodeName)
|
||||
framework.ExpectNoError(err)
|
||||
Expect(node.Labels[k]).To(Equal(v))
|
||||
defer removeLabelOffNode(c, nodeName, k)
|
||||
|
||||
By("Trying to launch the pod, now with podAffinity with same Labels.")
|
||||
labelPodName := "with-podaffinity-" + string(util.NewUUID())
|
||||
|
@ -1069,6 +1091,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
node, err := c.Nodes().Get(nodeName)
|
||||
framework.ExpectNoError(err)
|
||||
Expect(node.Labels[k]).To(Equal(v))
|
||||
defer removeLabelOffNode(c, nodeName, k)
|
||||
|
||||
By("Trying to launch the pod, now with multiple pod affinities with diff LabelOperators.")
|
||||
labelPodName := "with-podaffinity-" + string(util.NewUUID())
|
||||
|
@ -1169,6 +1192,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
node, err := c.Nodes().Get(nodeName)
|
||||
framework.ExpectNoError(err)
|
||||
Expect(node.Labels[k]).To(Equal(v))
|
||||
defer removeLabelOffNode(c, nodeName, k)
|
||||
|
||||
By("Trying to launch the pod, now with Pod affinity and anti affinity.")
|
||||
labelPodName := "with-podantiaffinity-" + string(util.NewUUID())
|
||||
|
@ -1272,6 +1296,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
node, err := c.Nodes().Get(nodeName)
|
||||
framework.ExpectNoError(err)
|
||||
Expect(node.Labels[k]).To(Equal(v))
|
||||
defer removeLabelOffNode(c, nodeName, k)
|
||||
|
||||
By("Trying to launch a pod that with PodAffinity & PodAntiAffinity setting as embedded JSON string in the annotation value.")
|
||||
labelPodName := "with-newlabels"
|
||||
|
@ -1353,6 +1378,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
{labelKey + "=" + labelValue},
|
||||
}
|
||||
checkOutput(labelOutput, labelOutputRequiredStrings)
|
||||
defer removeLabelOffNode(c, nodeName, labelKey)
|
||||
|
||||
By("Trying to relaunch the pod, now with tolerations.")
|
||||
tolerationPodName := "with-tolerations"
|
||||
|
@ -1403,14 +1429,6 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
if strings.Contains(output, taintName) {
|
||||
framework.Failf("Failed removing taint " + taintName + " of the node " + nodeName)
|
||||
}
|
||||
|
||||
By("removing the label " + labelKey + " off the node " + nodeName)
|
||||
framework.RunKubectlOrDie("label", "nodes", nodeName, labelKey+"-")
|
||||
By("verifying the node doesn't have the label " + labelKey)
|
||||
output = framework.RunKubectlOrDie("describe", "node", nodeName)
|
||||
if strings.Contains(output, labelKey) {
|
||||
framework.Failf("Failed removing label " + labelKey + " of the node " + nodeName)
|
||||
}
|
||||
})
|
||||
|
||||
// 1. Run a pod to get an available node, then delete the pod
|
||||
|
@ -1475,6 +1493,7 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
{labelKey + "=" + labelValue},
|
||||
}
|
||||
checkOutput(labelOutput, labelOutputRequiredStrings)
|
||||
defer removeLabelOffNode(c, nodeName, labelKey)
|
||||
|
||||
By("Trying to relaunch the pod, still no tolerations.")
|
||||
podNameNoTolerations := "still-no-tolerations"
|
||||
|
@ -1527,13 +1546,5 @@ var _ = framework.KubeDescribe("SchedulerPredicates [Serial]", func() {
|
|||
deployedPod, err := c.Pods(ns).Get(podNameNoTolerations)
|
||||
framework.ExpectNoError(err)
|
||||
Expect(deployedPod.Spec.NodeName).To(Equal(nodeName))
|
||||
|
||||
By("removing the label " + labelKey + " off the node " + nodeName)
|
||||
framework.RunKubectlOrDie("label", "nodes", nodeName, labelKey+"-")
|
||||
By("verifying the node doesn't have the label " + labelKey)
|
||||
output = framework.RunKubectlOrDie("describe", "node", nodeName)
|
||||
if strings.Contains(output, labelKey) {
|
||||
framework.Failf("Failed removing label " + labelKey + " of the node " + nodeName)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
|
Loading…
Reference in New Issue