云原生技术与应用-Containerd容器技术详解

目录

一.Containerd概述

  1.什么是containerd

  2.Containerd的起源与背景

二.Containerd架构

  1.Containerd架构概述

  2.核心组件解析

三.安装配置Containerd

  1.安装Containerd

  2.配置Containerd

四.Containerd基本操作

  1.镜像类操作

  2.容器类操作

  3.任务类操作

  4.其他操作


一.Containerd概述

1.什么是Containerd

    Containerd 是一个开源的容器运行时(container runtime),主要用于管理容器的生命周期,包括容器的创建、启动、停止、删除等核心操作。它最初是 Docker 引擎的一部分,2017 年被分离出来并捐赠给 Cloud Native Computing Foundation(CNCF),成为独立的开源项目,目前已成为云原生生态中容器运行时的重要标准之一。

2.Containerd的起源与背景

  Containerd 的起源可以追溯到 Docker 项目。Docker 最初作为一个开源项目推出,旨在简化应用程序的打包、分发和部署过程。Docker 引入了容器的概念,将应用程序和其依赖项打包到一个容器中,使得应用在不同环境中可以一致地运行。

   随着 Docker 的发展,其架构逐渐变得复杂,包含了许多功能,如镜像构建、服务编排等。为了更好地组织和管理这些功能,Docker 团队决定将 Docker 引擎拆分成多个组件,其中一个关键的组件就是 Containerd。

   Docker 架构拆分:Docker 从单一的大型引擎拆分为一系列小型、可复用的组件。这种拆分的目标 是提高可维护性、模块化和可扩展性。

   Containerd 作为核心运行时:在 Docker 架构拆分后,containerd 被定位为 Docker 的核心容器运行时。它负责管理容器的生命周期、镜像操作和基本运行时功能。

   贡献给 CNCF(云原生基金会):为了推动 Containerd 的发展,Docker 团队将 containerd 的代码捐赠给了 Cloud Native Computing Foundation(CNCF),使其成为 CNCF 的孵化项目。

   容器生态系统的标准化:Containerd 的设计遵循 Open Container Initiative(开放容器倡议 OCI)规范,这是一个关注容器运行时和镜像格式标准化的开放标准组织。这意味着 containerd 可以与符合 OCI 规范的其他容器工具和运行时进行互操作。

  独立的容器运行时:containerd 不仅仅局限于 Docker,它可以作为独立的容器运行时,与多个容器编排系统和工具集成,从而为用户提供更多选择。

   总体而言,containerd 的起源是为了简化容器运行时的管理,并为容器生态系统提供一个开放、标准化的基础。其发展不仅服务于 Docker 生态系统,还为整个容器领域提供了一个通用的、可扩展的容器运行时。

二.Containerd架构

1.Containerd架构概述

   Containerd 的架构是 modularity(模块化)和可扩展性的体现,它被设计为一个轻量级、高度可定制的容器运行时。

2.核心组件解析

┌───────────────────────────────────────────────────────────┐
│                        用户工具层                          │
│  (Docker CLI, Kubernetes CRI, 其他自定义客户端)           │
└───────────────────────────────────┬───────────────────────┘│ gRPC API
┌───────────────────────────────────▼───────────────────────┐
│                        containerd 守护进程                  │
│  ┌───────────────────┐  ┌─────────────────┐  ┌───────────┐  │
│  │    任务管理器      │  │    内容存储      │  │  快照服务  │  │
│  └───────────────────┘  └─────────────────┘  └───────────┘  │
└───────────────────────────┬─────────────────────────────────┘│ 插件接口
┌───────────────────────────▼─────────────────────────────────┐
│                          插件层                              │
│  ┌────────────┐  ┌───────────┐  ┌───────────┐  ┌──────────┐  │
│  │  CRI 插件   │  │  镜像插件  │  │  存储插件  │  │  事件插件 │  │
│  └────────────┘  └───────────┘  └───────────┘  └──────────┘  │
│                                                               │
│  ┌────────────┐  ┌───────────┐  ┌───────────┐                 │
│  │  日志插件   │  │  网络插件  │  │  运行时插件 │                 │
│  └────────────┘  └───────────┘  └───────────┘                 │
└───────────────────────────┬─────────────────────────────────┘│ 底层接口
┌───────────────────────────▼─────────────────────────────────┐
│                          运行时层                            │
│  ┌────────────┐  ┌───────────────────────┐  ┌──────────────┐  │
│  │   runc     │  │  其他 OCI 运行时 (gVisor, kata) │  │  系统调用 │  │
│  └────────────┘  └───────────────────────┘  └──────────────┘  │
└───────────────────────────┬─────────────────────────────────┘│ Linux 内核
┌───────────────────────────▼─────────────────────────────────┐
│                        操作系统层                            │
│      (namespaces, cgroups, seccomp, 内核功能)                │
└───────────────────────────────────────────────────────────┘
  1. 客户端与 API

    • 通过 gRPC 接口提供服务,支持多种客户端工具(如 Docker CLI、Kubernetes CRI 客户端)。
    • 提供容器、镜像、内容存储等核心资源的管理接口。
  2. 镜像管理

    • 支持从容器 registry 拉取镜像,遵循 OCI 镜像规范。
    • 实现镜像内容的存储与校验(Content Addressable Storage)。
  3. 容器生命周期管理

    • 负责容器的创建、启动、停止、删除等操作。
    • 通过 shim 进程隔离容器与主守护进程,确保稳定性。
  4. 存储与快照

    • 提供分层存储机制,支持联合挂载(Union Mount)。
    • 通过快照服务实现容器文件系统的快速创建与隔离。
  5. 网络与日志

    • 通过 CNI(容器网络接口)插件实现网络配置。
    • 支持多种日志驱动,收集容器运行日志。
  6. 安全机制

    • 集成 seccomp、AppArmor 等安全模块,增强容器隔离。
    • 支持多种运行时(如 runc、gVisor、Kata Containers),满足不同安全需求。
