@@ -80,6 +80,7 @@ func (e *Embedded) Kubelet(ctx context.Context, args []string) error {
80
80
command .SetArgs (args )
81
81
82
82
go func () {
83
+ <- e .CRIReadyChan ()
83
84
<- e .APIServerReadyChan ()
84
85
defer func () {
85
86
if err := recover (); err != nil {
@@ -227,7 +228,6 @@ func (*Embedded) CloudControllerManager(ctx context.Context, ccmRBACReady <-chan
227
228
}
228
229
signals .RequestShutdown (nil )
229
230
}()
230
-
231
231
return nil
232
232
}
233
233
@@ -236,19 +236,40 @@ func (e *Embedded) CurrentETCDOptions() (InitialOptions, error) {
236
236
}
237
237
238
238
func (e * Embedded ) Containerd (ctx context.Context , cfg * daemonconfig.Node ) error {
239
- return closeIfNilErr (containerd .Run (ctx , cfg ), e .criReady )
239
+ go func () {
240
+ if err := containerd .Run (ctx , cfg ); err != nil {
241
+ signals .RequestShutdown (pkgerrors .WithMessage (err , "failed to start containerd" ))
242
+ } else {
243
+ close (e .criReady )
244
+ }
245
+ }()
246
+ return nil
240
247
}
241
248
242
249
func (e * Embedded ) Docker (ctx context.Context , cfg * daemonconfig.Node ) error {
243
- return closeIfNilErr (cridockerd .Run (ctx , cfg ), e .criReady )
250
+ go func () {
251
+ if err := cridockerd .Run (ctx , cfg ); err != nil {
252
+ signals .RequestShutdown (pkgerrors .WithMessage (err , "failed to start containerd" ))
253
+ } else {
254
+ close (e .criReady )
255
+ }
256
+ }()
257
+ return nil
244
258
}
245
259
246
260
func (e * Embedded ) CRI (ctx context.Context , cfg * daemonconfig.Node ) error {
247
261
// agentless sets cri socket path to /dev/null to indicate no CRI is needed
248
262
if cfg .ContainerRuntimeEndpoint != "/dev/null" {
249
- return closeIfNilErr (cri .WaitForService (ctx , cfg .ContainerRuntimeEndpoint , "CRI" ), e .criReady )
263
+ go func () {
264
+ if err := cri .WaitForService (ctx , cfg .ContainerRuntimeEndpoint , "CRI" ); err != nil {
265
+ signals .RequestShutdown (pkgerrors .WithMessage (err , "failed to wait for CRI startup" ))
266
+ } else {
267
+ close (e .criReady )
268
+ }
269
+ }()
250
270
}
251
- return closeIfNilErr (nil , e .criReady )
271
+ close (e .criReady )
272
+ return nil
252
273
}
253
274
254
275
func (e * Embedded ) APIServerReadyChan () <- chan struct {} {
@@ -271,10 +292,3 @@ func (e *Embedded) CRIReadyChan() <-chan struct{} {
271
292
}
272
293
return e .criReady
273
294
}
274
-
275
- func closeIfNilErr (err error , ch chan struct {}) error {
276
- if err == nil {
277
- close (ch )
278
- }
279
- return err
280
- }
0 commit comments