前言

创作背景

近几年,随着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的理解,进而丰富了本书的内容。对此,向曾经一起合作的团队成员表示感谢。

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

笔者