综合 containerd 2.0/2.1 变更清单与升级前检查:NRI、CDI 默认启用,废弃 API 命中会中断升级

2026-09-22 21:04:43

containerd 2.0/2.1 变更清单与升级前检查:NRI、CDI 默认启用,废弃 API 命中会中断升级

参考文档:

containerd 2.0 主要变化

  • Transfer service 稳定:提供在任意源与目标之间传输 artifact 对象的简单接口,API 以二进制流和数据通道为一等公民,减少协议与 API 的频繁更新。
  • Sandbox service 稳定:扩展对 containerd shim 的管理,为 pod、VM 等多容器环境提供更多灵活性。
  • Sandboxed CRI 默认启用:CRI 插件从旧 CRI server 切换到 sandbox controller 实现,以支持 podsandbox。
  • Sandbox 属性可变:sandbox controller 新增 Update API(/containerd.services.sandbox.v1.Controller/Update),可修改已存在 sandbox 的 spec、runtime、extensions、labels。
  • NRI(Node Resource Interface)默认启用。
  • CDI(Container Device Interface)默认启用。
  • 守护进程配置版本 3(version = 3);启动时自动迁移旧配置,建议主动迁移以优化启动时间。
  • Introspection API 新增 PluginInfo
  • 内置 tracing 插件支持 OpenTelemetry 标准环境变量。
  • 镜像拉取支持 Intel ISA-L igzip,作为 pigz 的替代。
  • 新增 image verifier 插件。
  • CRI 支持 user namespaces(把容器内用户 ID 映射到宿主机不同用户 ID,限制容器内 root 权限)、递归只读挂载、默认允许非特权端口与 ICMP。

弃用与移除项:

  • Docker Schema 1 镜像默认禁用。
  • 默认 Seccomp 配置移除 io_uring_*,容器默认没有 io_uring 系统调用权限。
  • 移除 LimitNOFILE 配置。
  • 移除 io.containerd.runtime.v1.linuxio.containerd.runc.v1
  • 移除 containerd.io/restart.logpath 标签。
  • 移除 CRI v1alpha2 API(K8s 自 1.26 起弃用)。
  • 移除 AUFS snapshotter。
  • 移除 cri-containerd-(cni-)-VERSION-OS-ARCH.tar.gz 发布包。
  • containerd client 拆到独立包。
  • CRI registry properties 弃用。
  • Go-plugin 运行时插件、events envelope 弃用。

containerd 2.1

containerd 2.1 被 ACK 1.33 默认使用:

  • 默认启用 NRI 与 CDI;支持 Sandbox API。
  • 废弃配置 registry.authsregistry.configsregistry.mirrors
  • 不再支持 Docker Schema 1 镜像(如 application/vnd.docker.distribution.manifest.v1+json),拉取会被拒绝。
  • io_uring_* 从默认 Seccomp 配置移除;移除 CRI v1alpha2 API、AUFS snapshotter、[plugins."io.containerd.internal.v1".tracing] 配置项。

排查与升级

先确认当前环境是否踩到弃用项:

# 列出已弃用 API
ctr deprecations list

# 识别 Docker Schema 1 镜像
ctr --namespace k8s.io images list 'labels."io.containerd.image/converted-docker-schema1"'

再用 kubectl + jq 检查是否有 Pod 通过 hostPath 挂载了 /var/run/containerdcontainerd.sock 等目录。这类挂载在运行时升级后可能失效。

升级到 2.1 的路径是:先把控制面升到 K8s 1.33 及以上,再升级节点池运行时。升级过程会做废弃 API 检测,命中会中断升级。

不支持回退:2.1 引入 shim-v3 API,无法退回 1.6 的 shim-v2。原地升级默认沿用原数据目录,数据不丢。

复制全文 生成海报 containerd Kubernetes 容器运行时 运维

推荐文章

程序员茄子在线接单