Containerd容器技术

Containerd容器技术详解 可以看出 Containerd 采用的也是 C/S 架构,服务端通过 unix domain socket 暴露低层的 gRPCAPI 接口出去,客户端通过这些 API 管理节点上的容器,每个 Containerd 只负责一台机器,Pull镜像,对容器的操作(启动、停止等),网络,存储都是由 containerd 完成。为了解耦,Containerd 将系统划分成了不同的组件,每个组件都由一个或多个模块协作完成(core部分),每一种类型的模块都以插件的形式集成到Containerd 中。 阅读详情

基本概念

一、架构设计

Containerd 采用分层模块化架构,核心分为三层:

  1. ‌API 层‌

    • 提供 gRPC 接口,支持 CRI(Container Runtime Interface)规范,兼容 Kubernetes 及自定义客户端(如 Docker CLI)。
    • 对外暴露容器生命周期管理、镜像操作等接口,同时集成 Prometheus 监控指标。
  2. ‌Core 层‌

    • ‌Bundle 子系统‌:管理容器配置(OCI Bundle),包括镜像解压、快照创建(基于 OverlayFS/ZFS 等)。
    • ‌Runtime 子系统‌:通过 containerd-shim 调用底层运行时(如 runc),实现容器进程隔离与生命周期控制。
    • ‌元数据存储‌:使用 BoltDB 存储镜像、容器等持久化数据。
  3. ‌Backend 层‌

    • ‌插件体系‌:支持可扩展的存储驱动、网络插件及运行时(如 Kata Containers、gVisor)。
    • ‌事件与度量‌:全局事件总线(Events)和性能指标收集(Metrics)。
    • ‌快照管理‌:通过 Snapshotter 实现镜像分层存储与高效容器启动。

‌数据流示例‌:拉取镜像 → 存储至 Content Store → 解压层为快照 → 生成 OCI Bundle → containerd-shim 调用 runc 创建容器。


二、核心原理

  1. ‌容器生命周期管理‌

    • 容器启动:通过 containerd-shim 启动 runc,创建隔离的命名空间(PID/Network/Mount 等)。
    • 进程托管:shim 作为容器的父进程,确保容器退出后资源回收,实现 daemon 无状态化。
  2. ‌镜像分发与存储‌

    • 遵循 OCI 标准,支持从仓库拉取镜像并存储为多层快照(每个层对应独立 hash)。
    • 快照复用:相同镜像层仅存储一次,新容器通过 OverlayFS 挂载写时复制(CoW)层。
  3. ‌安全隔离‌

    • 默认启用 Linux Capabilities 限制与非特权模式,支持 Seccomp/AppArmor 策略。
    • 多租户隔离:通过命名空间(Namespace)分隔不同用户或集群的容器资源。

三、关键特性

‌特性‌‌说明‌
‌轻量化高性能‌内存占用比 Docker 低 40%,容器启动延迟降至毫秒级。
‌标准化兼容‌遵循 OCI 规范,无缝集成 Kubernetes(通过 CRI)、Docker 等生态。
‌插件化扩展‌支持自定义存储驱动(ZFS)、网络插件(Cilium)、安全运行时(Kata)。
‌生产级可靠性‌支持热升级、故障恢复、多副本元数据存储。
‌高效存储‌Erofs 快照器优化只读层性能,分块拉取镜像减少网络开销。

四、技术意义

  1. ‌云原生基石‌

    • 作为 Kubernetes 默认运行时(占比超 85%),提供稳定高效的容器调度基础。
    • 解耦编排系统与底层运行时,推动生态系统标准化。
  2. ‌模块化演进‌

    • 脱离 Docker 单体架构,专注核心功能(镜像/容器/存储管理),成为“容器运行时的事实标准”。
  3. ‌生态协同优化‌

    • 通过 CRI 接口对接 Kubelet,减少组件冗余调用,提升集群性能。
    • 支持沙箱容器(如 runsc),扩展安全隔离场景。

‌总结‌:Containerd 通过轻量架构、开放标准及插件化设计,成为云原生时代容器管理的核心引擎,平衡了性能、灵活性与生产稳定性。

基本部署

1. 环境准备‌

