一、Containerd 概述
-
什么是 Containerd:
- 是一个开源的容器运行时,提供标准化方式管理容器生命周期。
- 主要特点和功能包括容器生命周期管理、标准化接口、镜像管理、插件体系结构、跨平台支持、与 Kubernetes 集成、安全性和隔离。
- 为容器生态系统发展提供稳定可靠基础,在容器管理和插件支持等方面提供丰富功能。
-
起源与背景:
- 起源于 Docker 项目,Docker 引擎拆分为多个组件,其中关键组件是 Containerd。
- Docker 架构拆分后,Containerd 被定位为核心容器运行时,并贡献给 CNCF。
- 遵循 OCI 规范,可与符合该规范的工具和运行时互操作,可作为独立容器运行时与多种工具集成。
二、Containerd 架构
-
架构概述:
- 采用 C/S 架构,服务端通过 unix domain socket 暴露低层的 gRPC API 接口,客户端通过这些 API 管理节点上的容器。
- 解耦为不同组件,每个组件由多个模块协作完成,以插件形式集成到 Containerd 中。
-
核心组件解析:
-
Storage(存储):
- Content:存储容器镜像的实际数据,包括文件系统层和元数据。
- Snapshot:存储容器的快照数据,允许容器共享相同的文件系统层以提高效率。
- Diff:存储容器文件系统层之间的差异,用于保存变更。
-
Metadata(元数据):
- Images:存储容器镜像的元数据,包括标签、大小、创建时间等,用于管理和操作镜像。
- Containers:存储容器的元数据,包括状态、配置信息、网络设置等,用于管理容器生命周期。
-
Runtime(运行时):
- Tasks:包含容器内的进程组,与 Shim 一起工作维护容器状态。
- Events:记录容器的各种事件,如创建、启动、停止等,用于监控和日志记录。
-
三、安装配置 Containerd
-
安装 Containerd:
- 执行一系列命令准备系统环境,添加软件源信息,然后安装 containerd.io。
-
配置 Containerd:
- 生成配置文件,使用
containerd config default
获取默认配置并写入/etc/containerd/config.toml
。 - 配置镜像加速,在配置文件中添加阿里云的镜像源。
- 启动服务,使用
systemctl
命令启用并启动 containerd。
- 生成配置文件,使用
四、Containerd 基本操作
-
镜像类操作:
- 拉取镜像:使用
ctr images pull
命令下载镜像。 - 查看镜像:使用
ctr images ls
查看本地镜像。 - 检测本地镜像:使用
ctr images check
查看镜像状态,complete
表示完整可用。 - 重新打标签:使用
ctr images tag
命令为镜像重新打标签。 - 删除镜像:使用
ctr images rm
删除镜像。 - 镜像挂载到主机目录:使用
ctr images mount
将镜像挂载到宿主机目录。 - 镜像从主机目录卸载:使用
ctr images unmount
卸载挂载的镜像。 - 镜像导出:使用
ctr images export
将镜像保存成文件,遇到报错可通过删除镜像、重新拉取并导出解决。 - 镜像导入:使用
ctr images import
将文件加载为镜像。
- 拉取镜像:使用
-
容器类操作:
- 创建容器:使用
ctr containers create
基于镜像创建容器。 - 列出容器:使用
ctr containers ls
列出容器。 - 查看容器的详细信息:使用
ctr containers info
查看容器详细信息。 - 删除容器:使用
ctr containers rm
删除容器。
- 创建容器:使用
-
任务类操作:
- 启动容器:使用
ctr task start
启动容器,可使用-d
参数放入后台。 - 查看容器:使用
ctr task ls
查看容器任务状态。 - 进入容器里面:使用
ctr task exec
进入容器,需指定--exec-id
参数且唯一。 - 暂停容器:使用
ctr task pause
暂停容器。 - 恢复容器:使用
ctr task resume
恢复容器。 - 杀死容器:使用
ctr task kill
杀死容器,ctr 没有stop
容器的功能。 - 删除任务:使用
ctr task rm
删除任务,删除任务后仍可利用同名快照启动容器恢复运行。 - 删除容器:使用
ctr container rm
删除容器,删除容器后快照也会删除。 - 获取容器的内存、CPU 和 PID 的限额与使用量:使用
ctr task metrics
获取相关信息。 - 查看容器中所有进程在宿主机中的 PID:使用
ctr task ps
查看容器中进程在宿主机的 PID。
- 启动容器:使用
-
其他操作:
- 插件:
- 插件可扩展 Containerd 功能,包括 Shim、Snapshotter、Task、Image、Content Store 等类型。
- 插件化设计使 Containerd 能适应不同场景,可根据需求定制和扩展。
- 使用
ctr plugins ls
列出当前所有插件。
- 命名空间:
- 命名空间是 Linux 内核特性,用于隔离资源和进程视图。
- Containerd 利用 PID、Network、Mount、UTS、IPC、User 等命名空间实现容器隔离。
- 使用
ctr ns ls
查看命名空间,使用ctr ns create
创建命名空间,使用ctr ns rm
删除命名空间,操作时可使用-n
指定命名空间。
- 插件: