2024三掌柜赠书活动第二十四期:containerd原理剖析与实战

目录

前言

Containerd的架构

Containerd的工作流程

Containerd的实战演示

关于《containerd原理剖析与实战》

编辑推荐

内容简介

作者简介

图书目录

书中前言/序言

《containerd原理剖析与实战》全书速览

结束语


前言

作为开发者,对于编程语言并不陌生,随着技术圈的不断进步和发展,越来越多的编程语言诞生和问世。开发者们更喜欢稳定、好用、强大的编程语言,因为可以解决很多问题,也很稳定。随着软件开发的复杂性和规模不断增加,传统的软件开发和运维模式已经无法满足企业的需求,尤其是大部分企业都使用了Docker,而Containerd是一个用于管理容器生命周期的开源容器运行时工具,它是Docker Engine的一部分,在Docker 1.11版本后替代了Docker的旧容器运行时工具,成为了Docker默认的容器运行时。那么本文就来分享一下关于Containerd的原理并进行实战演示。

Containerd的架构

先来了解一下Containerd的架构,Containerd的架构可以分为三个主要组件:client、containerd和runtime。Client是Containerd的用户接口,提供了命令行和API接口供用户与Containerd进行交互。Containerd是核心组件,负责管理容器的生命周期,包括容器的创建、启动、停止、删除等操作。Runtime是负责实际运行容器的组件,例如使用runc来启动和管理容器。

Containerd的工作流程

1、容器的创建

当用户通过Containerd客户端创建容器时,首先会调用Containerd的API接口。Containerd会根据用户提供的参数,创建一个新的容器实例。在这个过程中,Containerd会将介质映像下载到本地,并创建一个容器配置文件。然后,Containerd会调用底层的容器运行时组件,例如runc,使用容器配置文件来启动容器。

2、容器的生命周期管理

一旦容器创建成功,Containerd会负责容器的生命周期管理。这包括容器的启动、停止、重启和删除等操作。当用户要启动容器时,Containerd会调用底层的容器运行时组件来启动容器。当用户要停止容器时,Containerd同样会调用底层的容器运行时组件来停止容器。

3、容器的监控和日志管理

Containerd还负责监控和管理容器的状态。它会定期查询容器的状态,并将容器的状态变化发送给用户。此外,Containerd还负责容器的日志收集和管理。它会将容器的标准输出和标准错误输出保存到文件中,并提供API接口供用户查询容器的日志。

Containerd的实战演示

接下来分享一下具体的实际使用示例,以下是一个简单的Containerd实战演示:

1、第一步,安装Containerd

在命令行中执行以下命令来安装Containerd:

$ curl -LO https://github.com/containerd/containerd/releases/download/v1.5.0/containerd-1.5.0-linux-amd64.tar.gz $ tar -xvf containerd-1.5.0-linux-amd64.tar.gz $ sudo cp bin/* /usr/local/bin/

2、第二步,启动Containerd

在命令行中执行以下命令来启动Containerd:

$ sudo containerd

3、第三步,创建容器

在命令行中执行以下命令来创建一个名为"mycontainer"的容器:

$ sudo containerd ctr run --runtime=runc docker.io/library/alpine:latest mycontainer

4、第四步,查看容器状态和日志

在命令行中执行以下命令来查看容器的状态和日志:

$ sudo containerd ctr tasks exec mycontainer $ sudo containerd ctr tasks logs mycontainer

关于《containerd原理剖析与实战》

接下来给大家推荐一本关于containerd的书籍,这是一本关于如何用containerd的干货图书,一经上市就登上了当当“计算机与互联网”图书排行榜前列。本书从containerd原理剖析讲起到实战技巧,助你在日常工作中轻松学会containerd!另外,关注本文博主,点赞+收藏本文,且在本文评论区评论“入手containerd”,将选取三名幸运读者送出纸质版《containerd原理剖析与实战》一本,截止时间:2024.04.28。入手《containerd原理剖析与实战》传送门:《containerd原理剖析与实战》(赵吉壮、张明月)【简介_书评_在线阅读】 - 当当图书或者https://item.jd.com/14517428.html,个人觉得这本书非常的不错,是一本不可多得的好书,值得拥有去学习。

编辑推荐

本书由字节跳动火山引擎资深技术专家倾力撰写,并获得了来自CNCF、浙江大学计算机系SEL实验室、火山引擎边缘云、边缘计算社区、Kata Containers架构委员会等技术专家倾情力荐。这是首本详细剖析容器运行时——containerd原理与实战的书,汇聚了作者十余年云原生工作中的经验总结与思考。

内容简介

Kubernetes作为云原生领域容器编排的事实标准毋庸置疑,Kubernetes作为编排调度的指挥官,而真正的执行者实际上是容器运行时。在云原生生态中,容器运行时作为云原生技术栈的基石,是至关重要的一环。本书旨在帮助读者全面了解containerd的基本原理和概念。本书从云原生与容器运行时讲起,内容涵盖云原生和容器的发展史,容器技术的Linux原理,containerd的架构、原理、功能、部署、配置、插件扩展开发等,并详细介绍containerd生产实践中的配置以及落地实践,使读者对containerd的概念、原理、实践有比较清晰的了解。

本书适合作为云原生和容器技术的架构师、研发工程师和运维工程师的参考资料,也适合作为希望了解云计算和容器技术的爱好者的自学用书和参考手册。

作者简介

赵吉壮,硕士毕业于浙江大学控制科学与工程学院,字节跳动火山引擎云计算架构师,Kubernetes、Knative 等开源社区成员。具备多年云原生领域架构设计与研发经验,主导火山引擎边缘容器完成从0 到1的建设。专注于 kubernetes、Serverless、容器等技术的研究,译作有《Knative 最佳实践》和《Knative 快速入门与实践》等书籍。

张明月,新华三资深网络技术专家,多年企业网实践经验,对数据中心网络、园区网络、传统二三层交换机、数据传输设备,从管理面到协议控制面,都有着深刻的理解。

图书目录

第1章  云原生与容器运行时 1

1.1 云原生概述 1

1.1.1  云原生的定义 1

1.1.2  云原生应用的价值 3

1.1.3  云原生应用与传统应用对比 3

1.2  云原生技术栈与容器运行时 4

1.2.1  云原生技术栈 4

1.2.2  容器运行时 5

1.3  Docker与Kubernetes的发展史 7

1.3.1  Docker的发展历史及与容器世界的关联 7

1.3.2  Docker架构的发展 13

1.4  containerd概述 15

第2章  初识容器运行时 18

2.1  容器技术的发展史 19

2.2  容器Linux基础 25

2.2.1  容器是如何运行的 25

2.2.2  namespace 27

2.2.3  Cgroups 46

2.2.4  chroot和pivot_root 52

2.3  容器运行时概述 54

2.3.1  什么是容器运行时 54

2.3.2  OCI规范 55

2.3.3  低级容器运行时 70

2.3.4  高级容器运行时 71

第3章  使用containerd 73

3.1 containerd的安装与部署 74

3.1.1  containerd的安装 74

3.1.2  配置containerd.service 76

3.2 ctr的使用 78

3.2.1  ctr的安装 78

3.2.2  namespace 80

3.2.3  镜像操作 82

3.2.4  容器操作 85

3.3 nerdctl的使用 89

3.3.1  nerdctl的设计初衷 89

3.3.2  安装和部署nerdctl 90

3.3.3  nerdctl的命令行使用 92

3.3.4  运行容器 95

3.3.5  构建镜像 96

第4章  containerd与云原生生态 99

4.1 Kubernetes与CRI 99

4.1.1  Kubernetes概述 99

4.1.2  CRI与containerd在Kubernetes生态中的演进 101

4.1.3  CRI概述 104

4.1.4  几种CRI实现及其概述 110

4.2  containerd与CRI Plugin 115

4.2.1  containerd中的CRI Plugin 115

4.2.2  CRI Plugin中的重要配置 117

4.2.3  CRI Plugin中的配置项全解 130

4.3  crictl的使用 138

4.3.1  crictl概述 138

4.3.2  crictl的安装和配置 139

4.3.3  crictl使用说明 142

第5章  containerd与容器网络 153

5.1  容器网络接口 153

5.1.1  CNI概述 153

5.1.2  CNI配置文件的格式 155

5.1.3  容器运行时对CNI插件的调用 157

5.1.4  CNI插件的执行流程 160

5.1.5  CNI插件的委托调用 166

5.1.6  CNI插件接口的输出格式 167

5.1.7  手动配置容器网络 169

5.2  CNI插件介绍 181

5.2.1  main类插件 182

5.2.2  ipam类插件 197

5.2.3  meta类插件 203

5.3  containerd中CNI的使用 209

5.3.1  containerd中CNI的安装与部署 209

5.3.2  nerdctl使用CNI 210

5.3.3  CRI使用CNI 214

5.3.4  ctr使用CNI 215

第6章  containerd与容器存储 216

6.1 containerd中的数据存储 216

6.1.1  理解容器镜像 216

6.1.2  containerd中的存储目录 219

