From 586b0389369de24a41716a54217d716c73c9e461 Mon Sep 17 00:00:00 2001 From: Akihiro Suda Date: Tue, 14 Jan 2025 15:15:55 +0900 Subject: [PATCH] update containerd to v2.0.2 Fix issue 3768 Signed-off-by: Akihiro Suda --- images/base/Dockerfile | 2 +- pkg/cluster/nodeutils/util.go | 20 ++++++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/images/base/Dockerfile b/images/base/Dockerfile index 31a73078..5efe1d73 100644 --- a/images/base/Dockerfile +++ b/images/base/Dockerfile @@ -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.2" 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 diff --git a/pkg/cluster/nodeutils/util.go b/pkg/cluster/nodeutils/util.go index 501681a2..a4ad43ef 100644 --- a/pkg/cluster/nodeutils/util.go +++ b/pkg/cluster/nodeutils/util.go @@ -19,6 +19,7 @@ package nodeutils import ( "bytes" "encoding/json" + "fmt" "io" "path" "strings" @@ -102,9 +103,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 3)") + } + default: + return "", fmt.Errorf("unknown containerd config version: %d (supported versions: 2 and 3)", configVersion) } return snapshotter, nil }