@@ -33,18 +33,23 @@ import (
3333 "sigs.k8s.io/controller-runtime/pkg/log/zap"
3434 "sigs.k8s.io/controller-runtime/pkg/manager"
3535 "sigs.k8s.io/controller-runtime/pkg/manager/signals"
36+ "sigs.k8s.io/controller-runtime/pkg/webhook"
3637
3738 configv1beta1 "github.com/kubeflow/katib/pkg/apis/config/v1beta1"
3839 apis "github.com/kubeflow/katib/pkg/apis/controller"
40+ cert "github.com/kubeflow/katib/pkg/cert-generator/v1beta1"
3941 "github.com/kubeflow/katib/pkg/controller.v1beta1"
4042 "github.com/kubeflow/katib/pkg/controller.v1beta1/consts"
4143 "github.com/kubeflow/katib/pkg/util/v1beta1/katibconfig"
42- webhook "github.com/kubeflow/katib/pkg/webhook/v1beta1"
44+ webhookv1beta1 "github.com/kubeflow/katib/pkg/webhook/v1beta1"
4345 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
4446 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
4547)
4648
47- var scheme = runtime .NewScheme ()
49+ var (
50+ scheme = runtime .NewScheme ()
51+ log = logf .Log .WithName ("entrypoint" )
52+ )
4853
4954func init () {
5055 utilruntime .Must (apis .AddToScheme (scheme ))
@@ -54,15 +59,12 @@ func init() {
5459
5560func main () {
5661 logf .SetLogger (zap .New ())
57- log := logf .Log .WithName ("entrypoint" )
5862
5963 var katibConfigFile string
6064 flag .StringVar (& katibConfigFile , "katib-config" , "" ,
6165 "The katib-controller will load its initial configuration from this file. " +
6266 "Omit this flag to use the default configuration values. " )
6367
64- // TODO (andreyvelich): Currently it is not possible to set different webhook service name.
65- // flag.StringVar(&serviceName, "webhook-service-name", "katib-controller", "The service name which will be used in webhook")
6668 // TODO (andreyvelich): Currently is is not possible to store webhook cert in the local file system.
6769 // flag.BoolVar(&certLocalFS, "cert-localfs", false, "Store the webhook cert in local file system")
6870
@@ -127,36 +129,61 @@ func main() {
127129 os .Exit (1 )
128130 }
129131
130- log .Info ("Registering Components." )
132+ // Create a webhook server.
133+ hookServer := webhook .NewServer (webhook.Options {
134+ Port : * initConfig .ControllerConfig .WebhookPort ,
135+ CertDir : consts .CertDir ,
136+ })
131137
132- // Setup all Controllers
133- log .Info ("Setting up controller." )
134- if err := controller .AddToManager (mgr ); err != nil {
135- log .Error (err , "Unable to register controllers to the manager" )
136- os .Exit (1 )
137- }
138+ ctx := signals .SetupSignalHandler ()
139+ certsReady := make (chan struct {})
138140
139- log .Info ("Setting up webhooks." )
140- if err := webhook .AddToManager (mgr , * initConfig .ControllerConfig .WebhookPort ); err != nil {
141- log .Error (err , "Unable to register webhooks to the manager" )
142- os .Exit (1 )
141+ if initConfig .CertGeneratorConfig .Enable {
142+ if err = cert .AddToManager (mgr , initConfig .CertGeneratorConfig , certsReady ); err != nil {
143+ log .Error (err , "Failed to set up cert-generator" )
144+ }
145+ } else {
146+ close (certsReady )
143147 }
144148
149+ // The setupControllers will register controllers to the manager
150+ // after generated certs for the admission webhooks.
151+ go setupControllers (mgr , certsReady , hookServer )
152+
145153 log .Info ("Setting up health checker." )
146- if err := mgr .AddHealthzCheck ("healthz" , healthz .Ping ); err != nil {
147- log .Error (err , "Unable to add healthz endpoint to the manager" )
148- os .Exit (1 )
149- }
150154 // TODO (@anencore94) need to more detailed check whether is it possible to communicate with k8s-apiserver or db-manager at '/readyz' ?
151155 if err := mgr .AddReadyzCheck ("readyz" , healthz .Ping ); err != nil {
152156 log .Error (err , "Unable to add readyz endpoint to the manager" )
153157 os .Exit (1 )
154158 }
159+ if err = mgr .AddHealthzCheck ("healthz" , hookServer .StartedChecker ()); err != nil {
160+ log .Error (err , "Add webhook server health checker to the manager failed" )
161+ os .Exit (1 )
162+ }
155163
156164 // Start the Cmd
157- log .Info ("Starting the Cmd ." )
158- if err : = mgr .Start (signals . SetupSignalHandler () ); err != nil {
165+ log .Info ("Starting the manager ." )
166+ if err = mgr .Start (ctx ); err != nil {
159167 log .Error (err , "Unable to run the manager" )
160168 os .Exit (1 )
161169 }
162170}
171+
172+ func setupControllers (mgr manager.Manager , certsReady chan struct {}, hookServer webhook.Server ) {
173+ // The certsReady blocks to register controllers until generated certs.
174+ <- certsReady
175+ log .Info ("Certs ready" )
176+
177+ // Setup all Controllers
178+ log .Info ("Setting up controller." )
179+ if err := controller .AddToManager (mgr ); err != nil {
180+ log .Error (err , "Unable to register controllers to the manager" )
181+ os .Exit (1 )
182+ }
183+
184+ log .Info ("Setting up webhooks." )
185+ if err := webhookv1beta1 .AddToManager (mgr , hookServer ); err != nil {
186+ log .Error (err , "Unable to register webhooks to the manager" )
187+ os .Exit (1 )
188+ }
189+ }
0 commit comments