6.1.3  containerd中的镜像存储 222

6.1.4  containerd中的content 223

6.1.5  containerd中的snapshot 230

6.2  containerd镜像存储插件

snapshotter 234

6.2.1  Docker中的镜像存储管理

graphdriver 235

6.2.2  graphdriver与snapshotter 237

6.2.3  snapshotter概述 238

6.2.4  containerd中如何使用snapshotter 243

6.3  containerd支持的snapshotter 246

6.3.1  native snapshotter 246

6.3.2  overlayfs snapshotter 250

6.3.3  devmapper snapshotter 258

第7章  containerd核心组件解析 272

7.1 containerd架构总览 272

7.2  containerd API和Core 274

7.2.1  GRPC API 275

7.2.2  Services 289

7.2.3  Metadata 290

7.3  containerd Backend 293

7.3.1  containerd中的proxy plugins 294

7.3.2  containerd中的Runtime和shim 297

7.3.3  containerd shim规范 300

7.3.4  shim工作流程解析 306

7.4  containerd与NRI 309

7.4.1  NRI概述 310

7.4.2  NRI插件原理 311

7.4.3  containerd中启用NRI插件 319

7.4.4  containerd NRI插件示例 320

7.4.5  NRI插件的应用 322

第8章  containerd生产与实践 323

8.1  containerd监控实践 323

8.1.1  安装Prometheus 323

8.1.2 Prometheus上containerd的指标

采集配置 326

8.1.3  Grafana监控配置 330

8.1.4  配置containerd面板 330

8.2  基于containerd开发自己的

容器客户端 332

8.2.1  初始化Client 333

8.2.2  拉取镜像 334

8.2.3  创建OCI Spec 334

8.2.4  创建task 334

8.2.5  启动task 335

8.2.6  停止task 335

8.2.7  运行示例 336

8.3  开发自己的NRI插件 337

8.3.1  插件定义与接口实现 337

8.3.2  插件实例化与启动 339

8.3.3  插件的运行演示 339

书中前言/序言

创作背景

近几年,随着Kubernetes和容器技术的崛起,云原生已成为当下热门的技术话题。而Kubernetes也毫无疑问地成为容器编排领域的事实标准。容器运行时作为Kubernetes运行容器的关键组件,承担着管理进程的使命。起初Kubernetes支持的容器运行时是Docker,Docker client通过代码内嵌的方式集成在kubelet中。之后Kubernetes重新设计了CRI标准,使得各种容器运行时可以通过CRI协议接入Kubernetes。而之前通过硬编码形式嵌入kubelet中的Docker client,则逐渐迁移到CRI标准下(dockershim),并在Kubernetes 1.24版本中被彻底移除。

CRI支持的容器运行时有很多,其中containerd作为从Docker项目中分离出来的项目,由于经历了Docker多年生产环境的磨炼,相比其他CRI运行时更加健壮、成熟。正如containerd官网所言,“containerd是一个工业级标准的容器运行时,它强调简单性、健壮性和可移植性”。

Docker作为老牌的容器运行时,有很多相关的书籍和资料对其进行介绍,而containerd作为一个新兴的容器运行时,截至笔者著书之日,依然没有系统介绍它的书籍。作为一名云原生以及容器技术的忠实粉丝,笔者很早就接触到了containerd项目,并见证了containerd项目的发展,为containerd项目取得的成就感到骄傲,也对containerd项目充满了信心。因此,希望通过这本书,更多的人可以了解containerd,体验containerd带来的价值。

目标读者

本书的目标读者包括:

  云原生架构师。

  容器技术架构师。

  研发工程师。

  运维工程师。

  云计算和容器技术的爱好者。

本书内容

本书作为一本系统介绍云原生容器运行时containerd的书,将通过深入浅出的方式一步步介绍containerd的发展历史、依赖的技术背景、技术架构和原理等。

本书内容共分8章,每章的知识点如下。

  第1章:讲解云原生与容器运行时,介绍什么是云原生,云原生有什么价值,云原生与容器运行时有什么关系,以及Docker与Kubernetes的发展历史等,带读者了解containerd容器技术的发展与历史。

  第2章:讲解容器运行时的概念,从容器技术及其发展历史出发,为读者介绍容器的发展史,容器所依赖的Linux基础,容器运行时以及当前的容器运行时规    范等。

  第3章:讲解如何使用containerd,内容包括containerd的安装和部署,以及如何通过ctr和nerdctl两种cli工具操作containerd。

  第4章:讲解containerd与CRI,内容包括Kubernetes中的CRI机制及其演进、containerd中的CRI Plugin架构和配置,以及CRI客户端工具crictl的使用等。

  第5章:讲解containerd中的容器网络,主要从CNI规范、常见的CNI网络插件,以及如何在containerd中指定容器网络创建容器等方面展开介绍。

  第6章:讲解containerd和容器存储,重点介绍containerd是如何通过snapshotter管理容器镜像的。

  第7章:讲解containerd的核心组件,对containerd的架构进行剖析,根据containerd架构讲解组成containerd的各个模块,如API、Core以及Backend层的多个模块。

  第8章:讲解containerd生产与实践中的一些操作,如如何配置containerd的监  控,如何基于containerd做二次开发等。

