容器运行时 containerd

containerd 简介

containerd 是一个工业级、开放标准的容器运行时(Container Runtime),现已成为 Kubernetes 默认支持的核心组件之一。containerd 是一个守护进程(daemon),负责管理容器的完整生命周期。核心特性:

  • 符合 OCI(Open Container Initiative)标准
  • 支持 CRI(Container Runtime Interface),可直接被 Kubernetes 使用
  • 轻量、稳定、高可用,专为生产环境设计
  • 不包含高层功能(如构建镜像、Dockerfile 支持),只专注”运行容器”
+---------------------+
|     Kubernetes      |
|    (via CRI)        |
+----------+----------+
           |
+----------v----------+     +------------------+
|     containerd      |<--->| containerd-shim  |
+----------+----------+     +------------------+
           |
+----------v----------+
|       runc          | ← OCI runtime(实际创建容器)
+---------------------+
组件作用
containerd主守护进程,提供 gRPC API,管理镜像、容器、任务
containerd-shim每个容器对应一个 shim 进程,使 containerd 崩溃时容器仍运行
runcOCI 兼容的底层运行时,负责 unshare、mount、exec 等系统调用
CRI Plugin内置于 containerd,实现 Kubernetes CRI 接口(无需额外组件)

在生态中的位置:

containerd

containerd 安装

安装可参考文档 Getting started with containerd。也可以直接安装 docker,docker 会安装 containerd。安装 containerd 过程中会安装 runc。

sudo apt update
sudo apt install -y containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml
# 确保 SystemdCgroup = true(对 Kubernetes 很重要)
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
sudo systemctl restart containerd

安装后,可通过命令行 ctr 查看版本号:

root@node2:~# ctr --version
ctr github.com/containerd/containerd 1.7.28

containerd 的命令行工具:

名称社区API用途网站
ctrcontainerdNative仅用于调试(无,参见 ctr --help 了解用法)
nerdctlcontainerd(非核心)Native通用https://github.com/containerd/nerdctl
crictlKubernetes SIG-nodeCRI仅用于调试https://github.com/kubernetes-sigs/cri-tools/blob/master/docs/crictl.md

containerd 的配置文件:/etc/containerd/config.toml。可通过 containerd config default > /etc/containerd/config.toml 命令生成默认配置文件。