Skip to content

Commit

Permalink
update containerd to v2.0.1
Browse files Browse the repository at this point in the history
Fix issue 3768

Signed-off-by: Akihiro Suda <[email protected]>
  • Loading branch information
AkihiroSuda committed Dec 20, 2024
1 parent 1c5a56b commit 560c251
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
2 changes: 1 addition & 1 deletion images/base/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -122,7 +122,7 @@ RUN eval "$(gimme "${GO_VERSION}")" \
# stage for building containerd
FROM go-build AS build-containerd
ARG TARGETARCH GO_VERSION
ARG CONTAINERD_VERSION="v1.7.24"
ARG CONTAINERD_VERSION="v2.0.1"
ARG CONTAINERD_CLONE_URL="https://github.com/containerd/containerd"
# we don't build with optional snapshotters, we never select any of these
# they're not ideal inside kind anyhow, and we save some disk space
Expand Down
24 changes: 21 additions & 3 deletions pkg/cluster/nodeutils/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package nodeutils
import (
"bytes"
"encoding/json"
"fmt"
"io"
"path"
"strings"
Expand Down Expand Up @@ -82,7 +83,9 @@ func LoadImageArchive(n nodes.Node, image io.Reader) error {
if err != nil {
return err
}
cmd := n.Command("ctr", "--namespace=k8s.io", "images", "import", "--all-platforms", "--digests", "--snapshotter="+snapshotter, "-").SetStdin(image)
// --local=true: Disables the Transfer API mode that is enabled by default since containerd v2.0.
// Workaround for `ctr: rpc error: code = InvalidArgument desc = unable to initialize unpacker: no unpack platforms defined: invalid argument`
cmd := n.Command("ctr", "--namespace=k8s.io", "images", "import", "--local=true", "--all-platforms", "--digests", "--snapshotter="+snapshotter, "-").SetStdin(image)
if err := cmd.Run(); err != nil {
return errors.Wrap(err, "failed to load image")
}
Expand All @@ -102,9 +105,24 @@ func parseSnapshotter(config string) (string, error) {
if err != nil {
return "", errors.Wrap(err, "failed to detect containerd snapshotter")
}
snapshotter, ok := parsed.GetPath([]string{"plugins", "io.containerd.grpc.v1.cri", "containerd", "snapshotter"}).(string)
configVersion, ok := parsed.Get("version").(int64)
if !ok {
return "", errors.New("failed to detect containerd snapshotter")
return "", errors.New("failed to detect containerd config version")
}
var snapshotter string
switch configVersion {
case 2: // Introduced in containerd v1.3. Still supported in containerd v2.
snapshotter, ok = parsed.GetPath([]string{"plugins", "io.containerd.grpc.v1.cri", "containerd", "snapshotter"}).(string)
if !ok {
return "", errors.New("failed to detect containerd snapshotter (config version 2)")
}
case 3: // Introduced in containerd v2.0.
snapshotter, ok = parsed.GetPath([]string{"plugins", "io.containerd.cri.v1.images", "snapshotter"}).(string)
if !ok {
return "", errors.New("failed to detect containerd snapshotter (config version 2)")
}
default:
return "", fmt.Errorf("unknown containerd config version: %d (supported versions: 2 and 3)", configVersion)
}
return snapshotter, nil
}
Expand Down

0 comments on commit 560c251

Please sign in to comment.