Skip to content

Commit

Permalink
Migrate RemoveFailedPods to plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
a7i committed Jun 24, 2022
1 parent 5c5c83c commit f1533da
Show file tree
Hide file tree
Showing 15 changed files with 476 additions and 304 deletions.
14 changes: 14 additions & 0 deletions pkg/apis/componentconfig/types_pluginargs.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,17 @@ type RemovePodsViolatingNodeTaintsArgs struct {
IncludePreferNoSchedule bool
ExcludedTaints []string
}

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

// RemoveFailedPodsArgs holds arguments used to configure RemoveFailedPodsArgs plugin.
type RemoveFailedPodsArgs struct {
metav1.TypeMeta

Namespaces *api.Namespaces
LabelSelector *metav1.LabelSelector
ExcludeOwnerKinds []string
MinPodLifetimeSeconds *uint
Reasons []string
IncludingInitContainers bool
}
19 changes: 18 additions & 1 deletion pkg/apis/componentconfig/validation/validation_pluginargs.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,32 @@ package validation
import (
"fmt"

metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/descheduler/pkg/api"
"sigs.k8s.io/descheduler/pkg/apis/componentconfig"
)

// ValidateRemovePodsViolatingNodeTaintsArgs validates RemovePodsViolatingNodeTaints arguments
func ValidateRemovePodsViolatingNodeTaintsArgs(args *componentconfig.RemovePodsViolatingNodeTaintsArgs) error {
return validateCommonArgs(args.Namespaces, args.LabelSelector)
}

// ValidateRemoveFailedPodsArgs validates RemoveFailedPods arguments
func ValidateRemoveFailedPodsArgs(args *componentconfig.RemoveFailedPodsArgs) error {
return validateCommonArgs(args.Namespaces, args.LabelSelector)
}

func validateCommonArgs(namespaces *api.Namespaces, labelSelector *metav1.LabelSelector) error {
// At most one of include/exclude can be set
if args.Namespaces != nil && len(args.Namespaces.Include) > 0 && len(args.Namespaces.Exclude) > 0 {
if namespaces != nil && len(namespaces.Include) > 0 && len(namespaces.Exclude) > 0 {
return fmt.Errorf("only one of Include/Exclude namespaces can be set")
}

if labelSelector != nil {
if _, err := metav1.LabelSelectorAsSelector(labelSelector); err != nil {
return fmt.Errorf("failed to get label selectors from strategy's params: %+v", err)
}
}

return nil
}
50 changes: 50 additions & 0 deletions pkg/apis/componentconfig/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

17 changes: 14 additions & 3 deletions pkg/descheduler/descheduler.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import (
"sigs.k8s.io/descheduler/pkg/descheduler/strategies"
"sigs.k8s.io/descheduler/pkg/descheduler/strategies/nodeutilization"
"sigs.k8s.io/descheduler/pkg/framework"
"sigs.k8s.io/descheduler/pkg/framework/plugins/removefailedpods"
"sigs.k8s.io/descheduler/pkg/framework/plugins/removepodsviolatingnodetaints"
"sigs.k8s.io/descheduler/pkg/utils"
)
Expand Down Expand Up @@ -245,11 +246,11 @@ func RunDeschedulerStrategies(ctx context.Context, rs *options.DeschedulerServer
"HighNodeUtilization": nodeutilization.HighNodeUtilization,
"RemovePodsViolatingInterPodAntiAffinity": strategies.RemovePodsViolatingInterPodAntiAffinity,
"RemovePodsViolatingNodeAffinity": strategies.RemovePodsViolatingNodeAffinity,
"RemovePodsViolatingNodeTaints": nil,
removepodsviolatingnodetaints.PluginName: nil,
"RemovePodsHavingTooManyRestarts": strategies.RemovePodsHavingTooManyRestarts,
"PodLifeTime": strategies.PodLifeTime,
"RemovePodsViolatingTopologySpreadConstraint": strategies.RemovePodsViolatingTopologySpreadConstraint,
"RemoveFailedPods": strategies.RemoveFailedPods,
removefailedpods.PluginName: nil,
}

var nodeSelector string
Expand Down Expand Up @@ -375,7 +376,7 @@ func RunDeschedulerStrategies(ctx context.Context, rs *options.DeschedulerServer
}

switch name {
case "RemovePodsViolatingNodeTaints":
case removepodsviolatingnodetaints.PluginName:
pg, err := RemovePodsViolatingNodeTaints2plugin(params, handle)
if err != nil {
klog.V(1).ErrorS(err, "unable to initialize a plugin", "pluginName", removepodsviolatingnodetaints.PluginName)
Expand All @@ -385,6 +386,16 @@ func RunDeschedulerStrategies(ctx context.Context, rs *options.DeschedulerServer
if status != nil && status.Err != nil {
klog.V(1).ErrorS(err, "plugin finished with error", "pluginName", removepodsviolatingnodetaints.PluginName)
}
case removefailedpods.PluginName:
pg, err := RemoveFailedPods2plugin(params, handle)
if err != nil {
klog.V(1).ErrorS(err, "unable to initialize a plugin", "pluginName", removefailedpods.PluginName)
continue
}
status := pg.Deschedule(ctx, nodes)
if status != nil && status.Err != nil {
klog.V(1).ErrorS(err, "plugin finished with error", "pluginName", removepodsviolatingnodetaints.PluginName)
}
default:
f(context.WithValue(ctx, "strategyName", string(name)), rs.Client, strategy, nodes, podEvictor, evictorFilter, getPodsAssignedToNode)
}
Expand Down
174 changes: 0 additions & 174 deletions pkg/descheduler/strategies/failedpods.go

This file was deleted.

24 changes: 24 additions & 0 deletions pkg/descheduler/strategy_migration.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import (
"sigs.k8s.io/descheduler/pkg/apis/componentconfig"
"sigs.k8s.io/descheduler/pkg/apis/componentconfig/validation"
"sigs.k8s.io/descheduler/pkg/framework"
"sigs.k8s.io/descheduler/pkg/framework/plugins/removefailedpods"
"sigs.k8s.io/descheduler/pkg/framework/plugins/removepodsviolatingnodetaints"
)

Expand All @@ -43,3 +44,26 @@ func RemovePodsViolatingNodeTaints2plugin(params *api.StrategyParameters, handle
}
return pg.(framework.DeschedulePlugin), nil
}

func RemoveFailedPods2plugin(params *api.StrategyParameters, handle *handleImpl) (framework.DeschedulePlugin, error) {
failedPodsParams := params.FailedPods
if failedPodsParams == nil {
failedPodsParams = &api.FailedPods{}
}
args := &componentconfig.RemoveFailedPodsArgs{
Namespaces: params.Namespaces,
LabelSelector: params.LabelSelector,
IncludingInitContainers: failedPodsParams.IncludingInitContainers,
MinPodLifetimeSeconds: failedPodsParams.MinPodLifetimeSeconds,
ExcludeOwnerKinds: failedPodsParams.ExcludeOwnerKinds,
Reasons: failedPodsParams.Reasons,
}
if err := validation.ValidateRemoveFailedPodsArgs(args); err != nil {
return nil, err
}
pg, err := removefailedpods.New(args, handle)
if err != nil {
return nil, err
}
return pg.(framework.DeschedulePlugin), nil
}
Loading

0 comments on commit f1533da

Please sign in to comment.