Containerd容器技术
【代码】Containerd容器技术。
目录
1. containerd 守护进程(containerd daemon)
一,containerd概述
1,containerd 概述
containerd 是一个开源的容器运行时(Container Runtime),最初由 Docker 公司开发,后来捐赠给 CNCF(云原生计算基金会),成为其孵化项目之一。它是构建在 OCI(开放容器倡议)标准之上的轻量级容器运行时,旨在为容器化应用提供高效、可靠的运行环境。
2,containerd 的主要功能
1. 容器生命周期管理
- 镜像管理:负责容器镜像的拉取、存储、验证和分发,支持从 Docker Hub、私有仓库等多种源获取镜像。
- 容器创建与运行:基于 OCI 标准创建和启动容器,管理容器的启动、停止、暂停、删除等状态。
- 进程管理:监控容器内的进程状态,处理进程异常退出等情况。
2. 与底层基础设施交互
- 资源隔离:利用 Linux 内核特性(如 namespace、cgroup)实现容器间的资源隔离和限制。
- 存储与网络管理:对接存储驱动(如 overlay2、btrfs)和网络插件(如 CNI),为容器提供存储卷和网络连接。
3. 与上层系统集成
- Kubernetes 集成:作为 Kubernetes 的默认容器运行时之一(替代 Docker),通过 CRI(容器运行时接口)与 Kubernetes 无缝对接。
- 多集群与编排支持:支持与容器编排工具(如 Docker Swarm、Nomad)集成,适配不同的部署场景。
3,containerd 的核心特点
1. 轻量级与低资源消耗
- 相比传统 Docker 架构,containerd 去掉了不必要的功能模块,仅保留容器运行时的核心能力,内存占用更低。
- 采用模块化设计,组件间通过 gRPC 通信,减少系统资源开销。
2. 标准化与开放性
- 严格遵循 OCI 标准(容器格式和运行时规范),确保容器在不同平台和工具间的兼容性。
- 开源且社区活跃,支持多种操作系统(Linux、Windows)和硬件架构(x86、ARM)。
3. 高性能与稳定性
- 支持容器的快速启动(毫秒级启动时间),适合大规模微服务部署。
- 具备故障恢复机制,如容器崩溃时自动重启,确保服务连续性。
4. 灵活的架构设计
- 分层架构:分为 runtime(运行时)、shim(垫片进程)和 snapshotter(镜像快照管理),便于扩展和维护。
- 插件机制:通过插件化设计支持自定义存储、网络和监控组件,例如对接 CNI 网络插件。
5. 安全增强
- 支持安全容器(如 Kata Containers),通过轻量级虚拟机隔离容器,提升安全性。
- 集成 Seccomp、AppArmor 等安全机制,限制容器内进程的权限。
4,containerd 与 Docker 的关系
- 历史演进:containerd 最初是 Docker 引擎的底层组件(Docker 1.11 版本后分离),后来独立发展为通用容器运行时。
- 功能差异:Docker 提供完整的开发、打包、部署流程(含 CLI、镜像仓库等),而 containerd 专注于容器运行时的核心功能。
- 当前定位:Kubernetes 从 1.24 版本开始不再支持 Docker,转而推荐使用 containerd 作为容器运行时(通过 cri-containerd 插件对接 CRI)。
5,containerd的核心组件
containerd 采用模块化设计,各组件通过 gRPC 接口通信,形成分层架构。这种设计使得它可以独立运行,也可以作为其他系统的底层容器运行时。
1. containerd 守护进程(containerd daemon)
角色:作为主服务进程,负责管理整个容器生命周期。
功能:
- 监听客户端请求(如创建容器、拉取镜像)。
- 管理镜像和容器的元数据(存储在本地数据库中)。
- 协调其他组件(如 shim、snapshotter)的工作。
通信接口:通过/run/containerd/containerd.sock
提供 gRPC 服务。
2. shim 进程(containerd-shim)
角色:作为容器进程的父进程,负责容器的独立生命周期管理。
功能:
- 隔离容器进程与 containerd 守护进程:即使 containerd 重启,容器仍能继续运行。
- 收集容器的标准输出 / 错误流,并转发给日志驱动。
- 传递信号(如 SIGTERM、SIGKILL)给容器内的主进程。
设计优势:避免单点故障,提升系统稳定性。
3. runtime 运行时
角色:负责容器的实际执行和资源隔离。
分类:
- runC:默认低级别运行时,基于 OCI 规范实现,提供基础的 namespace 和 cgroup 隔离。
- 高级运行时:如 Kata Containers、gVisor,提供更强的安全隔离(通过轻量级虚拟机或用户态内核)。
配置方式:通过config.toml
指定默认运行时,或在创建容器时通过--runtime
参数指定。
4. snapshotter 快照管理器
角色:管理容器镜像的分层存储和容器的读写层。
实现方式:
- overlayfs:默认选项,基于 Linux 的 overlay 存储驱动,性能高。
- btrfs/zfs:提供高级特性(如写时复制、快照),但依赖特定文件系统。
- stargz:优化镜像拉取性能,支持按需加载层(on-demand pulling)。
工作原理: - 镜像层以只读方式挂载,容器的写操作存储在独立的可写层。
- 通过
containerd content store
管理镜像内容的哈希和校验。
5. content store 内容存储
角色:存储和检索容器镜像的内容(blob)。
功能:
- 基于内容寻址(content-addressable storage),通过哈希值标识镜像层。
- 实现镜像层的去重和共享,节省存储空间。
存储位置:默认位于/var/lib/containerd/io.containerd.content.v1.content/
。
6. metadata store 元数据存储
角色:存储容器、镜像、任务的元数据信息。
实现方式:
- 默认使用 BoltDB(嵌入式键值数据库)存储在本地文件系统。
- 支持通过插件扩展为其他存储后端(如 MySQL、PostgreSQL)。
数据示例:容器配置、状态、挂载点、网络设置等。
7,storage(存储)
- Content(内容):功能: Content 存储了容器镜像的实际数据。这包括文件系统层和元数据,用于创建和管理容器的基础文件系统。
- Snapshot(快照):功能:Snapshot 存储容器的快照数据。每个容器都可以有一个或多个快照,允许它们共享相同的文件系统层,提高效率。
- Diff(差异):功能: Diff 存储容器文件系统层之间的差异。当容器运行时需要修改文件系统时,会在已有的文件系统层上创建一个差异层,以保存变更。
8,Metadata(元数据)
-
Images(镜像):功能:Images 存储容器镜像的元数据,包括镜像的标签、大小、创建时间等信息。Metadata 中的 Images组件允许容器对镜像进行管理和操作。
-
Containers(容器):功能: Containers 存储容器的元数据,包括容器的状态、配置信息、网络设置等。这部分元数据使得容器能够有效地管理容器的生命周期。
9,Runtime(运行时)
-
Tasks(任务):功能:Tasks 包含容器内的进程组。每个容器运行时都有关联的 Task,它负责管理容器内的所有进程Tasks 与 Shim 一起工作,维护容器的状态。
-
Events(事件):功能: Events 组件记录了容器的各种事件,如容器的创建、启动、停止等。这些事件可以用于监控和日志记录,帮助用户了解容器系统的运行状况。
6,典型应用场景
- 云原生基础设施:作为 Kubernetes 集群的容器运行时,支撑大规模微服务部署。
- 边缘计算:在资源受限的边缘节点上运行轻量级容器,降低资源消耗。
- 高性能计算:利用 containerd 的快速启动和低开销特性,优化批量任务的容器化部署。
二,部署containerd
添加软件源信息
curl -o /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
修改配置文件
sed -i 's/$releasever/8/g' /etc/yum.repos.d/docker-ce.repo
sed -i 's/$basearch/x86_64/g' /etc/yum.repos.d/docker-ce.repo
安装containerd
dnf -y install containerd.io
生成配置文件
mkdir -p /etc/containerd
containerd config default | tee /etc/containerd/config.toml
- tee 命令通常用来读取标准输入,并将其内容写入文件和输出到终端。
- /etc/containerd/config.toml是 containerd的配置文件路径,这里指定了配置文件的具体位置
- 使用 containerd config default 命令获取 containerd 的默认配置信息
- 通过管道|将这些配置信息传递给 tee 命令
修改生成的配置文件
vim /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.6" 63行修改
SystemdCgroup = true 127修改
config_path = "/etc/containerd/certs.d" 147行修改
创建文件并配置镜像加速
mkdir -p /etc/containerd/certs.d/docker.io
mkdir -p /etc/containerd/certs.d/registry.k8s.io
touch -p /etc/containerd/certs.d/docker.io/hosts.toml
vim /etc/containerd/certs.d/docker.io/hosts.toml
server = "docker.io"
[host."https://docker.m.daocloud.io"]
capabilities = ["pull","resolve"]
[root@localhost certs.d]# vim registry.k8s.io/hosts.toml
server = "registry.k8s.io"
[host."https://registry.aliyuncs.com/google_containers"]
capabilities = ["pull","resolve"]
override_path = true
启动服务
[root@localhost certs启动服务.d]# systemctl restart containerd
[root@localhost certs.d]# systemctl status containerd
三,containerd的基本操作
1,镜像管理命令
命令格式 | 功能描述 |
---|---|
ctr images pull <镜像地址> |
从镜像仓库拉取镜像(例如:ctr images pull docker.io/library/nginx:latest ) |
ctr images push <镜像地址> |
将镜像推送到指定仓库 |
ctr images ls |
列出本地所有镜像 |
ctr images rm <镜像名称> |
删除本地镜像 |
ctr images tag <源镜像> <目标镜像> |
为镜像添加标签 |
ctr images export <镜像> <文件.tar> |
将镜像导出为 tar 文件 |
ctr images import <文件.tar> |
从 tar 文件导入镜像 |
2. 容器管理命令
命令格式 | 功能描述 |
---|---|
ctr containers create <镜像> <容器ID> |
创建容器(但不启动) |
ctr tasks start <容器ID> |
启动已创建的容器 |
ctr tasks stop <容器ID> |
停止运行中的容器 |
ctr tasks kill <容器ID> <信号> |
向容器发送信号(如 SIGTERM ) |
ctr tasks ls |
列出所有运行中的容器 |
ctr containers ls |
列出所有容器(包括未运行的) |
ctr containers rm <容器ID> |
删除容器 |
ctr exec --tty --exec-id <ID> <容器ID> <命令> |
在容器内执行命令(如:ctr exec -t <ID> sh ) |
3. 命名空间管理命令
命令格式 | 功能描述 |
---|---|
ctr namespaces create <命名空间> |
创建新的命名空间(默认命名空间为 default ) |
ctr namespaces ls |
列出所有命名空间 |
ctr namespaces rm <命名空间> |
删除命名空间 |
ctr --namespace <命名空间> <命令> |
在指定命名空间执行命令(如:ctr -n k8s.io images ls ) |
4. 内容与存储命令
命令格式 | 功能描述 |
---|---|
ctr content ls |
列出所有存储的内容(blobs) |
ctr content retrieve <digest> |
获取指定内容的详细信息 |
ctr snapshots ls |
列出所有快照 |
ctr snapshots stats |
查看快照统计信息 |
5. 插件与配置命令
命令格式 | 功能描述 |
---|---|
ctr plugins ls |
列出所有已加载的插件 |
ctr version |
查看 containerd 版本信息 |
ctr config default |
生成默认配置文件(可重定向到 config.toml ) |
6,挂载镜像命令
命令格式 | 功能描述 |
---|---|
ctr runtime list |
列出可用的运行时(如 runc 、kata-runtime ) |
ctr images mount <镜像> <挂载点> |
将镜像挂载到本地文件系统 |
ctr images unmount <挂载点> |
卸载已挂载的镜像 |
更多推荐
所有评论(0)