feat: remove factory.Config from mustSetupScheduler

This commit is contained in:
draveness 2019-08-13 22:21:49 +08:00
parent 6d77624bc3
commit 6cfec4d919
6 changed files with 33 additions and 27 deletions

View File

@ -14,10 +14,10 @@ go_library(
], ],
importpath = "k8s.io/kubernetes/test/integration/scheduler_perf", importpath = "k8s.io/kubernetes/test/integration/scheduler_perf",
deps = [ deps = [
"//pkg/scheduler/factory:go_default_library",
"//staging/src/k8s.io/api/core/v1: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/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/kubernetes:go_default_library",
"//staging/src/k8s.io/client-go/rest:go_default_library", "//staging/src/k8s.io/client-go/rest:go_default_library",
"//test/integration/util:go_default_library", "//test/integration/util:go_default_library",
@ -36,12 +36,14 @@ go_test(
tags = ["integration"], tags = ["integration"],
deps = [ deps = [
"//pkg/features:go_default_library", "//pkg/features:go_default_library",
"//pkg/scheduler/factory:go_default_library",
"//pkg/volume/util:go_default_library", "//pkg/volume/util:go_default_library",
"//staging/src/k8s.io/api/core/v1: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/api/storage/v1beta1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/api/resource: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/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apiserver/pkg/util/feature: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/client-go/kubernetes:go_default_library",
"//staging/src/k8s.io/component-base/featuregate/testing: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", "//staging/src/k8s.io/csi-translation-lib/plugins:go_default_library",

View File

@ -31,6 +31,7 @@ import (
csilibplugins "k8s.io/csi-translation-lib/plugins" csilibplugins "k8s.io/csi-translation-lib/plugins"
"k8s.io/klog" "k8s.io/klog"
"k8s.io/kubernetes/pkg/features" "k8s.io/kubernetes/pkg/features"
"k8s.io/kubernetes/pkg/scheduler/factory"
"k8s.io/kubernetes/pkg/volume/util" "k8s.io/kubernetes/pkg/volume/util"
"k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/integration/framework"
testutils "k8s.io/kubernetes/test/utils" testutils "k8s.io/kubernetes/test/utils"
@ -358,9 +359,10 @@ func benchmarkScheduling(numNodes, numExistingPods, minPods int,
if b.N < minPods { if b.N < minPods {
b.N = minPods b.N = minPods
} }
_, finalFunc, clientset := mustSetupScheduler() finalFunc, clientset := mustSetupScheduler()
defer finalFunc() defer finalFunc()
podInformer := factory.NewPodInformer(clientset, 0)
nodePreparer := framework.NewIntegrationTestNodePreparer( nodePreparer := framework.NewIntegrationTestNodePreparer(
clientset, clientset,
[]testutils.CountToStrategy{{Count: numNodes, Strategy: nodeStrategy}}, []testutils.CountToStrategy{{Count: numNodes, Strategy: nodeStrategy}},
@ -377,7 +379,7 @@ func benchmarkScheduling(numNodes, numExistingPods, minPods int,
podCreator.CreatePods() podCreator.CreatePods()
for { for {
scheduled, err := getScheduledPods(clientset) scheduled, err := getScheduledPods(podInformer)
if err != nil { if err != nil {
klog.Fatalf("%v", err) klog.Fatalf("%v", err)
} }
@ -394,7 +396,7 @@ func benchmarkScheduling(numNodes, numExistingPods, minPods int,
podCreator.CreatePods() podCreator.CreatePods()
for { for {
// TODO: Setup watch on apiserver and wait until all pods scheduled. // TODO: Setup watch on apiserver and wait until all pods scheduled.
scheduled, err := getScheduledPods(clientset) scheduled, err := getScheduledPods(podInformer)
if err != nil { if err != nil {
klog.Fatalf("%v", err) klog.Fatalf("%v", err)
} }

View File

@ -26,7 +26,9 @@ import (
v1 "k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
coreinformers "k8s.io/client-go/informers/core/v1"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
"k8s.io/kubernetes/pkg/scheduler/factory"
testutils "k8s.io/kubernetes/test/utils" testutils "k8s.io/kubernetes/test/utils"
"k8s.io/klog" "k8s.io/klog"
@ -107,12 +109,13 @@ type testConfig struct {
mutatedNodeTemplate *v1.Node mutatedNodeTemplate *v1.Node
mutatedPodTemplate *v1.Pod mutatedPodTemplate *v1.Pod
clientset clientset.Interface clientset clientset.Interface
podInformer coreinformers.PodInformer
destroyFunc func() destroyFunc func()
} }
// getBaseConfig returns baseConfig after initializing number of nodes and pods. // getBaseConfig returns baseConfig after initializing number of nodes and pods.
func getBaseConfig(nodes int, pods int) *testConfig { func getBaseConfig(nodes int, pods int) *testConfig {
_, destroyFunc, clientset := mustSetupScheduler() destroyFunc, clientset := mustSetupScheduler()
return &testConfig{ return &testConfig{
clientset: clientset, clientset: clientset,
destroyFunc: destroyFunc, destroyFunc: destroyFunc,
@ -133,10 +136,12 @@ func schedulePods(config *testConfig) int32 {
// We are interested in low scheduling rates (i.e. qps=2), // We are interested in low scheduling rates (i.e. qps=2),
minQPS := int32(math.MaxInt32) minQPS := int32(math.MaxInt32)
start := time.Now() start := time.Now()
podInformer := factory.NewPodInformer(config.clientset, 0)
// Bake in time for the first pod scheduling event. // Bake in time for the first pod scheduling event.
for { for {
time.Sleep(50 * time.Millisecond) time.Sleep(50 * time.Millisecond)
scheduled, err := getScheduledPods(config.clientset) scheduled, err := getScheduledPods(podInformer)
if err != nil { if err != nil {
klog.Fatalf("%v", err) 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. // Now that scheduling has started, lets start taking the pulse on how many pods are happening per second.
for { for {
// TODO: Setup watch on apiserver and wait until all pods scheduled. // TODO: Setup watch on apiserver and wait until all pods scheduled.
scheduled, err := getScheduledPods(config.clientset) scheduled, err := getScheduledPods(podInformer)
if err != nil { if err != nil {
klog.Fatalf("%v", err) klog.Fatalf("%v", err)
} }

View File

@ -18,22 +18,22 @@ package benchmark
import ( import (
v1 "k8s.io/api/core/v1" 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" "k8s.io/apimachinery/pkg/runtime/schema"
coreinformers "k8s.io/client-go/informers/core/v1"
clientset "k8s.io/client-go/kubernetes" clientset "k8s.io/client-go/kubernetes"
restclient "k8s.io/client-go/rest" restclient "k8s.io/client-go/rest"
"k8s.io/kubernetes/pkg/scheduler/factory"
"k8s.io/kubernetes/test/integration/util" "k8s.io/kubernetes/test/integration/util"
) )
// mustSetupScheduler starts the following components: // mustSetupScheduler starts the following components:
// - k8s api server (a.k.a. master) // - k8s api server (a.k.a. master)
// - scheduler // - 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. // remove resources after finished.
// Notes on rate limiter: // Notes on rate limiter:
// - client rate limit is set to 5000. // - 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() apiURL, apiShutdown := util.StartApiserver()
clientSet := clientset.NewForConfigOrDie(&restclient.Config{ clientSet := clientset.NewForConfigOrDie(&restclient.Config{
Host: apiURL, Host: apiURL,
@ -41,26 +41,26 @@ func mustSetupScheduler() (*factory.Config, util.ShutdownFunc, clientset.Interfa
QPS: 5000.0, QPS: 5000.0,
Burst: 5000, Burst: 5000,
}) })
schedulerConfig, schedulerShutdown := util.StartScheduler(clientSet) _, schedulerShutdown := util.StartScheduler(clientSet)
shutdownFunc := func() { shutdownFunc := func() {
schedulerShutdown() schedulerShutdown()
apiShutdown() apiShutdown()
} }
return schedulerConfig, shutdownFunc, clientSet
return shutdownFunc, clientSet
} }
func getScheduledPods(clientset clientset.Interface) ([]*v1.Pod, error) { func getScheduledPods(podInformer coreinformers.PodInformer) ([]*v1.Pod, error) {
podList, err := clientset.CoreV1().Pods("").List(metav1.ListOptions{}) pods, err := podInformer.Lister().List(labels.Everything())
if err != nil { if err != nil {
return nil, err return nil, err
} }
allPods := podList.Items scheduled := make([]*v1.Pod, 0, len(pods))
scheduled := make([]*v1.Pod, 0, len(allPods)) for i := range pods {
for i := range allPods { pod := pods[i]
pod := allPods[i]
if len(pod.Spec.NodeName) > 0 { if len(pod.Spec.NodeName) > 0 {
scheduled = append(scheduled, &pod) scheduled = append(scheduled, pod)
} }
} }
return scheduled, nil return scheduled, nil

View File

@ -17,7 +17,6 @@ go_library(
"//pkg/scheduler:go_default_library", "//pkg/scheduler:go_default_library",
"//pkg/scheduler/algorithmprovider/defaults:go_default_library", "//pkg/scheduler/algorithmprovider/defaults:go_default_library",
"//pkg/scheduler/apis/config:go_default_library", "//pkg/scheduler/apis/config:go_default_library",
"//pkg/scheduler/factory:go_default_library",
"//pkg/scheduler/framework/v1alpha1:go_default_library", "//pkg/scheduler/framework/v1alpha1:go_default_library",
"//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/api/core/v1:go_default_library",
"//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library",

View File

@ -31,7 +31,6 @@ import (
// import DefaultProvider // import DefaultProvider
_ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults" _ "k8s.io/kubernetes/pkg/scheduler/algorithmprovider/defaults"
schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config" schedulerconfig "k8s.io/kubernetes/pkg/scheduler/apis/config"
"k8s.io/kubernetes/pkg/scheduler/factory"
schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1" schedulerframework "k8s.io/kubernetes/pkg/scheduler/framework/v1alpha1"
"k8s.io/kubernetes/test/integration/framework" "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 // 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 event broadcaster. It returns the running scheduler and the shutdown function to stop it.
// and the shutdown function to stop it. func StartScheduler(clientSet clientset.Interface) (*scheduler.Scheduler, ShutdownFunc) {
func StartScheduler(clientSet clientset.Interface) (*factory.Config, ShutdownFunc) {
informerFactory := informers.NewSharedInformerFactory(clientSet, 0) informerFactory := informers.NewSharedInformerFactory(clientSet, 0)
stopCh := make(chan struct{}) stopCh := make(chan struct{})
evtBroadcaster := events.NewBroadcaster(&events.EventSinkImpl{ evtBroadcaster := events.NewBroadcaster(&events.EventSinkImpl{
@ -96,7 +94,7 @@ func StartScheduler(clientSet clientset.Interface) (*factory.Config, ShutdownFun
close(stopCh) close(stopCh)
klog.Infof("destroyed scheduler") klog.Infof("destroyed scheduler")
} }
return sched.Config(), shutdownFunc return sched, shutdownFunc
} }
// createScheduler create a scheduler with given informer factory and default name. // createScheduler create a scheduler with given informer factory and default name.