更新时间:2026-05-20 GMT+08:00
分享

containerd 2.2版本说明

CCE v1.35版本集群默认将容器运行时升级为containerd 2.2。相比于1.x版本,containerd 2.2在镜像安全、运行时性能、以及多沙箱(Sandbox)支持等方面均有显著提升。

本文重点介绍containerd 2.2的核心变更说明(包括新特性与废弃功能),以及升级过程中的注意事项和自检指南。

功能特性与核心变更

以下仅介绍主要功能特性,详细信息请参见containerd发布记录

新增与增强特性

containerd特性:

  • 默认启用NRI(Node Resource Interface):允许外部插件介入容器生命周期,实现更精细的节点资源管理和分配。
  • 默认启用CDI(Container Device Interface):标准化了复杂设备(如GPU、FPGA等)注入容器的方式。
  • 支持Sandbox API:原生支持PodSandbox机制,对运行多种隔离级别的容器(如结合Kata Containers或其他轻量级安全沙箱)提供了更好的底层架构支持。

Kubernetes上游关联特性:

  • 支持用户命名空间(User Namespaces):通过底层的隔离技术,允许Pod内的root用户映射为主机上的非特权用户。这大幅提升了容器的安全隔离性,同时Kubernetes会相应地放宽对此类Pod的安全标准限制(如runAsNonRoot检查)(注意该特性还依赖linux 6.3+内核,请确认内核支持情况,推荐使用HCE 3.0上使用)。
  • 支持容器镜像卷(Image Volumes):支持将OCI镜像的内容直接作为数据卷(Volume)挂载到Pod内部。借助containerd的支持,您可以复用镜像仓库的分发能力来下发静态配置、模型文件或构建产物,而无需将其作为独立容器运行(注:自K8s 1.33起进一步支持subPath挂载)。

废弃功能与API移除

  • 移除CRI v1alpha2 API:Kubernetes自1.26起弃用该API,containerd 2.x系列已彻底移除。如果您有自定义组件依赖此API,必须切换至CRI v1。
  • 不再支持Docker Schema 1镜像:拉取如application/vnd.docker.distribution.manifest.v1+json格式的旧版镜像将被拒绝。
  • Seccomp策略收紧:io_uring_*系统调用已从默认的Seccomp配置文件中移除。默认情况下,容器内不再允许发起io_uring相关的系统调用。
  • 移除AUFS snapshotter:彻底移除对AUFS存储驱动的支持。
  • 废弃部分配置项:移除了registry.auths、registry.configs、registry.mirrors以及[plugins."io.containerd.internal.v1".tracing]等配置。建议通过控制台节点池自定义containerd参数来实现同等功能。

升级前自检(重要)

升级至containerd 2.2之前,系统会进行废弃API和不兼容项的检测。若检测到相关阻碍,升级将被中断。建议您在触发集群升级前,手动完成以下自检。

检查是否直接挂载了containerd目录

如果业务Pod直接挂载了containerd的socket或相关运行目录,可能会受到影响。您可以使用以下命令检查当前集群(需提前安装jq工具,可通过yum install jq命令安装):

kubectl get pods --all-namespaces -o json | \
jq -r '.items[] |
  select(.spec.volumes[]?.hostPath.path as $p |
    ["/", "/var", "/var/","/var/run", "/var/run/",
     "/var/run/containerd", "/var/run/containerd/",
     "/var/run/containerd/containerd.sock",
     "/run", "/run/", "/run/containerd", "/run/containerd/",
     "/run/containerd/containerd.sock"] | index($p)) |
  .metadata.namespace + "/" + .metadata.name'

识别当前节点废弃的API调用

登录到具体节点,使用ctr命令行工具查看当前是否有正在被调用的废弃API:

ctr deprecations list

检查是否存在Docker Schema 1镜像

同样在节点层执行以下命令,排查本地缓存中是否仍有Schema 1格式的镜像:

ctr --namespace k8s.io images list 'labels."io.containerd.image/converted-docker-schema1"'

升级方式

请将集群升级至1.35或以上版本,升级过程中会自动将containerd版本升级至2.2。操作详情请参见集群升级

常见问题

  • 升级containerd版本,业务是否会受影响?

    升级过程中默认采取原地升级策略。升级期间容器不会重启,正在运行的业务可保持正常提供服务。

  • 从containerd 1.7升级至2.2后,如果遇到问题可以回退吗?

    不支持回退。containerd 2.x系列全面引入了Shim v3 API,底层架构与1.x时代的Shim v2存在不兼容性。一旦升级完成,无法原地降级回老版本。

  • 升级过程中,节点上的容器数据(如镜像、容器日志)会丢失吗?

    不会。原地升级时,containerd 2.2将继续复用原有的数据目录(Data Root和State Root),现有数据不会丢失。

相关文档