@@ -1386,7 +1386,7 @@ var _ = Describe("Candidate Filtering", func() {
13861386 Expect (err .Error ()).To (Equal (fmt .Sprintf (`pdb prevents pod evictions (PodDisruptionBudget=[%s])` , client .ObjectKeyFromObject (budget ))))
13871387 Expect (recorder .DetectedEvent (fmt .Sprintf (`Pdb prevents pod evictions (PodDisruptionBudget=[%s])` , client .ObjectKeyFromObject (budget )))).To (BeTrue ())
13881388 })
1389- It ("should not consider candidates that have fully blocking PDBs on daemonset pods" , func () {
1389+ It ("should consider candidates that have fully blocking PDBs on daemonset pods since daemonset pods are not evicted " , func () {
13901390 daemonSet := test .DaemonSet ()
13911391 nodeClaim , node := test .NodeClaimAndNode (v1.NodeClaim {
13921392 ObjectMeta : metav1.ObjectMeta {
@@ -1428,10 +1428,55 @@ var _ = Describe("Candidate Filtering", func() {
14281428 Expect (err ).ToNot (HaveOccurred ())
14291429
14301430 Expect (cluster .DeepCopyNodes ()).To (HaveLen (1 ))
1431- _ , err = disruption .NewCandidate (ctx , env .Client , recorder , fakeClock , cluster .DeepCopyNodes ()[0 ], pdbLimits , nodePoolMap , nodePoolInstanceTypeMap , queue , disruption .GracefulDisruptionClass )
1432- Expect (err ).To (HaveOccurred ())
1433- Expect (err .Error ()).To (Equal (fmt .Sprintf (`pdb prevents pod evictions (PodDisruptionBudget=[%s])` , client .ObjectKeyFromObject (budget ))))
1434- Expect (recorder .DetectedEvent (fmt .Sprintf (`Pdb prevents pod evictions (PodDisruptionBudget=[%s])` , client .ObjectKeyFromObject (budget )))).To (BeTrue ())
1431+ // DaemonSet pods are not evicted during disruption, so PDB does not block the node from being a candidate
1432+ c , err := disruption .NewCandidate (ctx , env .Client , recorder , fakeClock , cluster .DeepCopyNodes ()[0 ], pdbLimits , nodePoolMap , nodePoolInstanceTypeMap , queue , disruption .GracefulDisruptionClass )
1433+ Expect (err ).ToNot (HaveOccurred ())
1434+ Expect (c ).ToNot (BeNil ())
1435+ Expect (c .NodeClaim .Name ).To (Equal (nodeClaim .Name ))
1436+ })
1437+ It ("should consider candidates with only daemonset pods as these pods should not be evicted during disruption" , func () {
1438+ daemonSet := test .DaemonSet ()
1439+ nodeClaim , node := test .NodeClaimAndNode (v1.NodeClaim {
1440+ ObjectMeta : metav1.ObjectMeta {
1441+ Labels : map [string ]string {
1442+ v1 .NodePoolLabelKey : nodePool .Name ,
1443+ corev1 .LabelInstanceTypeStable : mostExpensiveInstance .Name ,
1444+ v1 .CapacityTypeLabelKey : mostExpensiveOffering .Requirements .Get (v1 .CapacityTypeLabelKey ).Any (),
1445+ corev1 .LabelTopologyZone : mostExpensiveOffering .Requirements .Get (corev1 .LabelTopologyZone ).Any (),
1446+ },
1447+ },
1448+ })
1449+ ExpectApplied (ctx , env .Client , nodePool , nodeClaim , node , daemonSet )
1450+ pod := test .Pod (test.PodOptions {
1451+ ObjectMeta : metav1.ObjectMeta {
1452+ OwnerReferences : []metav1.OwnerReference {
1453+ {
1454+ APIVersion : "apps/v1" ,
1455+ Kind : "DaemonSet" ,
1456+ Name : daemonSet .Name ,
1457+ UID : daemonSet .UID ,
1458+ Controller : lo .ToPtr (true ),
1459+ },
1460+ },
1461+ },
1462+ })
1463+ ExpectApplied (ctx , env .Client , pod )
1464+ ExpectManualBinding (ctx , env .Client , pod , node )
1465+
1466+ ExpectMakeNodesAndNodeClaimsInitializedAndStateUpdated (ctx , env .Client , nodeStateController , nodeClaimStateController , []* corev1.Node {node }, []* v1.NodeClaim {nodeClaim })
1467+
1468+ var err error
1469+ pdbLimits , err = pdb .NewLimits (ctx , env .Client )
1470+ Expect (err ).ToNot (HaveOccurred ())
1471+
1472+ Expect (cluster .DeepCopyNodes ()).To (HaveLen (1 ))
1473+ c , err := disruption .NewCandidate (ctx , env .Client , recorder , fakeClock , cluster .DeepCopyNodes ()[0 ], pdbLimits , nodePoolMap , nodePoolInstanceTypeMap , queue , disruption .GracefulDisruptionClass )
1474+ // A candidate with only DaemonSet pods should be created successfully
1475+ // DaemonSet pods are not considered reschedulable, so the node should be treated similarly to an empty node
1476+ Expect (err ).ToNot (HaveOccurred ())
1477+ Expect (c ).ToNot (BeNil ())
1478+ Expect (c .NodeClaim .Name ).To (Equal (nodeClaim .Name ))
1479+ Expect (c .Node .Name ).To (Equal (node .Name ))
14351480 })
14361481 It ("should consider candidates that have fully blocking PDBs on mirror pods" , func () {
14371482 nodeClaim , node := test .NodeClaimAndNode (v1.NodeClaim {
0 commit comments