1
0
mirror of https://github.com/kubernetes-sigs/descheduler.git synced 2026-01-27 05:46:13 +01:00

Update duplicate strategy implementation.

This commit is contained in:
Avesh Agarwal
2017-08-03 00:56:43 -04:00
parent 44fb747a4a
commit a73f81ecfa

View File

@@ -17,6 +17,9 @@ limitations under the License.
package strategies
import (
"fmt"
"strings"
"k8s.io/kubernetes/pkg/api/v1"
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
@@ -24,25 +27,45 @@ import (
"github.com/aveshagarwal/rescheduler/pkg/rescheduler/pod"
)
type creator string
type DuplicatePodsMap [creator][]*v1.Pod
//type creator string
type DuplicatePodsMap map[string][]*v1.Pod
func RemoveDuplicatePods(client clientset.Interface) {
func RemoveDuplicatePods(client clientset.Interface) error {
stopChannel := make(chan struct{})
nodes, err := node.ReadyNodes(client, stopChannel)
if err != nil {
return err
}
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)
}
}
}
}
func RemoveDuplicatePodsOnANode(client clientset.Interface, node *v1.Node) {
func RemoveDuplicatePodsOnANode(client clientset.Interface, node *v1.Node) DuplicatePodsMap {
pods := pod.ListPodsOnANode(client, node)
return FindDuplicatePods(pods)
}
func FindDuplicatePods(pods []*v1.Pod) {
for i, pod := range pods {
sr, err := pod.CreatorRef(pod[i])
func FindDuplicatePods(pods []*v1.Pod) DuplicatePodsMap {
dpm := DuplicatePodsMap{}
for _, pod := range pods {
sr, err := pod.CreatorRef(pod)
if err != nil || sr == nil {
continue
}
if pod.IsMirrorPod(pod) || IsDaemonsetPod(sr) || IsPodWithLocalStorage(pod) {
continue
}
s := strings.Join([]string{sr.Reference.Kind, sr.Reference.Namespace, sr.Reference.Name}, "/")
append(dpm[s], pod)
}
return dpm
}