1
0
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:
Avesh Agarwal
2017-08-03 02:07:50 -04:00
parent 7a2a3ce91a
commit adb84cab8d
4 changed files with 31 additions and 12 deletions

View File

@@ -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 {

View File

@@ -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
}

View File

@@ -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

View File

@@ -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)
}
}
}
}
}