目录

一,containerd概述

         1,containerd 概述

         2,containerd 的主要功能

1. 容器生命周期管理

2. 与底层基础设施交互

3. 与上层系统集成

3,containerd 的核心特点

1. 轻量级与低资源消耗

2. 标准化与开放性

3. 高性能与稳定性

4. 灵活的架构设计

5. 安全增强

        4,containerd 与 Docker 的关系

     5,containerd的核心组件

      1. containerd 守护进程(containerd daemon)

        2. shim 进程(containerd-shim)

         3. runtime 运行时

        4. snapshotter 快照管理器

        5. content store 内容存储

        6. metadata store 元数据存储

        7,storage(存储)

        8,Metadata(元数据)

        9,Runtime(运行时)

        典型应用场景

二,部署containerd

添加软件源信息

修改配置文件

安装containerd

生成配置文件

修改生成的配置文件

创建文件并配置镜像加速

 启动服务

三,containerd的基本操作

2. 容器管理命令

3. 命名空间管理命令

4. 内容与存储命令

5. 插件与配置命令

6,挂载镜像命令

一,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列出可用的运行时(如 runckata-runtime
ctr images mount <镜像> <挂载点>将镜像挂载到本地文件系统
ctr images unmount <挂载点>卸载已挂载的镜像

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/86186.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/86186.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/86186.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

awk命令详解

Shell AWK 命令详解 一、AWK 简介与基本语法 AWK 是一种强大的文本处理工具,名称来源于其三位创始人 Alfred Aho、Peter Weinberger 和 Brian Kernighan 的姓氏首字母。它逐行扫描文件,寻找匹配特定模式的行并执行相应操作。 基本语法结构: awk [选项] 模式 {动作} 文件名…

面试150跳跃游戏

思路 贪心算法&#xff0c;使用变量cover表示当前所能覆盖的最大距离&#xff0c;如果cover大于等于n-1表示能覆盖到&#xff0c;反之则不能 class Solution:def canJump(self, nums: List[int]) -> bool:if not nums:return Falsenlen(nums)cover0for i in range(n):if i…

磁悬浮轴承温度漂移克星:三招实现精准控制

在磁悬浮轴承&#xff08;Active Magnetic Bearing, AMB&#xff09;的高性能应用中&#xff0c;位置传感器的精度就是系统的生命线。然而&#xff0c;传感器输出随温度变化产生的漂移&#xff08;温漂&#xff09;&#xff0c;如同一个潜伏的破坏者&#xff0c;悄然引入测量误…

vue2 使用el-form中el-form-item单独绑定rules不生效问题

我居然在同一个问题在了两次跟头&#xff01;&#xff01;&#xff01;必须记录这个小细节&#xff01;&#xff01;&#xff01; 背景&#xff1a;一个后台的表单校验&#xff0c;表单中需要单独绑定rules&#xff0c;跳转方式后面两个选项都使用的同一个el-form-item&#xf…

利用 AWS MCP 解决区域差异问题:构建统一混合云管理平台

痛点直击&#xff1a; 企业在全球化或混合云部署中&#xff0c;常因不同区域&#xff08;如 AWS 国际区 vs 中国区&#xff09;或本地 IDC 与云环境之间的服务差异、配置标准不一、合规要求不同&#xff0c;导致管理复杂、运维低效、部署不一致。AWS Migration and Configurati…

C#.Net筑基-优雅LINQ的查询艺术

Linq&#xff08;Language Integrated Query&#xff0c;集成查询语言&#xff09;&#xff0c;顾名思义就是用来查询数据的一种语言&#xff08;可以看作是一组功能、框架特性的集合&#xff09;。在.NETFramework3.5&#xff08;大概2007年&#xff09;引入C#&#xff0c;用统…

HTML炫酷烟花

系列文章 序号目录1HTML满屏跳动的爱心&#xff08;可写字&#xff09;2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心&#xff08;简易版&#xff09;7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心&#xff08;双心版&#xff09;10…

【看到哪里写到哪里】算闰年的(year 3) == 0

【&#xff1f;&#xff1f;BUG&#xff1f;&#xff1f;】在MYSQL源码里面有一段&#xff0c;算每年的天数。其中用到了两个很有意思的 1&#xff09;(year & 3) 0 2&#xff09;(year % 400 0 && year)&#xff0c;为什么要 &&year呢&#xff1f; &g…

Redis的渐进式hash和缓存时间戳深入学习

前言 关于redis&#xff0c;可由应用维度、系统维度来进行了解。 如下所示&#xff1a; redis在缓存应用发挥着重要作用&#xff0c;不知道你有没思考过Redis为什么这么快&#xff1f; 1、纯内存访问 为什么内存访问比磁盘访问更快&#xff0c;可参考&#xff1a; 操作系统的…

视频续播功能实现 - 断点续看从前端到 Spring Boot 后端

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

【工具】Linux 中 find 命令使用教程

find 命令是 Linux 系统中最强大、最灵活的文件搜索工具&#xff0c;其能力远超简单的文件名匹配。掌握 find 能让你在复杂的文件系统中精准定位目标&#xff0c;实现高效的文件管理。 一、命令结构与核心概念 find [起始路径] [选项] [表达式]起始路径&#xff1a;搜索的根目…

0629-

0629 0629操作3. 权限 0629 操作 进入数据库 mysql -uroot -proot123 .use idatabase; select * from customer; 2.select distinct name&#xff0c;idnum from customer; 3.UPDATE customer SET idnum left(MD5(idnum),16); 4. UPDATE customer SET phone CONCAT( LEFT(p…

JVM调优实战 Day 6:JVM性能监控工具实战

【JVM调优实战 Day 6】JVM性能监控工具实战 文章简述 在Java应用的性能优化过程中&#xff0c;JVM性能监控工具是不可或缺的“眼睛”。它们能够帮助开发者实时掌握系统运行状态&#xff0c;识别性能瓶颈&#xff0c;并为后续调优提供数据支撑。本文作为“JVM调优实战”系列的第…

【嘉立创EDA】PCB 如何按板框轮廓进行铺铜

文章路标👉 :one: 文章解决问题:two: 主题内容:three: 参考方法be end..1️⃣ 文章解决问题 操作环境:嘉立创EDA专业版 V2.2.40 本文使用嘉立创EDA,描述如何在PCB设计时,直接使用板框轮廓进行铺铜。本文将此过程记录,以供有需要的读者参考。 2️⃣ 主题内容 在PCB设计…

dockerfile命令及构建

一&#xff0c;dockerfile常用命令 命令介绍FROM–指定基础镜像LABEL作者信息USER切换运行属主身份WORKDUR切换工作目录ENV用于docker容器设置环境变量RUN用来执行命令行的命令COPY把宿主机文件复制到镜像中去ADD将文件路径复制添加到容器内部路径EXPOSE为容器打开指定要监听的…

uniApp实战四:网络请求封装

文章目录 1.最终效果预览2.请求封装3.创建config配置文件4.创建api请求5.页面调用 说明&#xff1a;当前笔记基于Vue3开发&#xff0c;HbuilderX版本4.66 1.最终效果预览 2.请求封装 在util/request.js下创建js文件&#xff0c;代码如下 import config from /configconst tim…

MCP协议全解:大模型时代的能力开放与服务集成最佳实践

一、MCP协议是什么&#xff1f; MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是大模型和多智能体&#xff08;Agent&#xff09;生态中&#xff0c;用于标准化描述和传递上下文信息、能力开放、服务集成的协议。它的目标是让不同模型、Agent…

oracle 返回最新记录

在Oracle数据库中&#xff0c;如果你想获取一个表中基于某些条件的最新记录&#xff0c;通常有两种常见的方法&#xff1a;使用ROWID或者使用带有ORDER BY和ROWNUM的子查询。下面我将介绍这两种方法的基本用法。 方法1&#xff1a;使用ROWID 如果你的表有一个时间戳字段或者递…

华为云服务器:Can’t connect to MySql server on ‘localhost’(10060)

本地远程连接服务器数据库&#xff0c;提示10060 在 Ubuntu/Debian 系统中&#xff0c;检查 3306 端口是否开启需要从两个方面验证&#xff1a;MySQL 服务是否监听该端口以及防火墙是否允许外部访问该端口。以下是具体步骤&#xff1a; sudo ufw status查看到为开启mysql端口 …

利用Percona XtraDB Cluster搭建MySql高可用集群

引言拉取镜像创建单节点实例(一般在测试环境中使用)自定义网络(集群间相互隔离)映射数据目录创建docker-compose PXC容器用docker-compose启动PXC集群集群验证数据库负载均衡的必要性Haproxy负载均衡器部署故障排查引言 告别单点故障,拥抱持续可用——构建基于 Percona X…