mirror of
https://github.com/kubernetes-sigs/descheduler.git
synced 2026-01-26 05:14:13 +01:00
Update rescheduler implementation.
This commit is contained in:
@@ -23,6 +23,7 @@ import (
|
||||
"github.com/aveshagarwal/rescheduler/cmd/rescheduler/app/options"
|
||||
"github.com/aveshagarwal/rescheduler/pkg/rescheduler/client"
|
||||
"github.com/aveshagarwal/rescheduler/pkg/rescheduler/node"
|
||||
"github.com/aveshagarwal/rescheduler/pkg/rescheduler/pod"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
@@ -60,6 +61,19 @@ func Run(rs *options.ReschedulerServer) error {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Printf("\nnodes = %#v\n", nodes)
|
||||
for _, n := range nodes {
|
||||
fmt.Printf("\nnode = %#v\n", n)
|
||||
}
|
||||
|
||||
for _, node := range nodes {
|
||||
pods, err := pod.ListPodsOnANode(rs.Client, node)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for _, p := range pods {
|
||||
fmt.Printf("\npod = %#v\n", p)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -31,25 +31,29 @@ import (
|
||||
|
||||
// ReadyNodes returns ready nodes irrespective of whether they are
|
||||
// schedulable or not.
|
||||
func ReadyNodes(client clientset.Interface, stopChannel <-chan struct{}) ([]v1.Node, error) {
|
||||
func ReadyNodes(client clientset.Interface, stopChannel <-chan struct{}) ([]*v1.Node, error) {
|
||||
nl := getNodeLister(client, stopChannel)
|
||||
nodes, err := nl.List(labels.Everything())
|
||||
if err != nil {
|
||||
return []v1.Node{}, err
|
||||
return []*v1.Node{}, err
|
||||
}
|
||||
|
||||
if len(nodes) == 0 {
|
||||
var err error
|
||||
nItems, err := client.Core().Nodes().List(metav1.ListOptions{})
|
||||
if err != nil {
|
||||
return []v1.Node{}, err
|
||||
return []*v1.Node{}, err
|
||||
}
|
||||
|
||||
for _, node := range nItems.Items {
|
||||
nodes = append(nodes, &node)
|
||||
}
|
||||
return nItems.Items, nil
|
||||
}
|
||||
readyNodes := make([]v1.Node, 0, len(nodes))
|
||||
|
||||
readyNodes := make([]*v1.Node, 0, len(nodes))
|
||||
for _, node := range nodes {
|
||||
if IsReady(node) {
|
||||
readyNodes = append(readyNodes, *node)
|
||||
readyNodes = append(readyNodes, node)
|
||||
}
|
||||
}
|
||||
return readyNodes, nil
|
||||
|
||||
@@ -17,6 +17,8 @@ limitations under the License.
|
||||
package pod
|
||||
|
||||
import (
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
"k8s.io/apimachinery/pkg/fields"
|
||||
"k8s.io/kubernetes/pkg/api/v1"
|
||||
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
||||
)
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
/*
|
||||
Copyright 2017 The Kubernetes Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
package pod
|
||||
|
||||
import (
|
||||
"k8s.io/kubernetes/pkg/api/v1"
|
||||
"k8s.io/kubernetes/pkg/client/clientset_generated/clientset"
|
||||
)
|
||||
|
||||
func ListPodsOnANode(client clientset.Interface, node *v1.Node) ([]*v1.Pod, error) {
|
||||
podList, err := client.CoreV1().Pods(v1.NamespaceAll).List(
|
||||
metav1.ListOptions{FieldSelector: fields.SelectorFromSet(fields.Set{"spec.nodeName": node.Name}).String()})
|
||||
if err != nil {
|
||||
return []*v1.Pod{}, err
|
||||
}
|
||||
|
||||
pods := make([]*v1.Pod, 0)
|
||||
for i := range podList.Items {
|
||||
pods = append(pods, &podList.Items[i])
|
||||
}
|
||||
|
||||
return pods, nil
|
||||
}
|
||||
Reference in New Issue
Block a user