mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-05 02:09:56 +00:00
Add integration test for NodeUnschedulable in requeueing scenarios
This commit is contained in:
parent
dddffaa4cf
commit
aeafb4d149
@ -188,7 +188,7 @@ func TestSchedulingGates(t *testing.T) {
|
|||||||
func TestCoreResourceEnqueue(t *testing.T) {
|
func TestCoreResourceEnqueue(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
// initialNode is the Node to be created at first.
|
// initialNodes is the list of Nodes to be created at first.
|
||||||
initialNodes []*v1.Node
|
initialNodes []*v1.Node
|
||||||
// initialPods is the list of Pods to be created at first if it's not empty.
|
// initialPods is the list of Pods to be created at first if it's not empty.
|
||||||
// Note that the scheduler won't schedule those Pods,
|
// Note that the scheduler won't schedule those Pods,
|
||||||
@ -486,6 +486,58 @@ func TestCoreResourceEnqueue(t *testing.T) {
|
|||||||
wantRequeuedPods: sets.New("pod2"),
|
wantRequeuedPods: sets.New("pod2"),
|
||||||
enableSchedulingQueueHint: []bool{true},
|
enableSchedulingQueueHint: []bool{true},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "Pod rejected by the NodeUnschedulable plugin is requeued when the node is turned to ready",
|
||||||
|
initialNodes: []*v1.Node{st.MakeNode().Name("fake-node").Unschedulable(true).Obj()},
|
||||||
|
pods: []*v1.Pod{
|
||||||
|
st.MakePod().Name("pod1").Container("image").Obj(),
|
||||||
|
},
|
||||||
|
triggerFn: func(testCtx *testutils.TestContext) error {
|
||||||
|
// Trigger a NodeUpdate event to change the Node to ready.
|
||||||
|
// It makes Pod1 schedulable.
|
||||||
|
if _, err := testCtx.ClientSet.CoreV1().Nodes().Update(testCtx.Ctx, st.MakeNode().Name("fake-node").Unschedulable(false).Obj(), metav1.UpdateOptions{}); err != nil {
|
||||||
|
return fmt.Errorf("failed to update the node: %w", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
wantRequeuedPods: sets.New("pod1"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Pod rejected by the NodeUnschedulable plugin is requeued when a new node is created",
|
||||||
|
initialNodes: []*v1.Node{st.MakeNode().Name("fake-node1").Unschedulable(true).Obj()},
|
||||||
|
pods: []*v1.Pod{
|
||||||
|
st.MakePod().Name("pod1").Container("image").Obj(),
|
||||||
|
},
|
||||||
|
triggerFn: func(testCtx *testutils.TestContext) error {
|
||||||
|
// Trigger a NodeCreated event.
|
||||||
|
// It makes Pod1 schedulable.
|
||||||
|
node := st.MakeNode().Name("fake-node2").Obj()
|
||||||
|
if _, err := testCtx.ClientSet.CoreV1().Nodes().Create(testCtx.Ctx, node, metav1.CreateOptions{}); err != nil {
|
||||||
|
return fmt.Errorf("failed to create a new node: %w", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
wantRequeuedPods: sets.New("pod1"),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Pod rejected by the NodeUnschedulable plugin isn't requeued when another unschedulable node is created",
|
||||||
|
initialNodes: []*v1.Node{st.MakeNode().Name("fake-node1").Unschedulable(true).Obj()},
|
||||||
|
pods: []*v1.Pod{
|
||||||
|
st.MakePod().Name("pod1").Container("image").Obj(),
|
||||||
|
},
|
||||||
|
triggerFn: func(testCtx *testutils.TestContext) error {
|
||||||
|
// Trigger a NodeCreated event, but with unschedulable node, which wouldn't make Pod1 schedulable.
|
||||||
|
node := st.MakeNode().Name("fake-node2").Unschedulable(true).Obj()
|
||||||
|
if _, err := testCtx.ClientSet.CoreV1().Nodes().Create(testCtx.Ctx, node, metav1.CreateOptions{}); err != nil {
|
||||||
|
return fmt.Errorf("failed to create a new node: %w", err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
},
|
||||||
|
wantRequeuedPods: sets.Set[string]{},
|
||||||
|
// This test case is valid only when QHint is enabled
|
||||||
|
// because QHint filters out a node creation made in triggerFn.
|
||||||
|
enableSchedulingQueueHint: []bool{true},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "Pods with PodTopologySpread should be requeued when a Pod with matching label is scheduled",
|
name: "Pods with PodTopologySpread should be requeued when a Pod with matching label is scheduled",
|
||||||
initialNodes: []*v1.Node{st.MakeNode().Name("fake-node").Label("node", "fake-node").Capacity(map[v1.ResourceName]string{v1.ResourceCPU: "2"}).Obj()},
|
initialNodes: []*v1.Node{st.MakeNode().Name("fake-node").Label("node", "fake-node").Capacity(map[v1.ResourceName]string{v1.ResourceCPU: "2"}).Obj()},
|
||||||
|
Loading…
Reference in New Issue
Block a user