# 安装基础依赖(适用于 CentOS/RHEL) 
sudo yum install -y yum-utils device-mapper-persistent-data lvm2 
  • ‌解析‌:安装必要的存储驱动工具(如 device-mapper)和包管理工具(yum-utils)。
# 添加阿里云镜像源(国内加速) 
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo 
  • ‌解析‌:替换默认仓库为阿里云镜像源,加速下载速度。

‌2. 安装 Containerd‌

# 安装 containerd 和 runc(二进制全量包) 
wget https://github.com/containerd/containerd/releases/download/v1.7.14/cri-containerd-cni-1.7.14-linux-amd64.tar.gz 
tar zxf cri-containerd-cni-1.7.14-linux-amd64.tar.gz -C / 
  • ‌解析‌:下载官方发布的 cri-containerd-cni 包(包含 containerd、runc 和 CNI 插件),解压至根目录。
# 生成默认配置文件 
mkdir /etc/containerd 
containerd config default > /etc/containerd/config.toml 
  • ‌解析‌:创建配置目录并生成默认 TOML 格式配置文件,定义存储路径、运行时等参数。

‌3. 配置优化‌

# 编辑配置文件(关键参数) 
sudo nano /etc/containerd/config.toml 
  • ‌修改项‌:
    • ‌镜像加速‌:在 [plugins."io.containerd.grpc.v1.cri".registry.mirrors] 下添加阿里云镜像加速地址。
    • ‌存储驱动‌:设置 SystemdCgroup = true 以兼容 Kubernetes。
    • ‌日志级别‌:调整 level = "info" 便于调试。

‌4. 启动服务‌

# 通过 systemd 管理服务 
systemctl --now enable containerd 
  • ‌解析‌:启用并立即启动 containerd 守护进程。
# 验证安装 
ctr version 
  • ‌预期输出‌:
    Client: Version: v1.7.14 Server: Version: v1.7.14 
  • ‌解析‌:确认客户端和服务端版本一致。

‌5. 工具链补充‌

# 安装 nerdctl(兼容 Docker CLI 的工具) 
wget https://github.com/containerd/nerdctl/releases/download/v1.5.0/nerdctl-1.5.0-linux-amd64.tar.gz 
tar zxf nerdctl-1.5.0-linux-amd64.tar.gz -C /usr/local/bin 
  • ‌解析‌:nerdctl 提供类似 docker 的命令行体验,支持镜像和容器管理。

‌6. 集成 Kubernetes(可选)‌

# 修改 kubelet 配置 
echo 'KUBELET_EXTRA_ARGS="--container-runtime=remote --container-runtime-endpoint=unix:///run/containerd/containerd.sock"' > /etc/sysconfig/kubelet 
  • ‌解析‌:配置 kubelet 使用 containerd 作为 CRI 运行时。

‌关键点总结‌

  1. ‌模块化安装‌:选择 cri-containerd-cni 全量包避免手动组装组件。
  2. ‌配置优先级‌:镜像加速和存储驱动是生产环境必调参数。
  3. ‌生态兼容‌:通过 nerdctl 或直接调用 ctr 管理容器。
  4. ‌K8s 集成‌:需显式指定 containerd 的 CRI 接口路径。

注:若需完整卸载,执行 rm -rf /etc/containerd 并清理 systemd 单元文件。

 命令行工具

‌一、ctr(Containerd 原生 CLI)‌

‌1. 镜像管理‌
ctr image pull docker.io/library/nginx:latest 
  • ‌解析‌:从 Docker Hub 拉取 Nginx 镜像,默认存储至 default 命名空间。
  • ‌关键参数‌:--snapshotter 可指定快照驱动(如 overlayfs)。
ctr image ls 
  • ‌解析‌:列出本地镜像,显示仓库名、标签及大小,格式与 docker images 类似但更精简24。
ctr image rm docker.io/library/nginx:latest 
  • ‌解析‌:删除指定镜像,若镜像被容器引用则需先删除容器。
‌2. 容器管理‌
ctr container create docker.io/library/nginx:latest my-nginx 
  • ‌解析‌:创建容器但不启动,生成 OCI 规范配置至 /var/lib/containerd。
  • ‌命名空间‌:通过 -n k8s.io 可操作 Kubernetes 创建的容器。
