Skip to content

Commit a1ce616

Browse files
committed
wait for containerd to be ready
1 parent b594068 commit a1ce616

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

pkg/build/nodeimage/buildcontext.go

+5
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,11 @@ func (c *buildContext) prePullImagesAndWriteManifests(bits kube.Bits, parsedVers
284284
})
285285
}
286286
}
287+
// Wait for containerd socket to be ready, which may take 1s when running under emulation
288+
if err := importer.WaitForReady(); err != nil {
289+
c.logger.Errorf("Image build failed, containerd did not become ready %v", err)
290+
return nil, err
291+
}
287292
if err := errors.AggregateConcurrent(fns); err != nil {
288293
return nil, err
289294
}

pkg/build/nodeimage/imageimporter.go

+21-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package nodeimage
1919
import (
2020
"io"
2121

22+
"sigs.k8s.io/kind/pkg/errors"
2223
"sigs.k8s.io/kind/pkg/exec"
2324
)
2425

@@ -38,7 +39,26 @@ func (c *containerdImporter) Prepare() error {
3839
).Run(); err != nil {
3940
return err
4041
}
41-
// TODO(bentheelder): some healthcheck?
42+
return nil
43+
}
44+
45+
func (c *containerdImporter) WaitForReady() error {
46+
// ctr doesn't respect timeouts when the socket doesn't exist
47+
// so we'll look for the socket to exist ourselves, THEN attempt ctr info
48+
// TODO: we are assuming the socket path, and this is kind of hacky
49+
if err := c.containerCmder.Command(
50+
"bash", "-c", `set -e
51+
for i in {0..5}; do
52+
if [ -S /run/containerd/containerd.sock ]; then
53+
break
54+
fi
55+
sleep $((0.1 * i))
56+
done
57+
ctr info
58+
`,
59+
).Run(); err != nil {
60+
return errors.Wrap(err, "failed to wait for containerd to become ready")
61+
}
4262
return nil
4363
}
4464

0 commit comments

Comments
 (0)