@@ -33,18 +33,23 @@ import (
33
33
"sigs.k8s.io/controller-runtime/pkg/log/zap"
34
34
"sigs.k8s.io/controller-runtime/pkg/manager"
35
35
"sigs.k8s.io/controller-runtime/pkg/manager/signals"
36
+ "sigs.k8s.io/controller-runtime/pkg/webhook"
36
37
37
38
configv1beta1 "github.com/kubeflow/katib/pkg/apis/config/v1beta1"
38
39
apis "github.com/kubeflow/katib/pkg/apis/controller"
40
+ cert "github.com/kubeflow/katib/pkg/cert-generator/v1beta1"
39
41
"github.com/kubeflow/katib/pkg/controller.v1beta1"
40
42
"github.com/kubeflow/katib/pkg/controller.v1beta1/consts"
41
43
"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"
43
45
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
44
46
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
45
47
)
46
48
47
- var scheme = runtime .NewScheme ()
49
+ var (
50
+ scheme = runtime .NewScheme ()
51
+ log = logf .Log .WithName ("entrypoint" )
52
+ )
48
53
49
54
func init () {
50
55
utilruntime .Must (apis .AddToScheme (scheme ))
@@ -54,15 +59,12 @@ func init() {
54
59
55
60
func main () {
56
61
logf .SetLogger (zap .New ())
57
- log := logf .Log .WithName ("entrypoint" )
58
62
59
63
var katibConfigFile string
60
64
flag .StringVar (& katibConfigFile , "katib-config" , "" ,
61
65
"The katib-controller will load its initial configuration from this file. " +
62
66
"Omit this flag to use the default configuration values. " )
63
67
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")
66
68
// TODO (andreyvelich): Currently is is not possible to store webhook cert in the local file system.
67
69
// flag.BoolVar(&certLocalFS, "cert-localfs", false, "Store the webhook cert in local file system")
68
70
@@ -127,36 +129,61 @@ func main() {
127
129
os .Exit (1 )
128
130
}
129
131
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
+ })
131
137
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 {})
138
140
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 )
143
147
}
144
148
149
+ // The setupControllers will register controllers to the manager
150
+ // after generated certs for the admission webhooks.
151
+ go setupControllers (mgr , certsReady , hookServer )
152
+
145
153
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
- }
150
154
// TODO (@anencore94) need to more detailed check whether is it possible to communicate with k8s-apiserver or db-manager at '/readyz' ?
151
155
if err := mgr .AddReadyzCheck ("readyz" , healthz .Ping ); err != nil {
152
156
log .Error (err , "Unable to add readyz endpoint to the manager" )
153
157
os .Exit (1 )
154
158
}
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
+ }
155
163
156
164
// 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 {
159
167
log .Error (err , "Unable to run the manager" )
160
168
os .Exit (1 )
161
169
}
162
170
}
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