ctr task start my-nginx 
  • ‌解析‌:启动容器任务,底层调用 runc 创建隔离进程26。
ctr task exec --exec-id sh my-nginx /bin/sh 
  • ‌解析‌:进入运行中的容器执行命令,--exec-id 需唯一标识会话。

‌二、crictl(Kubernetes CRI 工具)‌

‌1. 配置‌
crictl config runtime-endpoint unix:///run/containerd/containerd.sock 
  • ‌解析‌:配置 CRI 接口路径,使 crictl 可管理 Containerd 运行时。
‌2. 容器操作‌
crictl ps -a 
  • ‌解析‌:列出所有容器(包括停止的),输出格式兼容 docker ps。
  • ‌限制‌:仅显示 k8s.io 命名空间的容器。
crictl logs <container-id> 
  • ‌解析‌:查看容器日志,自动聚合 stdout/stderr 流。

‌三、nerdctl(Docker 风格 CLI)‌

‌1. 容器生命周期‌
nerdctl run -d --name web nginx:latest 
  • ‌解析‌:后台运行容器,支持 -p 端口映射等 Docker 兼容参数。
  • ‌依赖‌:需提前安装 CNI 插件以支持网络功能。
nerdctl compose up -d 
  • ‌解析‌:通过 Compose 文件启动多容器应用,语法与 Docker Compose 一致。
‌2. 镜像构建‌
nerdctl build -t my-app . 
  • ‌解析‌:使用当前目录的 Dockerfile 构建镜像,支持缓存和多阶段构建。

‌四、工具对比与适用场景‌

‌工具‌‌定位‌‌优势‌‌局限性‌
ctrContainerd 原生调试工具直接操作底层 API,适合开发调试命令冗长,功能较基础
crictlKubernetes 运维工具专为 K8s 设计,支持 Pod 级操作仅限 k8s.io 命名空间
nerdctl开发者友好型工具完全兼容 Docker CLI 习惯需额外安装 CNI/构建组件

‌五、底层原理补充‌

  1. ‌命名空间隔离‌
    • ctr -n k8s.io 与 crictl 操作同一批容器,但普通 ctr 命令默认使用 default 命名空间。
  2. ‌CRI 接口调用‌
    • crictl 通过 CRI 插件与 Containerd 交互,而 ctr 直接调用 gRPC 接口。
  3. ‌日志存储‌
    • 容器日志默认存储在 /var/log/pods/<namespace>_<pod>_<id>/ 下,由 kubelet 管理。

‌提示‌:生产环境推荐组合使用 nerdctl(开发) + crictl(运维)。

ctr命令解析 

‌一、基础命令结构‌

ctr [全局选项] <子命令> [子命令选项] [参数] 
  • ‌全局选项‌:
    --address:指定 containerd 的 gRPC 套接字路径(默认 /run/containerd/containerd.sock)。
    --namespace:设置命名空间(默认 default,Kubernetes 容器需用 k8s.io)。
    --debug:启用调试日志输出。

‌二、镜像管理‌

‌1. 拉取镜像‌
ctr image pull docker.io/library/nginx:latest 
  • ‌解析‌:从 Docker Hub 拉取镜像,需完整指定仓库路径(docker.io/library/不可省略)。
  • ‌存储位置‌:镜像内容保存至 /var/lib/containerd/io.containerd.content.v1.content。
‌2. 本地镜像操作‌
ctr image list 
  • ‌输出示例‌:
    REF             TYPE                 DIGEST 
    docker.io/library/nginx:latest application/vnd.docker.distribution.manifest.v2+json sha256:... 
  • ‌解析‌:列出镜像的引用、类型及摘要,无友好名称显示(对比 docker images)。
ctr image mount docker.io/library/nginx:latest /mnt/nginx 
  • ‌解析‌:将镜像挂载到主机目录,可直接访问其文件系统(需手动卸载 ctr image unmount /mnt/nginx)。

‌三、容器生命周期‌

‌1. 创建容器‌
ctr container create docker.io/library/nginx:latest my-nginx 
  • ‌解析‌:创建容器但不启动,生成 OCI 配置至 /var/lib/containerd/io.containerd.runtime.v2.task/default/my-nginx。
  • ‌关键差异‌:无自动端口映射或后台运行选项,需手动配置。
