Skip to content

Commit 56e2398

Browse files
authored
feat: migrate podGroup controller to ctrl runtime (#506)
* feat: init ctrl runtime manager and use klogr Signed-off-by: Wei Zhang <[email protected]> * feat: migrate podgroup to ctrl runtime Signed-off-by: Wei Zhang <[email protected]> * feat: drop legacy podGroup controller Signed-off-by: Wei Zhang <[email protected]> * test: add ctrl runtime podGroup controller test Signed-off-by: Wei Zhang <[email protected]> * feat: drop cosheduler dir and fix manager not running Signed-off-by: Wei Zhang <[email protected]> --------- Signed-off-by: Wei Zhang <[email protected]>
1 parent 69a1e31 commit 56e2398

File tree

12 files changed

+1405
-420
lines changed

12 files changed

+1405
-420
lines changed

cmd/controller/app/options.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import (
2323
type ServerRunOptions struct {
2424
KubeConfig string
2525
MasterUrl string
26+
MetricsAddr string
27+
ProbeAddr string
2628
InCluster bool
2729
ApiServerQPS int
2830
ApiServerBurst int
@@ -40,6 +42,8 @@ func (s *ServerRunOptions) addAllFlags() {
4042
pflag.BoolVar(&s.InCluster, "incluster", s.InCluster, "If controller run incluster.")
4143
pflag.StringVar(&s.KubeConfig, "kubeConfig", s.KubeConfig, "Kube Config path if not run in cluster.")
4244
pflag.StringVar(&s.MasterUrl, "masterUrl", s.MasterUrl, "Master Url if not run in cluster.")
45+
pflag.StringVar(&s.MetricsAddr, "metricsAddr", ":8080", "Metrics server bind listen address.")
46+
pflag.StringVar(&s.ProbeAddr, "probeAddr", ":8081", "Probe endpoint bind address.")
4347
pflag.IntVar(&s.ApiServerQPS, "qps", 5, "qps of query apiserver.")
4448
pflag.IntVar(&s.ApiServerBurst, "burst", 10, "burst of query apiserver.")
4549
pflag.IntVar(&s.Workers, "workers", 1, "workers of scheduler-plugin-controllers.")

cmd/controller/app/server.go

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,22 +20,42 @@ import (
2020
"context"
2121
"os"
2222

23+
"k8s.io/apimachinery/pkg/runtime"
24+
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2325
"k8s.io/apimachinery/pkg/util/uuid"
2426
"k8s.io/apiserver/pkg/server"
2527
"k8s.io/client-go/informers"
2628
"k8s.io/client-go/kubernetes"
29+
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
2730
"k8s.io/client-go/rest"
2831
restclient "k8s.io/client-go/rest"
2932
"k8s.io/client-go/tools/clientcmd"
3033
"k8s.io/client-go/tools/leaderelection"
3134
"k8s.io/client-go/tools/leaderelection/resourcelock"
3235
"k8s.io/klog/v2"
36+
"k8s.io/klog/v2/klogr"
3337

38+
ctrl "sigs.k8s.io/controller-runtime"
39+
"sigs.k8s.io/controller-runtime/pkg/healthz"
40+
41+
schedulingv1a1 "sigs.k8s.io/scheduler-plugins/apis/scheduling/v1alpha1"
3442
"sigs.k8s.io/scheduler-plugins/pkg/controller"
43+
"sigs.k8s.io/scheduler-plugins/pkg/controllers"
3544
schedclientset "sigs.k8s.io/scheduler-plugins/pkg/generated/clientset/versioned"
3645
schedformers "sigs.k8s.io/scheduler-plugins/pkg/generated/informers/externalversions"
3746
)
3847

48+
var (
49+
scheme = runtime.NewScheme()
50+
setupLog = ctrl.Log.WithName("setup")
51+
)
52+
53+
func init() {
54+
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
55+
56+
utilruntime.Must(schedulingv1a1.AddToScheme(scheme))
57+
}
58+
3959
func newConfig(kubeconfig, master string, inCluster bool) (*restclient.Config, error) {
4060
var (
4161
config *rest.Config
@@ -66,17 +86,53 @@ func Run(s *ServerRunOptions) error {
6686
kubeClient := kubernetes.NewForConfigOrDie(config)
6787

6888
schedInformerFactory := schedformers.NewSharedInformerFactory(schedClient, 0)
69-
pgInformer := schedInformerFactory.Scheduling().V1alpha1().PodGroups()
7089
eqInformer := schedInformerFactory.Scheduling().V1alpha1().ElasticQuotas()
7190

7291
coreInformerFactory := informers.NewSharedInformerFactory(kubeClient, 0)
7392
podInformer := coreInformerFactory.Core().V1().Pods()
74-
pgCtrl := controller.NewPodGroupController(kubeClient, pgInformer, podInformer, schedClient)
7593
eqCtrl := controller.NewElasticQuotaController(kubeClient, eqInformer, podInformer, schedClient)
7694

95+
// Controller Runtime Controllers
96+
ctrl.SetLogger(klogr.New())
97+
mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{
98+
Scheme: scheme,
99+
MetricsBindAddress: s.MetricsAddr,
100+
Port: 9443,
101+
HealthProbeBindAddress: s.ProbeAddr,
102+
LeaderElection: s.EnableLeaderElection,
103+
LeaderElectionID: "sched-plugins-controllers",
104+
LeaderElectionNamespace: "kube-system",
105+
})
106+
if err != nil {
107+
setupLog.Error(err, "unable to start manager")
108+
return err
109+
}
110+
111+
if err = (&controllers.PodGroupReconciler{
112+
Client: mgr.GetClient(),
113+
Scheme: mgr.GetScheme(),
114+
}).SetupWithManager(mgr); err != nil {
115+
setupLog.Error(err, "unable to create controller", "controller", "PodGroup")
116+
return err
117+
}
118+
119+
if err := mgr.AddHealthzCheck("healthz", healthz.Ping); err != nil {
120+
setupLog.Error(err, "unable to set up health check")
121+
return err
122+
}
123+
if err := mgr.AddReadyzCheck("readyz", healthz.Ping); err != nil {
124+
setupLog.Error(err, "unable to set up ready check")
125+
return err
126+
}
127+
77128
run := func(ctx context.Context) {
78-
go pgCtrl.Run(s.Workers, ctx.Done())
79129
go eqCtrl.Run(s.Workers, ctx.Done())
130+
setupLog.Info("starting manager")
131+
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
132+
setupLog.Error(err, "unable to start manager")
133+
panic(err)
134+
}
135+
80136
select {}
81137
}
82138
schedInformerFactory.Start(stopCh)

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ require (
66
github.com/diktyo-io/appgroup-api v0.0.9-alpha
77
github.com/diktyo-io/networktopology-api v0.0.8-alpha
88
github.com/dustin/go-humanize v1.0.0
9+
github.com/go-logr/logr v1.2.3
910
github.com/google/go-cmp v0.5.8
1011
github.com/k8stopologyawareschedwg/noderesourcetopology-api v0.0.13
1112
github.com/k8stopologyawareschedwg/podfingerprint v0.1.1
@@ -48,7 +49,6 @@ require (
4849
github.com/felixge/httpsnoop v1.0.1 // indirect
4950
github.com/francoispqt/gojay v1.2.13 // indirect
5051
github.com/fsnotify/fsnotify v1.5.1 // indirect
51-
github.com/go-logr/logr v1.2.3 // indirect
5252
github.com/go-openapi/jsonpointer v0.19.5 // indirect
5353
github.com/go-openapi/jsonreference v0.19.5 // indirect
5454
github.com/go-openapi/swag v0.19.14 // indirect

0 commit comments

Comments
 (0)