4. 与其他组件的关系
  • 与 Kubernetes 的集成:通过 CRI 插件对接,成为 K8s 默认的容器运行时之一。
  • 与 Docker 的关系:Docker 自 1.11 版本起采用 containerd 作为底层运行时,实现架构解耦。
  • 与 OCI 标准的结合:基于 runc 实现 OCI 运行时规范,确保容器可移植性。

三.安装配置Containerd

1.安装containerd

 

2.配置Containerd

(1)生成配置文件

sudo tee /etc/containerd/config.toml:

tee 命令通常用来读取标准输入,并将其内容写入文件和输出到终端。

/etc/containerd/config.toml 是 containerd 的配置文件路径,这里指定了配置文件的具体位置。

使用 containerd config default 命令获取 containerd 的默认配置信息;
通过管道 | 将这些配置信息传递给 tee 命令;
使 用 sudo tee /etc/containerd/config.toml 以 管 理 员 权 限 创 建 或 覆 盖 /etc/containerd/config.toml 文件,并将之前获取的配置信息写入其中。

 (2)修改配置文件

vim /etc/containerd/config.toml
sandbox_image = "registry.aliyuncs.com/google_containers/pause:3.9"

  SystemdCgroup = true

 config_path = "/etc/containerd/certs.d"

 

 (3)启动服务

四.Containerd基本操作

1. 镜像类操作

指定平台拉取镜像

 (2)查看镜像

(3)查看本地镜像

 (4)重新打标签

 (5)删除镜像

(6)镜像挂载到主机目录

 (7)镜像从主机目录卸载

ctr images unmount /mnt/

(8) 镜像导出

 (9)镜像导入

 2.容器类操作

(1)创建容器

(2)列出容器

 (3)删除容器

3.任务类操作

(1)启动容器

(2) 查看容器

(3)进入容器里面

 (4)暂停容器

 (5)恢复容器

 (6)获取容器的内存,CPU和PID的限额与使用量

 4.其他操作

列出当前所有的插件

命名空间

查看都有哪些命令空间

创建命名空间

 删除命名空间

    在做操作的时候可以使用-n来指定命名空间,如果不指定表示操作的是默认的命名空间,比如查看k8s.io命名空间的镜像

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

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

相关文章

LINUX714 自动挂载/nfs;物理卷

开机自动挂载 /etc/fstab vim /etc/fstab /dev/sdb2 /u2 ext4 defaults 0 0 mount -a [rootweb ~]# vim /etc/fstab [rootweb ~]# cat /etc/fstab# # /etc/fstab # Created by anaconda on Sat Apr 19 17:11:28 2025 # # Accessible filesystems, by reference, are maintai…

系统性学习C语言-第十六讲-深入理解指针(6)

系统性学习C语言-第十六讲-深入理解指针(6)1. sizeof 和 strlen 的对比1.1 sizeof 1.2 strlen 1.3 sizeof 和 strlen 的对比2. 数组和指针笔试题解析2.1 一维数组2.2 字符数组2.3 二维数组3. 指针运算笔试题解析3.1 题目1:3.2 题目…

8:从USB摄像头把声音拿出来--ALSA大佬登场!

前言前面的章节我们从认识摄像头开始,逐渐认识的YCbCr,并对其进行了H264的编码以及MP4封装。整个过程中,我们大致使用了V4L2和FFmpeg这两个重量级工具,就像我们前面章节所讲,V4L2只是给图像做服务的,并不参…

Linux 命令:useradd

Linux useradd 命令详细教程 useradd 是 Linux 系统中用于创建新用户账户的基础命令,它通过配置文件(如 /etc/passwd、/etc/shadow)和默认设置自动完成用户创建流程。本文将详细介绍其用法、参数及相关配置。资料已经分类整理好:h…

Pytest之收集用例规则与运行指定用例

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 小伙伴们大家好呀,今天笔者会给大家讲解一下pytest是如何收集我们写好的用例?我们又有哪些方式来运行单个用例或者批量运行用例呢&#xff…

qt 使用memcpy进行内存拷贝时注意的问题

