mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-26 21:17:23 +00:00
Merge pull request #73401 from krzysztof-jastrzebski/daemonsets
Delete pods assigned to not existing nodes.
This commit is contained in:
commit
f78770565c
@ -964,6 +964,9 @@ func (dsc *DaemonSetsController) manage(ds *apps.DaemonSet, hash string) error {
|
|||||||
failedPodsObserved += failedPodsObservedOnNode
|
failedPodsObserved += failedPodsObservedOnNode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Remove pods assigned to not existing nodes.
|
||||||
|
podsToDelete = append(podsToDelete, getPodsWithoutNode(nodeList, nodeToDaemonPods)...)
|
||||||
|
|
||||||
// Label new pods using the hash label value of the current history when creating them
|
// Label new pods using the hash label value of the current history when creating them
|
||||||
if err = dsc.syncNodes(ds, podsToDelete, nodesNeedingDaemonPods, hash); err != nil {
|
if err = dsc.syncNodes(ds, podsToDelete, nodesNeedingDaemonPods, hash); err != nil {
|
||||||
return err
|
return err
|
||||||
@ -1524,3 +1527,21 @@ func (o podByCreationTimestampAndPhase) Less(i, j int) bool {
|
|||||||
func failedPodsBackoffKey(ds *apps.DaemonSet, nodeName string) string {
|
func failedPodsBackoffKey(ds *apps.DaemonSet, nodeName string) string {
|
||||||
return fmt.Sprintf("%s/%d/%s", ds.UID, ds.Status.ObservedGeneration, nodeName)
|
return fmt.Sprintf("%s/%d/%s", ds.UID, ds.Status.ObservedGeneration, nodeName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getPodsWithoutNode returns list of pods assigned to not existing nodes.
|
||||||
|
func getPodsWithoutNode(
|
||||||
|
runningNodesList []*v1.Node, nodeToDaemonPods map[string][]*v1.Pod) []string {
|
||||||
|
var results []string
|
||||||
|
isNodeRunning := make(map[string]bool)
|
||||||
|
for _, node := range runningNodesList {
|
||||||
|
isNodeRunning[node.Name] = true
|
||||||
|
}
|
||||||
|
for n, pods := range nodeToDaemonPods {
|
||||||
|
if !isNodeRunning[n] {
|
||||||
|
for _, pod := range pods {
|
||||||
|
results = append(results, pod.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results
|
||||||
|
}
|
||||||
|
@ -2447,6 +2447,25 @@ func TestDeleteNoDaemonPod(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDeletePodForNotExistingNode(t *testing.T) {
|
||||||
|
for _, f := range []bool{true, false} {
|
||||||
|
defer utilfeaturetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ScheduleDaemonSetPods, f)()
|
||||||
|
for _, strategy := range updateStrategies() {
|
||||||
|
ds := newDaemonSet("foo")
|
||||||
|
ds.Spec.UpdateStrategy = *strategy
|
||||||
|
manager, podControl, _, err := newTestController(ds)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("error creating DaemonSets controller: %v", err)
|
||||||
|
}
|
||||||
|
manager.dsStore.Add(ds)
|
||||||
|
addNodes(manager.nodeStore, 0, 1, nil)
|
||||||
|
addPods(manager.podStore, "node-0", simpleDaemonSetLabel, ds, 1)
|
||||||
|
addPods(manager.podStore, "node-1", simpleDaemonSetLabel, ds, 1)
|
||||||
|
syncAndValidateDaemonSets(t, manager, ds, podControl, 0, 1, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestGetNodesToDaemonPods(t *testing.T) {
|
func TestGetNodesToDaemonPods(t *testing.T) {
|
||||||
for _, f := range []bool{true, false} {
|
for _, f := range []bool{true, false} {
|
||||||
defer utilfeaturetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ScheduleDaemonSetPods, f)()
|
defer utilfeaturetesting.SetFeatureGateDuringTest(t, utilfeature.DefaultFeatureGate, features.ScheduleDaemonSetPods, f)()
|
||||||
|
Loading…
Reference in New Issue
Block a user