Skip to content

Commit 9c142cf

Browse files
Delete only unscheduled pods if node doesn't exist anymore.
1 parent d99f49d commit 9c142cf

File tree

2 files changed

+29
-6
lines changed

2 files changed

+29
-6
lines changed

pkg/controller/daemon/daemon_controller.go

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -960,10 +960,10 @@ func (dsc *DaemonSetsController) manage(ds *apps.DaemonSet, nodeList []*v1.Node,
960960
failedPodsObserved += failedPodsObservedOnNode
961961
}
962962

963-
// Remove pods assigned to not existing nodes when daemonset pods are scheduled by default scheduler.
963+
// Remove unscheduled pods assigned to not existing nodes when daemonset pods are scheduled by scheduler.
964964
// If node doesn't exist then pods are never scheduled and can't be deleted by PodGCController.
965965
if utilfeature.DefaultFeatureGate.Enabled(features.ScheduleDaemonSetPods) {
966-
podsToDelete = append(podsToDelete, getPodsWithoutNode(nodeList, nodeToDaemonPods)...)
966+
podsToDelete = append(podsToDelete, getUnscheduledPodsWithoutNode(nodeList, nodeToDaemonPods)...)
967967
}
968968

969969
// Label new pods using the hash label value of the current history when creating them
@@ -1527,8 +1527,9 @@ func failedPodsBackoffKey(ds *apps.DaemonSet, nodeName string) string {
15271527
return fmt.Sprintf("%s/%d/%s", ds.UID, ds.Status.ObservedGeneration, nodeName)
15281528
}
15291529

1530-
// getPodsWithoutNode returns list of pods assigned to not existing nodes.
1531-
func getPodsWithoutNode(runningNodesList []*v1.Node, nodeToDaemonPods map[string][]*v1.Pod) []string {
1530+
// getUnscheduledPodsWithoutNode returns list of unscheduled pods assigned to not existing nodes.
1531+
// Returned pods can't be deleted by PodGCController so they should be deleted by DaemonSetController.
1532+
func getUnscheduledPodsWithoutNode(runningNodesList []*v1.Node, nodeToDaemonPods map[string][]*v1.Pod) []string {
15321533
var results []string
15331534
isNodeRunning := make(map[string]bool)
15341535
for _, node := range runningNodesList {
@@ -1537,7 +1538,9 @@ func getPodsWithoutNode(runningNodesList []*v1.Node, nodeToDaemonPods map[string
15371538
for n, pods := range nodeToDaemonPods {
15381539
if !isNodeRunning[n] {
15391540
for _, pod := range pods {
1540-
results = append(results, pod.Name)
1541+
if len(pod.Spec.NodeName) == 0 {
1542+
results = append(results, pod.Name)
1543+
}
15411544
}
15421545
}
15431546
}

pkg/controller/daemon/daemon_controller_test.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2447,7 +2447,7 @@ func TestDeleteNoDaemonPod(t *testing.T) {
24472447
}
24482448
}
24492449

2450-
func TestDeletePodForNotExistingNode(t *testing.T) {
2450+
func TestDeleteUnscheduledPodForNotExistingNode(t *testing.T) {
24512451
for _, f := range []bool{true, false} {
24522452
defer utilfeaturetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ScheduleDaemonSetPods, f)()
24532453
for _, strategy := range updateStrategies() {
@@ -2461,6 +2461,26 @@ func TestDeletePodForNotExistingNode(t *testing.T) {
24612461
addNodes(manager.nodeStore, 0, 1, nil)
24622462
addPods(manager.podStore, "node-0", simpleDaemonSetLabel, ds, 1)
24632463
addPods(manager.podStore, "node-1", simpleDaemonSetLabel, ds, 1)
2464+
2465+
podScheduledUsingAffinity := newPod("pod1-node-3", "", simpleDaemonSetLabel, ds)
2466+
podScheduledUsingAffinity.Spec.Affinity = &v1.Affinity{
2467+
NodeAffinity: &v1.NodeAffinity{
2468+
RequiredDuringSchedulingIgnoredDuringExecution: &v1.NodeSelector{
2469+
NodeSelectorTerms: []v1.NodeSelectorTerm{
2470+
{
2471+
MatchFields: []v1.NodeSelectorRequirement{
2472+
{
2473+
Key: schedulerapi.NodeFieldSelectorKeyNodeName,
2474+
Operator: v1.NodeSelectorOpIn,
2475+
Values: []string{"node-2"},
2476+
},
2477+
},
2478+
},
2479+
},
2480+
},
2481+
},
2482+
}
2483+
manager.podStore.Add(podScheduledUsingAffinity)
24642484
if f {
24652485
syncAndValidateDaemonSets(t, manager, ds, podControl, 0, 1, 0)
24662486
} else {

0 commit comments

Comments
 (0)