@@ -32,18 +32,23 @@ import (
32
32
"sigs.k8s.io/controller-runtime/pkg/log/zap"
33
33
"sigs.k8s.io/controller-runtime/pkg/manager"
34
34
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
35
+ "sigs.k8s.io/controller-runtime/pkg/webhook"
35
36
36
37
configv1beta1 "github.com/kubeflow/katib/pkg/apis/config/v1beta1"
37
38
apis "github.com/kubeflow/katib/pkg/apis/controller"
39
+ cert "github.com/kubeflow/katib/pkg/cert-generator/v1beta1"
38
40
"github.com/kubeflow/katib/pkg/controller.v1beta1"
39
41
"github.com/kubeflow/katib/pkg/controller.v1beta1/consts"
40
42
"github.com/kubeflow/katib/pkg/util/v1beta1/katibconfig"
41
- webhook "github.com/kubeflow/katib/pkg/webhook/v1beta1"
43
+ webhookv1beta1 "github.com/kubeflow/katib/pkg/webhook/v1beta1"
42
44
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
43
45
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
44
46
)
45
47
46
- var scheme = runtime .NewScheme ()
48
+ var (
49
+ scheme = runtime .NewScheme ()
50
+ log = logf .Log .WithName ("entrypoint" )
51
+ )
47
52
48
53
func init () {
49
54
utilruntime .Must (apis .AddToScheme (scheme ))
@@ -53,15 +58,12 @@ func init() {
53
58
54
59
func main () {
55
60
logf .SetLogger (zap .New ())
56
- log := logf .Log .WithName ("entrypoint" )
57
61
58
62
var katibConfigFile string
59
63
flag .StringVar (& katibConfigFile , "katib-config" , "" ,
60
64
"The katib-controller will load its initial configuration from this file. " +
61
65
"Omit this flag to use the default configuration values. " )
62
66
63
- // TODO (andreyvelich): Currently it is not possible to set different webhook service name.
64
- // flag.StringVar(&serviceName, "webhook-service-name", "katib-controller", "The service name which will be used in webhook")
65
67
// TODO (andreyvelich): Currently is is not possible to store webhook cert in the local file system.
66
68
// flag.BoolVar(&certLocalFS, "cert-localfs", false, "Store the webhook cert in local file system")
67
69
@@ -122,36 +124,61 @@ func main() {
122
124
os .Exit (1 )
123
125
}
124
126
125
- log .Info ("Registering Components." )
126
-
127
- // Setup all Controllers
128
- log .Info ("Setting up controller." )
129
- if err := controller .AddToManager (mgr ); err != nil {
130
- log .Error (err , "Unable to register controllers to the manager" )
131
- os .Exit (1 )
127
+ // Create a webhook server.
128
+ hookServer := & webhook.Server {
129
+ Port : * initConfig .ControllerConfig .WebhookPort ,
130
+ CertDir : consts .CertDir ,
132
131
}
133
132
134
- log .Info ("Setting up webhooks." )
135
- if err := webhook .AddToManager (mgr , * initConfig .ControllerConfig .WebhookPort ); err != nil {
136
- log .Error (err , "Unable to register webhooks to the manager" )
137
- os .Exit (1 )
133
+ ctx := signals .SetupSignalHandler ()
134
+ certsReady := make (chan struct {})
135
+
136
+ if initConfig .CertGeneratorConfig .Enable {
137
+ if err = cert .AddToManager (mgr , initConfig .CertGeneratorConfig , certsReady ); err != nil {
138
+ log .Error (err , "Failed to set up cert-generator" )
139
+ }
140
+ } else {
141
+ close (certsReady )
138
142
}
139
143
144
+ // The setupControllers will register controllers to the manager
145
+ // after generated certs for the admission webhooks.
146
+ go setupControllers (mgr , certsReady , hookServer )
147
+
140
148
log .Info ("Setting up health checker." )
141
- if err := mgr .AddHealthzCheck ("healthz" , healthz .Ping ); err != nil {
142
- log .Error (err , "Unable to add healthz endpoint to the manager" )
143
- os .Exit (1 )
144
- }
145
149
// TODO (@anencore94) need to more detailed check whether is it possible to communicate with k8s-apiserver or db-manager at '/readyz' ?
146
150
if err := mgr .AddReadyzCheck ("readyz" , healthz .Ping ); err != nil {
147
151
log .Error (err , "Unable to add readyz endpoint to the manager" )
148
152
os .Exit (1 )
149
153
}
154
+ if err = mgr .AddHealthzCheck ("healthz" , hookServer .StartedChecker ()); err != nil {
155
+ log .Error (err , "Add webhook server health checker to the manager failed" )
156
+ os .Exit (1 )
157
+ }
150
158
151
159
// Start the Cmd
152
- log .Info ("Starting the Cmd ." )
153
- if err : = mgr .Start (signals . SetupSignalHandler () ); err != nil {
160
+ log .Info ("Starting the manager ." )
161
+ if err = mgr .Start (ctx ); err != nil {
154
162
log .Error (err , "Unable to run the manager" )
155
163
os .Exit (1 )
156
164
}
157
165
}
166
+
167
+ func setupControllers (mgr manager.Manager , certsReady chan struct {}, hookServer * webhook.Server ) {
168
+ // The certsReady blocks to register controllers until generated certs.
169
+ <- certsReady
170
+ log .Info ("Certs ready" )
171
+
172
+ // Setup all Controllers
173
+ log .Info ("Setting up controller." )
174
+ if err := controller .AddToManager (mgr ); err != nil {
175
+ log .Error (err , "Unable to register controllers to the manager" )
176
+ os .Exit (1 )
177
+ }
178
+
179
+ log .Info ("Setting up webhooks." )
180
+ if err := webhookv1beta1 .AddToManager (mgr , hookServer ); err != nil {
181
+ log .Error (err , "Unable to register webhooks to the manager" )
182
+ os .Exit (1 )
183
+ }
184
+ }
0 commit comments