‌2. 启动任务‌
ctr task start my-nginx 
  • ‌解析‌:启动容器进程,底层调用 runc 创建命名空间隔离的进程。
  • ‌日志查看‌:需通过 ctr task logs my-nginx 或直接访问日志文件。
‌3. 交互式操作‌
ctr task exec --exec-id sh my-nginx /bin/sh 
  • ‌解析‌:进入容器执行命令,--exec-id 需唯一标识会话(如随机生成 UUID)。

‌四、高级功能‌

‌1. 命名空间管理‌
ctr namespace create dev ctr -n dev image pull docker.io/alpine:latest 
  • ‌解析‌:隔离不同环境的资源(如开发/生产),Kubernetes 专用 k8s.io 命名空间。
‌2. 快照管理‌
ctr snapshot ls 
  • ‌解析‌:列出所有快照(镜像层),显示挂载点和父层关系,基于 OverlayFS 实现写时复制。

‌五、与 Docker 的差异对比‌

‌功能‌‌ctr 实现‌‌Docker 等效命令‌‌说明‌
镜像拉取ctr image pulldocker pullctr 需完整仓库路径
容器运行ctr run(直接启动)docker run -dctr 无自动后台运行选项
日志查看ctr task logsdocker logsctr 日志输出为原始流
网络配置依赖 CNI 插件手动配置Docker 原生网络驱动ctr 不集成网络功能

‌六、调试技巧‌

  1. ‌事件监控‌

    ctr events 
    • ‌解析‌:实时显示容器生命周期事件(创建/启动/停止)。
  2. ‌资源限制检查‌

    ctr task metrics my-nginx 
    • ‌输出‌:显示容器 CPU/内存/PID 使用量,需提前配置 cgroups。

‌注意‌:ctr 作为调试工具,命令及输出格式可能随版本变化,生产环境建议使用 nerdctl 或 crictl。

深入理解 Kata Containers 本文将详细介绍 Kata Containers 的定义、架构、工作原理、应用场景、常见命令以及实验操作,帮助读者全面掌握这一创新的容器技术。通过 Kata Containers,用户可以在保持容器轻量级和灵活性的同时,提升安全性和隔离性,适用于多种复杂的应用场景。Kata Containers 是一种开源的容器运行时,结合了轻量级虚拟机(VM)和容器技术的优点。Kata Containers 将每个容器运行在一个独立的虚拟机中,通过这种方式,在保持性能的前提下,提供了更高的安全性和隔离性。 阅读详情

相关推荐

Kata Containers及相关vmm介绍

Kata Containers介绍 Kata Containers 是轻量级虚拟机的一种新颖实现,可无缝集成到容器生态系统中。 Kata Containers 与容器一样轻巧快速,并与容器管理层集成,同时还提供 VM 的安全优势。 Kata Containers 是两个现有开源项目的合并:Intel Clear Containers 和 Hyper runV。 新项目结合了两种技术的优点,共同愿景是重组虚拟化以适应容器原生应用程序,以提供容器的速度和 VM 的安全性。...

whz-emm的博客 8352

【云原生】安全容器 Kata Containers

出于对传统容器安全性的担忧,Intel 在 2015 年启动了它们以虚拟机为基础的容器技术:Clear Container。Clear Container 依赖 Intel VT 的硬件虚拟化技术以及高度定制的 QEMU-KVM(qemu-lite)来提供高性能的基于虚拟机的容器。在 2017 年,Clear container 项目加入了 Hyper RunV,这是一个基于 hypervisor 的 OCI 运行时,从而启动了 Kata 容器项目。

include的博客 3730

Centos7 部署 Kubernetes Containerd

cri-containerd-cni-1.6.4-linux-amd64.tar.gz 包含containerd以及cri runc等相关工具包,建议下载本包。containerd-1.6.4-linux-amd64.tar.gz 只包含containerd。默认情况下k8s.gcr.io无法访问,所以使用我提供的阿里云镜像仓库地址即可。包中会有containerd启动脚本,我们已经解压到对应的目录,可以直接调用启动。上面的文件都是二进制文件,直接移动到对应的目录并配置好环境变量就可以进行使用了。

