ACK 1.33 版本默认使用containerd 2.1。containerd 2.1在镜像安全、性能、稳定性方面均有所提升。本文介绍containerd 2.1的主要变更说明,包括功能特性变更、废弃功能、废弃API等。
功能特性
下文仅介绍主要功能特性,详细信息请参见containerd发布记录。
支持NRI (Node Resource Interface) 能力,已在containerd配置中默认启用。
支持CDI (Container Device Interface) 能力,已在containerd配置中默认启用。
支持Sandbox API。
废弃功能和API
下文仅介绍主要废弃功能和API,详细信息请参见containerd发布记录
废弃配置 registry.auths、registry.configs、registry.mirrors。建议参见自定义节点池containerd配置,通过控制台自定义containerd参数。
不再支持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
命令安装。
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'
使用ctr
若当前 containerd 实例中存在已弃用的 API,执行ctr deprecations list
命令将列出所有废弃API。
ctr deprecations list
识别Docker Schema 1镜像
ctr --namespace k8s.io images list 'labels."io.containerd.image/converted-docker-schema1"'
升级方式
升级至 containerd 2.1 前,请先参见手动升级集群将集群控制面版本升级至1.33及以上版本,然后参见升级节点池升级容器运行时版本。
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 仍旧使用原数据目录,不会丢失。