读者服务

读者可以通过扫码访问本书专享资源官网,获取示例代码,加入读者群,下载最新学习资源或反馈书中的问题。

勘误和支持

由于笔者水平有限,书中难免会有疏漏和不妥之处,恳请广大读者批评指正。

致谢 

本书从构思、形成初稿,直到出版问世,得到了许多人的帮助。

首先要感谢的是我的妻子对我的支持,使我有足够的时间投入本书的写作中,并在写作的过程中给了我很大的鼓励和支持。

本书的大量内容源于我所参与的项目实践。诸多业务合作伙伴在使用我们的容器平台的过程中向我们提出了许多富有挑战的问题,是他们孜孜不倦的追求,深化了我对容器技术、containerd的理解,进而丰富了本书的内容。对此,向曾经一起合作的团队成员表示感谢。

最后,衷心感谢清华大学出版社王秋阳老师对本书进行细致的审阅和策划,让本书的架构更加完备,内容更加完整,并最终得以顺利出版。

笔者    

《containerd原理剖析与实战》全书速览

结束语

通过上文对Containerd的原理剖析和实战演示,我们可以看到Containerd是一个十分强大且灵活的容器运行时工具,它提供了丰富的API接口和命令行工具,方便用户对容器进行管理和监控。同时,Containerd的架构清晰,模块化程度高,使得其可以与其他容器管理工具无缝集成。如果你对容器管理和运行时有兴趣,Containerd绝对是一个值得学习和使用的工具,操练起来吧!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Atlas Vector Search:借助语义搜索和 AI 针对任何类型的数据构建智能应用

Atlas Vector Search已正式上线! Vector Search(向量搜索)现在支持生产工作负载,开发者可以继续构建由语义搜索和生成式人工智能驱动的智能应用,同时通过 Search Node(搜索节点)优化资源消耗并…

Android—— log的记忆

一、关键log 1.Java的 backtrace(堆栈log) 上述是一个空指针异常,问题出现在sgtc.settings,所以属于客户UI问题。 2.WindowManager(管理屏幕上的窗口和视图层次结构) 3.ActivityManager(管理应用程序生命周期和任务栈) 4.wifi操作 (1) 连接wifi&#…

2024深圳杯数学建模挑战赛C题:编译器版本的识别问题思路代码成品论文分析

更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓ https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 问题重述 深圳杯数学建模挑战赛2024C题:编译器版本的识别问题 作为一种重要的工具,电子…

【后端】python2和python3的安装与配置

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、python是什么二、python环境的安装与配置Python 2的安装与配置Python 3的安装与配置注意事项 三、总结 前言 随着开发语言及人工智能工具的普及&#xff0…

信息打点--公众号服务

微信公众号 获取微信公众号的途径https://weixin.sogou.com/ 微信公众号没有第三方服务 Github监控 人员&域名&邮箱 eg:xxx.cn password in:file https://gitee.com/ https://github.com/ https://www.huzhan.com/ 资源搜索 in:name test 仓库标题搜索含有…

Linux--内核移植(二)移植流程及驱动修改

本文来总结一下如何将 NXP 官方提供的 Linux 内核移植到正点原子的 I.MX6U-ALPHA 开发板上。 一、官方开发板内核测试 NXP 提供的 Linux 源码肯定是可以在自己的 I.MX6ULL EVK 开发板上运行下去的,所以我们肯定是以 I.MX6ULL EVK 开发板为参考&#xff0…

DFS与回溯专题:路径总和问题

DFS与回溯专题:路径总和问题 一、路径总和 题目链接: 112.路径总和 题目描述 代码思路 对二叉树进行dfs搜索,递归计算每条路径的节点值之和,当某个节点的左右子节点都为空时,说明已经搜索完成某一条路径&#xff0…

中北大学软件学院操作系统实验二进程调度算法