专注基础架构领域 1890

centos 安装contained,contained的使用、配置文件讲解、配置harbor镜像仓库

k8s从1.24版本开始默认是containerd作为容器运行时,不在使用docker作为容器运行时。所以,本篇讲解containerd的基本安装及使用方法。

MssGuo的博客 5647

新手自己动手设置3D-slicer中文版(超详细图文)

3DSlicer是一个开源的免费软件,用于医学图像分析(包括配准和交互式分割)和可视化(包括3D渲染)以及用于图像引导治疗研究的软件平台。复制qm文件,粘贴于3D-slicer文件相关文件夹内,\bin\translations\。打开3dslicer,edit菜单下Application Settings,支持的操作系统:Linux,Mac OSX和Windows。本人英语太差,所以第一反应就是中文版,官网无中文版下载,下载后不能直接使用,必须要发布成qm文件;qm文件已经生成,位于ts文件同一文件夹。

linjianping513的博客 9835

Power BI常见问题篇1:无法打开文档

Power BI常见问题篇1:无法打开文档

weixin_48273257的博客 3304

Containerd 容器技术

Containerd(container Daemon)是一个开源的容器运行时,它提供了一种标准化的方式来管理容器的生命周期。该项目最初是由 Docker 开发团队创建的,并在后来成为一个独立的项目,被纳入了 cloudNative computing Foundation(云原生计算基金会 CNCF)的孵化项目中。Containerd 的架构是 modularity(模块化)和可扩展性的体现,它被设计为一个轻量级、高度可定制的容器运行时。

2501_91344566的博客 1117

硬件学习笔记(器件篇)—— 磁珠与磁环

因为有这些差别,所有经常会让人们觉得他们并不是一类器件,但实际上他们的原理是一样的。我们使用磁珠是为了利用损耗消耗高频能量,所以如果我们理解了磁珠是如何消耗高频能量的,我们就能理解磁珠的工作原理。

y_u_yu_yu_的博客 1万+

Containerd 容器技术详解

Containerd 的架构是 modularity(模块化)和可扩展性的体现,它被设计为一个轻量级、高度可定制的容器运行时。可以看出 Containerd 采用的也是 C/S 架构,服务端通过 unix domain socket 暴露低层的 gRPC API 接口出去,客户端通过这些 API 管理节点上的容器,每个 Containerd 只负责一台机器,Pull 镜像,对容器的操作(启动、停止等),网络,存储都是由 Containerd 完成。具体运行容器由 runc 负责。

2301_81259717的博客 1398

非球面检测

摘要:非球面镜检测主要采用干涉法,包括零位补偿和非零位补偿两种方式。零位补偿通过透镜组完全校正像差,精度达1%波长,但设计复杂成本高;非零位补偿利用部分像差补偿降低波前斜率,适用于规则非球面。折射-衍射混合补偿镜能同时校正多种像差。实际检测中可采用物理补偿镜或动态CGH加载方案,光路设计需运用坐标断点和多重结构技术实现复杂光路建模。不同方法各具优势,需根据检测需求选择合适方案。

Zhaxibamao的博客 2106

NDIAurora 6D、5D传感器裸线焊接与烧录 6D传感器型号:10001742;5D传感器型号:610157

NDI Aurora 6D、5D传感器裸线焊接与烧录

yanghong2000719的博客 1201

Docker与containerd:容器技术的双璧

本文旨在深入探讨Docker和containerd两种容器技术,介绍它们的基本概念、主要功能、以及两者之间的区别与优势。

博客虽小,世界尽在其中 3786

购物车智能检测系统:YOLO26 + PyQt5 毕设实现

YOLO26 + PyQt5 完成购物车商品检测系统:标注数据集(OpenImages 筛选 + 自制 500 张),训练 100 epoch 得到 mAP50 约 0.89,集成商品定价后输出总价。建议先用 OpenImages 预训练权重在自制数据上调优(冻住 backbone 前 50 epoch),等 loss 稳定后再解冻全量训练。

m0_64661770的博客 55
上一篇: Docker基本部署
下一篇: K8s——Pod(1)
霖檬ing
博客等级 码龄2年 701粉丝 75原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值