containerd2.1介绍
更新时间:2025-11-21
容器引擎CCE 1.31和1.32 版本默认使用containerd 2.1。containerd 2.1在镜像安全、性能、稳定性方面均有所提升。本文介绍containerd 2.1的主要变更说明,包括功能特性变更、废弃功能、废弃API等。
功能特性
下文仅介绍主要功能特性,详细信息请参见Containerd版本发布说明。
- 支持NRI (Node Resource Interface) 能力,已在containerd配置中默认启用。
- 支持CDI (Container Device Interface) 能力,已在containerd配置中默认启用。
- 支持Sandbox API。
废弃功能和API
下文仅介绍主要功能特性,详细信息请参见Containerd版本发布说明。
- 废弃配置 registry.auths、registry.configs、registry.mirrors。
- 不再支持Docker Schema 1镜像,例如
application/vnd.docker.distribution.manifest.v1+json或application/vnd.docker.distribution.manifest.v1+prettyjws,拉取时会被拒绝。请参见下方识别Docker Schema 1镜像进行识别。 io_uring_*从containerd的默认Seccomp配置文件中移除。容器默认没有权限进行io_uring_*系统调用。- 移除CRI v1alpha2 API。Kubernetes自1.26起开始弃用该API,containerd 2.1随之同步移除。
- 移除AUFS snapshotter。
- 移除
[plugins."io.containerd.internal.v1".tracing]配置项。
升级注意事项
- containerd 2.1不再支持CRI v1alpha2 API。如依赖该版本API,需切换至CRI v1版本API以确保兼容性。
- 建议在升级前参见下方识别废弃 API进行自检。
- 升级过程中,系统会进行废弃 API 检测,若检测到使用弃用 API,升级过程将中断。
识别废弃API
使用 kubectl
参见以下代码,检查集群下是否有Pod挂载了containerd 相关目录。
需提前安装kubectl和jq命令行工具。jq可通过yum install jq命令安装。
Plain Text
1kubectl get pods --all-namespaces -o json |
2jq -r '.items[] |
3 select(.spec.volumes[]?.hostPath.path as $p |
4 ["/", "/var", "/var/","/var/run", "/var/run/",
5 "/var/run/containerd", "/var/run/containerd/",
6 "/var/run/containerd/containerd.sock",
7 "/run", "/run/", "/run/containerd", "/run/containerd/",
8 "/run/containerd/containerd.sock"] | index($p)) |
9 .metadata.namespace + "/" + .metadata.name'
使用ctr
若当前 containerd 实例中存在已弃用的 API,执行ctr deprecations list命令将列出所有废弃API。
Plain Text
1ctr deprecations list
识别Docker Schema 1镜像
Plain Text
1ctr --namespace k8s.io images list 'labels."io.containerd.image/converted-docker-schema1"'
FAQ
升级过程中,业务是否会受影响?
请参见升级节点组完成containerd版本的升级。通过此方式升级时,默认采取原地升级,容器不会重启,业务可正常运行。
从containerd 1.6升级至containerd 2.1后还支持回退吗?
不支持回退。containerd 2.1 版本引入了 shim-v3 API,不支持回退至 containerd 1.6 的 shim-v2 API。
将containerd 1.6升级至containerd 2.1的过程中,节点数据会丢失吗?
参见升级节点组升级containerd时默认采取原地升级,需要进行节点排水,containerd 2.1 仍旧使用原数据目录,不会丢失。
