containerd2.1介绍

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。Kubernetes1.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 相关目录。

需提前安装kubectljq命令行工具。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 仍旧使用原数据目录,不会丢失。

相关文档