From 6cfec4d919e3354d86fc71bbe0582550cf60033b Mon Sep 17 00:00:00 2001 From: draveness Date: Tue, 13 Aug 2019 22:21:49 +0800 Subject: [PATCH] feat: remove factory.Config from mustSetupScheduler --- test/integration/scheduler_perf/BUILD | 6 +++-- .../scheduler_perf/scheduler_bench_test.go | 8 +++--- .../scheduler_perf/scheduler_test.go | 11 +++++--- test/integration/scheduler_perf/util.go | 26 +++++++++---------- test/integration/util/BUILD | 1 - test/integration/util/util.go | 8 +++--- 6 files changed, 33 insertions(+), 27 deletions(-) diff --git a/test/integration/scheduler_perf/BUILD b/test/integration/scheduler_perf/BUILD index 85fd2bd64c9..d16f19019ab 100644 --- a/test/integration/scheduler_perf/BUILD +++ b/test/integration/scheduler_perf/BUILD @@ -14,10 +14,10 @@ go_library( ], importpath = "k8s.io/kubernetes/test/integration/scheduler_perf", deps = [ - "//pkg/scheduler/factory:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", - "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library", "//test/integration/util:go_default_library", @@ -36,12 +36,14 @@ go_test( tags = ["integration"], deps = [ "//pkg/features:go_default_library", + "//pkg/scheduler/factory:go_default_library", "//pkg/volume/util:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/storage/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/resource:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", + "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", "//staging/src/k8s.io/component-base/featuregate/testing:go_default_library", "//staging/src/k8s.io/csi-translation-lib/plugins:go_default_library", diff --git a/test/integration/scheduler_perf/scheduler_bench_test.go b/test/integration/scheduler_perf/scheduler_bench_test.go index 7b154dafa6e..0ba245ae2c8 100644 --- a/test/integration/scheduler_perf/scheduler_bench_test.go +++ b/test/integration/scheduler_perf/scheduler_bench_test.go @@ -31,6 +31,7 @@ import ( csilibplugins "k8s.io/csi-translation-lib/plugins" "k8s.io/klog" "k8s.io/kubernetes/pkg/features" + "k8s.io/kubernetes/pkg/scheduler/factory" "k8s.io/kubernetes/pkg/volume/util" "k8s.io/kubernetes/test/integration/framework" testutils "k8s.io/kubernetes/test/utils" @@ -358,9 +359,10 @@ func benchmarkScheduling(numNodes, numExistingPods, minPods int, if b.N < minPods { b.N = minPods } - _, finalFunc, clientset := mustSetupScheduler() + finalFunc, clientset := mustSetupScheduler() defer finalFunc() + podInformer := factory.NewPodInformer(clientset, 0) nodePreparer := framework.NewIntegrationTestNodePreparer( clientset, []testutils.CountToStrategy{{Count: numNodes, Strategy: nodeStrategy}}, @@ -377,7 +379,7 @@ func benchmarkScheduling(numNodes, numExistingPods, minPods int, podCreator.CreatePods() for { - scheduled, err := getScheduledPods(clientset) + scheduled, err := getScheduledPods(podInformer) if err != nil { klog.Fatalf("%v", err) } @@ -394,7 +396,7 @@ func benchmarkScheduling(numNodes, numExistingPods, minPods int, podCreator.CreatePods() for { // TODO: Setup watch on apiserver and wait until all pods scheduled. - scheduled, err := getScheduledPods(clientset) + scheduled, err := getScheduledPods(podInformer) if err != nil { klog.Fatalf("%v", err) } diff --git a/test/integration/scheduler_perf/scheduler_test.go b/test/integration/scheduler_perf/scheduler_test.go index eef16b23779..314b6809ab1 100644 --- a/test/integration/scheduler_perf/scheduler_test.go +++ b/test/integration/scheduler_perf/scheduler_test.go @@ -26,7 +26,9 @@ import ( v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + coreinformers "k8s.io/client-go/informers/core/v1" clientset "k8s.io/client-go/kubernetes" + "k8s.io/kubernetes/pkg/scheduler/factory" testutils "k8s.io/kubernetes/test/utils" "k8s.io/klog" @@ -107,12 +109,13 @@ type testConfig struct { mutatedNodeTemplate *v1.Node mutatedPodTemplate *v1.Pod clientset clientset.Interface + podInformer coreinformers.PodInformer destroyFunc func() } // getBaseConfig returns baseConfig after initializing number of nodes and pods. func getBaseConfig(nodes int, pods int) *testConfig { - _, destroyFunc, clientset := mustSetupScheduler() + destroyFunc, clientset := mustSetupScheduler() return &testConfig{ clientset: clientset, destroyFunc: destroyFunc, @@ -133,10 +136,12 @@ func schedulePods(config *testConfig) int32 { // We are interested in low scheduling rates (i.e. qps=2), minQPS := int32(math.MaxInt32) start := time.Now() + + podInformer := factory.NewPodInformer(config.clientset, 0) // Bake in time for the first pod scheduling event. for { time.Sleep(50 * time.Millisecond) - scheduled, err := getScheduledPods(config.clientset) + scheduled, err := getScheduledPods(podInformer) if err != nil { klog.Fatalf("%v", err) } @@ -152,7 +157,7 @@ func schedulePods(config *testConfig) int32 { // Now that scheduling has started, lets start taking the pulse on how many pods are happening per second. for { // TODO: Setup watch on apiserver and wait until all pods scheduled. - scheduled, err := getScheduledPods(config.clientset) + scheduled, err := getScheduledPods(podInformer) if err != nil { klog.Fatalf("%v", err) } diff --git a/test/integration/scheduler_perf/util.go b/test/integration/scheduler_perf/util.go index 97f98286b0a..6383b19aea4 100644 --- a/test/integration/scheduler_perf/util.go +++ b/test/integration/scheduler_perf/util.go @@ -18,22 +18,22 @@ package benchmark import ( v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/runtime/schema" + coreinformers "k8s.io/client-go/informers/core/v1" clientset "k8s.io/client-go/kubernetes" restclient "k8s.io/client-go/rest" - "k8s.io/kubernetes/pkg/scheduler/factory" "k8s.io/kubernetes/test/integration/util" ) // mustSetupScheduler starts the following components: // - k8s api server (a.k.a. master) // - scheduler -// It returns scheduler config factory and destroyFunc which should be used to +// It returns clientset and destroyFunc which should be used to // remove resources after finished. // Notes on rate limiter: // - client rate limit is set to 5000. -func mustSetupScheduler() (*factory.Config, util.ShutdownFunc, clientset.Interface) { +func mustSetupScheduler() (util.ShutdownFunc, clientset.Interface) { apiURL, apiShutdown := util.StartApiserver() clientSet := clientset.NewForConfigOrDie(&restclient.Config{ Host: apiURL, @@ -41,26 +41,26 @@ func mustSetupScheduler() (*factory.Config, util.ShutdownFunc, clientset.Interfa QPS: 5000.0, Burst: 5000, }) - schedulerConfig, schedulerShutdown := util.StartScheduler(clientSet) + _, schedulerShutdown := util.StartScheduler(clientSet) shutdownFunc := func() { schedulerShutdown() apiShutdown() } - return schedulerConfig, shutdownFunc, clientSet + + return shutdownFunc, clientSet } -func getScheduledPods(clientset clientset.Interface) ([]*v1.Pod, error) { - podList, err := clientset.CoreV1().Pods("").List(metav1.ListOptions{}) +func getScheduledPods(podInformer coreinformers.PodInformer) ([]*v1.Pod, error) { + pods, err := podInformer.Lister().List(labels.Everything()) if err != nil { return nil, err } - allPods := podList.Items - scheduled := make([]*v1.Pod, 0, len(allPods)) - for i := range allPods { - pod := allPods[i] + scheduled := make([]*v1.Pod, 0, len(pods)) + for i := range pods { + pod := pods[i] if len(pod.Spec.NodeName) > 0 { - scheduled = append(scheduled, &pod) + scheduled = append(scheduled, pod) } } return scheduled, nil diff --git a/test/integration/util/BUILD b/test/integration/util/BUILD index a198c395c24..2f3f02634e7 100644 --- a/test/integration/util/BUILD +++ b/test/integration/util/BUILD @@ -17,7 +17,6 @@ go_library( "//pkg/scheduler:go_default_library", "//pkg/scheduler/algorithmprovider/defaults:go_default_library", "//pkg/scheduler/apis/config:go_default_library", - "//pkg/scheduler/factory:go_default_library", "//pkg/scheduler/framework/v1alpha1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", diff --git a/test/integration/util/util.go b/test/integration/util/util.go index 29ba1b9ba4a..3c24e882add 100644 --- a/test/integration/util/util.go +++ b/test/integration/util/util.go @@ -31,7 +31,6 @@ import ( // import DefaultProvider _ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults" schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" - "k8s.io/kubernetes/pkg/scheduler/factory" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" "k8s.io/kubernetes/test/integration/framework" ) @@ -58,9 +57,8 @@ func StartApiserver() (string, ShutdownFunc) { } // StartScheduler configures and starts a scheduler given a handle to the clientSet interface -// and event broadcaster. It returns a handle to the configurator args for the running scheduler -// and the shutdown function to stop it. -func StartScheduler(clientSet clientset.Interface) (*factory.Config, ShutdownFunc) { +// and event broadcaster. It returns the running scheduler and the shutdown function to stop it. +func StartScheduler(clientSet clientset.Interface) (*scheduler.Scheduler, ShutdownFunc) { informerFactory := informers.NewSharedInformerFactory(clientSet, 0) stopCh := make(chan struct{}) evtBroadcaster := events.NewBroadcaster(&events.EventSinkImpl{ @@ -96,7 +94,7 @@ func StartScheduler(clientSet clientset.Interface) (*factory.Config, ShutdownFun close(stopCh) klog.Infof("destroyed scheduler") } - return sched.Config(), shutdownFunc + return sched, shutdownFunc } // createScheduler create a scheduler with given informer factory and default name.