forked from kubernetes-sigs/kube-scheduler-simulator
-
Notifications
You must be signed in to change notification settings - Fork 0
/
simulator.go
74 lines (60 loc) · 1.92 KB
/
simulator.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package main
import (
"os"
"os/signal"
"syscall"
"golang.org/x/xerrors"
clientset "k8s.io/client-go/kubernetes"
"k8s.io/klog/v2"
"github.com/kubernetes-sigs/kube-scheduler-simulator/config"
"github.com/kubernetes-sigs/kube-scheduler-simulator/k8sapiserver"
"github.com/kubernetes-sigs/kube-scheduler-simulator/pvcontroller"
"github.com/kubernetes-sigs/kube-scheduler-simulator/scheduler/defaultconfig"
"github.com/kubernetes-sigs/kube-scheduler-simulator/server"
"github.com/kubernetes-sigs/kube-scheduler-simulator/server/di"
)
// entry point.
func main() {
if err := startSimulator(); err != nil {
klog.Fatalf("failed with error on running simulator: %+v", err)
}
}
// startSimulator starts simulator and needed k8s components.
func startSimulator() error {
cfg, err := config.NewConfig()
if err != nil {
return xerrors.Errorf("get config: %w", err)
}
restclientCfg, apiShutdown, err := k8sapiserver.StartAPIServer(cfg.EtcdURL)
if err != nil {
return xerrors.Errorf("start API server: %w", err)
}
defer apiShutdown()
client := clientset.NewForConfigOrDie(restclientCfg)
pvshutdown, err := pvcontroller.StartPersistentVolumeController(client)
if err != nil {
return xerrors.Errorf("start pv controller: %w", err)
}
defer pvshutdown()
dic := di.NewDIContainer(client, restclientCfg)
sc, err := defaultconfig.DefaultSchedulerConfig()
if err != nil {
return xerrors.Errorf("create scheduler config")
}
if err := dic.SchedulerService().StartScheduler(sc); err != nil {
return xerrors.Errorf("start scheduler: %w", err)
}
defer dic.SchedulerService().ShutdownScheduler()
// start simulator server
s := server.NewSimulatorServer(cfg, dic)
shutdownFn3, err := s.Start(cfg.Port)
if err != nil {
return xerrors.Errorf("start simulator server: %w", err)
}
defer shutdownFn3()
// wait the signal
quit := make(chan os.Signal, 1)
signal.Notify(quit, syscall.SIGTERM, os.Interrupt)
<-quit
return nil
}