mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-22 19:31:44 +00:00
feat: remove factory.Config from mustSetupScheduler
This commit is contained in:
parent
6d77624bc3
commit
6cfec4d919
@ -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",
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
|
@ -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",
|
||||||
|
@ -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.
|
||||||
|
Loading…
Reference in New Issue
Block a user