int offset sizeof(st_target_data);// 预先分配足够空间this->featureData.resize(offsetsize);// 再执行拷贝memcpy(this->featureData.data()offset, dataa, size);注意 一定要在mencpy之前 使用resize分配足够的空间,否则在方法退出时候会闪退&#xff…

微调性能赶不上提示工程怎么办?Can Gradient Descent Simulate Prompting?——论文阅读笔记

今天速读一篇文章 Can Gradient Descent Simulate Prompting? 一句话总结 针对【新知识应用的场景里,FT效果往往追不上ICL】这个情况,作者引入MAML的思想↓ 内圈让模型学习新知识形成知识FT模型; 外圈通过最小化ICL和知识FT模型的KL散度&…

从“直觉抢答”到“深度思考”:大模型的“慢思考”革命,思维链、树、图如何让AI越来越像人?

注:此文章内容均节选自充电了么创始人,CEO兼CTO陈敬雷老师的新书《GPT多模态大模型与AI Agent智能体》(跟我一起学人工智能)【陈敬雷编著】【清华大学出版社】 GPT多模态大模型与AI Agent智能体书籍本章配套视频课程【陈敬雷】 文…

Android系统的问题分析笔记 - Android上的调试方式 debuggerd

debuggerd 是 Android 系统中的一个重要调试工具,主要用于生成进程崩溃时的核心转储(core dump)和调试信息(如堆栈跟踪)。以下是关于 debuggerd 的详细说明: 1. 基本功能 崩溃分析:当 Native 进…

python 双下划线开头函数

在 Python 里,双下划线开头的函数(准确地说是方法)有着特殊的用途和意义。下面为你详细介绍相关内容: 1. 类的特殊方法(魔术方法) 以双下划线开头和结尾的方法,被称为特殊方法或者魔术方法&…

VyOS起步指南:用Docker快速搭建网络实验环境

文章目录1. VyOS是什么?为什么选择它?2. 五分钟快速部署:Docker方案3. 进入容器:初探VyOS世界4. 核心操作:像开发者一样思考5. 踩坑提醒:新手常见问题6. 结语:网络即代码的未来1. VyOS是什么&am…

动态规划理论基础,LeetCode 509. 斐波那契数 LeetCode 70. 爬楼梯 LeetCode 746. 使用最小花费爬楼梯

动态规划理论基础动态规划,英文:Dynamic Programming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心&#xff…

暑期自学嵌入式——Day02(C语言阶段)

点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!! 主页: 一位搞嵌入式的 genius-CSDN博客https://blog.csdn.net/m0_73589512?spm1000.2115.3001.5343 目录 Day02→数据类型&#xf…

如何单独安装设置包域名

前言 在 npm 中,直接通过 package-lock.json 无法单独设置包的安装地址,因为该文件是自动生成的依赖关系锁定文件。但你可以通过以下方法间接实现: 一、在 package.json 中指定包来源(推荐) 在 package.json 的 depend…

存储过程探秘:数据库编程的艺术

文章目录存储过程语法格式BEGIN...END语句块DECLARE(声明局部变量)流控制语句if函数批处理操作测试2测试3存储过程与函数的关系存储过程 MYSQL的存储过程是一组预处理的SQL语句,可以像函数一样在数据库中进行存储和调用。 它们允许在数据库…

非阻塞写入核心:asyncio.StreamWriter 的流量控制与数据推送之道

在 asyncio 的异步编程框架中,如果说 asyncio.StreamReader 是你异步应用的数据输入管道,那么 asyncio.StreamWriter 就是你异步应用的数据输出管道。它是一个至关重要的组件,让你能够方便、高效且非阻塞地向连接的另一端(如 TCP …

控制台打开mysql服务报错解决办法

控制台打开mysql服务报错解决办法这个MySQL错误表示访问被拒绝,通常是因为没有提供正确的用户名和密码。以下是几种解决方法: 方法1:指定用户名和密码连接 mysql -u root -p然后输入root用户的密码。 方法2:如果忘记了root密码&am…

Unsloth 实战:DeepSeek-R1 模型高效微调指南(下篇)

食用指南 本系列因篇幅原因拆分为上下两篇: 上篇以基础环境搭建为主,介绍了 Unsloth 框架、基座模型下载、导入基座模型、数据集下载/加载/清洗、SwanLab 平台账号注册。 下篇(本文)以实战微调为主,介绍预训练、全量…

Ubuntu安装Jenkins

Ubuntu安装Jenkins方法1:使用官方的Jenkins仓库1. 添加Jenkins仓库2. 更新软件包列表3. 安装Jenkins4. 启动Jenkins服务5. 设置Jenkins开机启动6. 查找初始管理员密码7. 访问Jenkins方法2:使用Snap包(适用于较新的Ubuntu版本)1. 安…

ubuntu22.04下配置qt5.15.17开发环境

自从qt5.15版本开始,不再提供免费的离线安装包,只能通过源码自行编译。刚好最近需要在ubuntu22.04下配置qt开发环境,于是写篇文章记录配置的过程。 其实一开始是想配置qt5.15.2的,但是在编译配置参数这一步骤中出现如下报错 em…