实验时间 2024年 4 月13日14时至16时 学时数 2 1.实验名称 实验二进程调度算法 2.实验目的 (1)加深对进程的概念及进程调度算法的理解; (2)在了解和掌握进程调度算法的基础上,编制进程调度算法通用程序,将调试结果显示在计算机屏幕上&am…

Android Perfetto 监控应用启动耗时

Perfetto 是一个 Google 开发的用于安卓系统性能监控和调试的工具,它旨在提供实时数据收集和可视化功能,帮助我们分析和优化应用程序的性能表现。Perfetto 可以捕获系统事件、CPU、内存、网络、GPU 等性能指标数据,并将其记录为轻量级的 Trac…

BBS前后端混合项目--03

展示 static/bootstrp # bootstrap.min.css /*!* Bootstrap v3.4.1 (https://getbootstrap.com/)* Copyright 2011-2019 Twitter, Inc.* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)*//*! normalize.css v3.0.3 | MIT License | github.com/n…

C语言学习/复习29--内存操作函数memcpy/memmove/memset/memcmp

一、内存操作函数 1.memcpy()函数 注意事项1:复制的数目以字节为单位 注意事项2:一定要保证有足够空间复制 模拟实现1 拷贝字符案例:由于拷贝时函数本事就以字节为单位拷贝所以该例子也可用于其他类型数据的拷贝。 模拟实现2 将自身的…

diffusion model 简单demo

参考自: Probabilistic Diffusion Model概率扩散模型理论与完整PyTorch代码详细解读 diffusion 简单demo 扩散模型之DDPM Diffusion model 原理剖析 张振虎-扩散概率模型 生成扩散模型漫谈(一):DDPM 拆楼 建楼 核心公式和逻辑 …

自适应STFT及其在地震时间行程自动拾取中的应用【附MATLAB代码】

文章来源:微信公众号:EW Frontie 摘要 在本文中,首先,我们提出的方法来产生高分辨率的短时傅里叶变换,通过计算最佳瞬时窗口长度。其次,利用生成的时频图提取瞬时走时属性,实现地震同相轴走时的…

vmstat命令详解

一、参数信息 vmstat 命令是用于报告虚拟内存统计信息的工具,常用于 Unix/Linux 系统上。它可以提供关于系统资源使用情况的详细信息,包括 CPU、内存、虚拟内存、磁盘、系统调用等方面的统计数据。以下是常见的 vmstat 命令参数的详解: vms…

k8s学习(三十六)centos下离线部署kubernetes1.30(单主节点)

文章目录 服务器准备工作一、升级操作系统内核1 查看操作系统和内核版本2 下载内核离线升级包3 升级内核4 确认内核版本 二、修改主机名/hosts文件1 修改主机名2 修改hosts文件 三、关闭防火墙四、关闭SELINUX配置五、时间同步1 下载NTP2 卸载3 安装4 配置4.1 主节点配置4.2 从…

2024商业地产五一劳动节健康大会朋克养生市集活动策划方案

2024商业地产五一劳动节健康大会朋克养生市集(带薪健康 快乐打工主题)活动策划方案 活动策划信息: 方案页码:53页 文件格式:PPT 方案简介: 打工不养生 赚钱养医生 期待已久的五一假期, …

WebSocket的原理、作用、常见注解和生命周期的简单介绍,附带SpringBoot示例

文章目录 WebSocket是什么WebSocket的原理WebSocket的作用全双工和半双工客户端【浏览器】API服务端 【Java】APIWebSocket的生命周期WebSocket的常见注解SpringBoot简单代码示例 WebSocket是什么 WebSocket是一种 通信协议 ,它在 客户端和服务器之间建立了一个双向…

开发环境中的调试视图(IDEA)

当程序员写完一个代码时必然要运行这个代码,但是一个没有异常的代码却未必满足我们的要求,因此就要求程序员对已经写好的代码进行调试操作。在之前,如果我们要看某一个程序是否满足我们的需求,一般情况下会对程序运行的结果进行打…

java泛型介绍

Java 泛型是 JDK 5 引入的一个特性,它允许我们在定义类、接口和方法时使用类型参数,从而使代码更加灵活和类型安全。泛型的主要目的是在编译期提供类型参数,让程序员能够在编译期间就捕获类型错误,而不是在运行时才发现。这样做提…

C语言学习/复习30--结构体的声明/初始化/typedef改名/内存对齐大小计算

一、自定义数据类型 二、结构体 1.结构体的定义(与数组相对比) 2.结构体全局/局部变量的定义 3.typedef对结构体改名 4.匿名结构体类型的声明 注意事项1: 匿名后必须立即创建结构体变量 、 5.结构体与链表节点定义 注意事项1&…