mirror of
https://github.com/kubernetes-sigs/descheduler.git
synced 2026-01-26 05:14:13 +01:00
Update duplicate pods removal strategy.
This commit is contained in:
@@ -24,6 +24,7 @@ import (
|
||||
"github.com/aveshagarwal/rescheduler/pkg/rescheduler/client"
|
||||
//"github.com/aveshagarwal/rescheduler/pkg/rescheduler/node"
|
||||
//"github.com/aveshagarwal/rescheduler/pkg/rescheduler/pod"
|
||||
eutils "github.com/aveshagarwal/rescheduler/pkg/rescheduler/evictions/utils"
|
||||
"github.com/aveshagarwal/rescheduler/pkg/rescheduler/strategies"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
@@ -56,7 +57,13 @@ func Run(rs *options.ReschedulerServer) error {
|
||||
return err
|
||||
}
|
||||
rs.Client = rsclient
|
||||
strategies.RemoveDuplicatePods(rs.Client)
|
||||
|
||||
policyGroupVersion, err := eutils.SupportEviction(rs.Client)
|
||||
if err != nil || len(policyGroupVersion) == 0 {
|
||||
return err
|
||||
}
|
||||
|
||||
strategies.RemoveDuplicatePods(rs.Client, policyGroupVersion)
|
||||
/*stopChannel := make(chan struct{})
|
||||
nodes, err := node.ReadyNodes(rs.Client, stopChannel)
|
||||
if err != nil {
|
||||
|
||||
@@ -17,10 +17,12 @@ limitations under the License.
|
||||
package evictions
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
apierrors "k8s.io/apimachinery/pkg/api/errors"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/kubernetes/pkg/api/v1"
|
||||
"k8s.io/kubernetes/pkg/apis/policy"
|
||||
policy "k8s.io/kubernetes/pkg/apis/policy/v1beta1"
|
||||
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
||||
|
||||
eutils "github.com/aveshagarwal/rescheduler/pkg/rescheduler/evictions/utils"
|
||||
@@ -45,9 +47,9 @@ func EvictPod(client clientset.Interface, pod *v1.Pod, policyGroupVersion string
|
||||
if err == nil {
|
||||
return true, nil
|
||||
} else if apierrors.IsTooManyRequests(err) {
|
||||
return false, fmt.Errorf("error when evicting pod %q: %v", pod.Name, err)
|
||||
} else if !apierrors.IsNotFound(err) {
|
||||
return true, fmt.Errorf("error when evicting pod %q: %v", pod.Name, err)
|
||||
return false, fmt.Errorf("error when evicting pod (ignoring) %q: %v", pod.Name, err)
|
||||
} else if apierrors.IsNotFound(err) {
|
||||
return true, fmt.Errorf("pod not found when evicting %q: %v", pod.Name, err)
|
||||
} else {
|
||||
return false, err
|
||||
}
|
||||
|
||||
@@ -27,8 +27,8 @@ const (
|
||||
|
||||
// SupportEviction uses Discovery API to find out if the server support eviction subresource
|
||||
// If support, it will return its groupVersion; Otherwise, it will return ""
|
||||
func SupportEviction(clientset clientset.Interface) (string, error) {
|
||||
discoveryClient := clientset.Discovery()
|
||||
func SupportEviction(client clientset.Interface) (string, error) {
|
||||
discoveryClient := client.Discovery()
|
||||
groupList, err := discoveryClient.ServerGroups()
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
||||
@@ -23,6 +23,7 @@ import (
|
||||
"k8s.io/kubernetes/pkg/api/v1"
|
||||
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
||||
|
||||
"github.com/aveshagarwal/rescheduler/pkg/rescheduler/evictions"
|
||||
"github.com/aveshagarwal/rescheduler/pkg/rescheduler/node"
|
||||
podutil "github.com/aveshagarwal/rescheduler/pkg/rescheduler/pod"
|
||||
)
|
||||
@@ -30,7 +31,7 @@ import (
|
||||
//type creator string
|
||||
type DuplicatePodsMap map[string][]*v1.Pod
|
||||
|
||||
func RemoveDuplicatePods(client clientset.Interface) error {
|
||||
func RemoveDuplicatePods(client clientset.Interface, policyGroupVersion string) error {
|
||||
stopChannel := make(chan struct{})
|
||||
nodes, err := node.ReadyNodes(client, stopChannel)
|
||||
if err != nil {
|
||||
@@ -39,10 +40,19 @@ func RemoveDuplicatePods(client clientset.Interface) error {
|
||||
for _, node := range nodes {
|
||||
fmt.Printf("\nProcessing node: %#v\n", node.Name)
|
||||
dpm := RemoveDuplicatePodsOnANode(client, node)
|
||||
for i, j := range dpm {
|
||||
fmt.Printf("%#v\n", i)
|
||||
for _, k := range j {
|
||||
fmt.Printf("Duplicate pod %#v\n", k.Name)
|
||||
for creator, pods := range dpm {
|
||||
if len(pods) > 1 {
|
||||
fmt.Printf("%#v\n", creator)
|
||||
// i = 0 does not evict the first pod
|
||||
for i := 1; i < len(pods); i++ {
|
||||
//fmt.Printf("Removing duplicate pod %#v\n", k.Name)
|
||||
success, err := evictions.EvictPod(client, pods[i], policyGroupVersion)
|
||||
if !success {
|
||||
fmt.Printf("Error when evicting pod: %#v (%#v)\n", pods[i].Name, err)
|
||||
} else {
|
||||
fmt.Printf("Evicted pod: %#v (%#v)\n", pods[i].Name, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user