mirror of
https://github.com/kubernetes-sigs/descheduler.git
synced 2026-01-28 06:29:29 +01:00
RemoveFailedPods: guard against nil descheduler strategy (e.g. in case of default that loads all strategies)
This commit is contained in:
@@ -19,7 +19,7 @@ import (
|
|||||||
|
|
||||||
// validatedFailedPodsStrategyParams contains validated strategy parameters
|
// validatedFailedPodsStrategyParams contains validated strategy parameters
|
||||||
type validatedFailedPodsStrategyParams struct {
|
type validatedFailedPodsStrategyParams struct {
|
||||||
*validation.ValidatedStrategyParams
|
validation.ValidatedStrategyParams
|
||||||
includingInitContainers bool
|
includingInitContainers bool
|
||||||
reasons sets.String
|
reasons sets.String
|
||||||
excludeOwnerKinds sets.String
|
excludeOwnerKinds sets.String
|
||||||
@@ -46,9 +46,15 @@ func RemoveFailedPods(
|
|||||||
evictions.WithLabelSelector(strategyParams.LabelSelector),
|
evictions.WithLabelSelector(strategyParams.LabelSelector),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var labelSelector *metav1.LabelSelector
|
||||||
|
if strategy.Params != nil {
|
||||||
|
labelSelector = strategy.Params.LabelSelector
|
||||||
|
}
|
||||||
|
|
||||||
for _, node := range nodes {
|
for _, node := range nodes {
|
||||||
klog.V(1).InfoS("Processing node", "node", klog.KObj(node))
|
klog.V(1).InfoS("Processing node", "node", klog.KObj(node))
|
||||||
fieldSelectorString := "spec.nodeName=" + node.Name + ",status.phase=" + string(v1.PodFailed)
|
fieldSelectorString := "spec.nodeName=" + node.Name + ",status.phase=" + string(v1.PodFailed)
|
||||||
|
|
||||||
pods, err := podutil.ListPodsOnANodeWithFieldSelector(
|
pods, err := podutil.ListPodsOnANodeWithFieldSelector(
|
||||||
ctx,
|
ctx,
|
||||||
client,
|
client,
|
||||||
@@ -57,7 +63,7 @@ func RemoveFailedPods(
|
|||||||
podutil.WithFilter(evictable.IsEvictable),
|
podutil.WithFilter(evictable.IsEvictable),
|
||||||
podutil.WithNamespaces(strategyParams.IncludedNamespaces.UnsortedList()),
|
podutil.WithNamespaces(strategyParams.IncludedNamespaces.UnsortedList()),
|
||||||
podutil.WithoutNamespaces(strategyParams.ExcludedNamespaces.UnsortedList()),
|
podutil.WithoutNamespaces(strategyParams.ExcludedNamespaces.UnsortedList()),
|
||||||
podutil.WithLabelSelector(strategy.Params.LabelSelector),
|
podutil.WithLabelSelector(labelSelector),
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
klog.ErrorS(err, "Error listing a nodes failed pods", "node", klog.KObj(node))
|
klog.ErrorS(err, "Error listing a nodes failed pods", "node", klog.KObj(node))
|
||||||
@@ -103,7 +109,7 @@ func validateAndParseRemoveFailedPodsParams(
|
|||||||
}
|
}
|
||||||
|
|
||||||
return &validatedFailedPodsStrategyParams{
|
return &validatedFailedPodsStrategyParams{
|
||||||
ValidatedStrategyParams: strategyParams,
|
ValidatedStrategyParams: *strategyParams,
|
||||||
includingInitContainers: includingInitContainers,
|
includingInitContainers: includingInitContainers,
|
||||||
reasons: reasons,
|
reasons: reasons,
|
||||||
excludeOwnerKinds: excludeOwnerKinds,
|
excludeOwnerKinds: excludeOwnerKinds,
|
||||||
|
|||||||
@@ -44,6 +44,13 @@ func TestRemoveFailedPods(t *testing.T) {
|
|||||||
expectedEvictedPodCount int
|
expectedEvictedPodCount int
|
||||||
pods []v1.Pod
|
pods []v1.Pod
|
||||||
}{
|
}{
|
||||||
|
{
|
||||||
|
description: "default empty strategy, 0 failures, 0 evictions",
|
||||||
|
strategy: api.DeschedulerStrategy{},
|
||||||
|
nodes: []*v1.Node{test.BuildTestNode("node1", 2000, 3000, 10, nil)},
|
||||||
|
expectedEvictedPodCount: 0,
|
||||||
|
pods: []v1.Pod{}, // no pods come back with field selector phase=Failed
|
||||||
|
},
|
||||||
{
|
{
|
||||||
description: "0 failures, 0 evictions",
|
description: "0 failures, 0 evictions",
|
||||||
strategy: createStrategy(true, false, nil, nil, nil, false),
|
strategy: createStrategy(true, false, nil, nil, nil, false),
|
||||||
@@ -225,6 +232,7 @@ func TestValidRemoveFailedPodsParams(t *testing.T) {
|
|||||||
params *api.StrategyParameters
|
params *api.StrategyParameters
|
||||||
}{
|
}{
|
||||||
{name: "validate nil params", params: nil},
|
{name: "validate nil params", params: nil},
|
||||||
|
{name: "validate empty params", params: &api.StrategyParameters{}},
|
||||||
{name: "validate reasons params", params: &api.StrategyParameters{FailedPods: &api.FailedPods{
|
{name: "validate reasons params", params: &api.StrategyParameters{FailedPods: &api.FailedPods{
|
||||||
Reasons: []string{"CreateContainerConfigError"},
|
Reasons: []string{"CreateContainerConfigError"},
|
||||||
}}},
|
}}},
|
||||||
|
|||||||
Reference in New Issue
Block a user