Containerd 是 Kubernetes 默认的标准 CRI 运行时环境,被 Kubernetes, Docker 等各种项目使用。也是 CNCF 唯一的容器运行时。Docker 在最近这些年 ,没有太多新特性引入,而更轻量的 containerd 正在蓬勃发展。 Docker公司 正在衰落,Containerd 将继承衣钵,成为未来容器引擎的实施标准。
![](./wp-content/uploads/2021/06/containerd-architecture-1024x621.png)
Containerd 的使用情况
Containerd 并非一个 全新技术,它是由 Docker 公司开源,作为 docker 的核心组件存在。根据社区中的几个托管服务和开源项目使用的统计,到 2020 年止 Containerd 的使用 (包含在 Docker 中使用) 占容器使用的 83%。
![](./wp-content/uploads/2021/06/企业微信截图_16234983158073-1024x413.png)
根据 Sysdig 的统计数据,从 2019 年 到 2020 年,conatinerd 的独立使用率,上升了 2倍。上升趋势明显。
![](./wp-content/uploads/2021/06/企业微信截图_16234985914716-1024x370.png)
Containerd 1.5 的一些新特性
最近的Containerd 1.5 以于2021年5月4日发布。这是 Containerd的第6个主要版本包括许多稳定性改进, 以及代码组织结构的变化使后续开发更方便。该版本默认启用支持 OCI crypt 解密,并引入了对zstd、NRI 和 FreeBSD 的实验性支持,还包括CRI插件纳入主容器库和切换到Go modules。
更好的压缩算法支持
现在除了 gzip 之外,还支持 zstd 作为镜像压缩算法。zstd 是 Facebook 在2016年开源的新无损压缩算法,优点是压缩率和压缩/解压缩性能都很突出。
zstd 的设计目的是达到与 deflate 算法(开发于1991年,用于gzip) 相当的压缩比, 并且更快,尤其是解压的时候。
zstd 在其最大压缩级别的压缩比接近 lzma、lzham 和 ppmx,并且比 lza 和 bzip2 性能更好。它的解压速度比任何当前可用的算法都快,并且压缩比更好。
zstd 的
基准测试结果 在速度方面,在最快模式下,它的速度通常是 stdlib deflate/gzip 2倍。
![](./wp-content/uploads/2021/06/GJQ_1wCBa0G6DvoDACqDn0MAAAAAbj0JAAAB.jpg)
支持加密镜像
可以把镜像加密后上传到镜像仓库, Containerd 只需要配置解码的 key 就可以运行这加密的镜像, 对于一些对于安全性有需求的镜像可以使用这种方式。
自从 Containerd 1.3 加入该功能后,已支持容器使用 加密镜像 (OCI crypt) 但是一直并没有启用该功能。
该特性将在 1.5 中已经默认启用,使用方法请参见文档 (依赖的二进制文件包含在 cri-containerd-cni-1.5.0-linux-amd64.tar.gz )
注意:当前 Docker 是不支持 OCI crypt 的,因为 Docker 目前还没有使用 Containerd 管理镜像。
节点资源接口
节点资源接口(NRI) 用于 CPU 调度约束和内存配额的标准接口。
其类似容器网络接口(CNI)的基本接口、概念和插件设计是一种处理容器网络堆栈的多种实现的优雅方式。此概念可用于其他接口,以定制容器的运行时环境。节点资源接口(NRI)是一个新的接口,其实带有结构化API和容器插件设计,用对节点上的资源进行管理。与 CNI 相同 NRI 插件将在容器创建完毕, 但是还没有真正启动之前的初始化时被调用。
可以看示例代码了解 NRI 的使用。
支持 FreeBSD
现在支持在 FreeBSD 运行 Containerd,容器运行时 OCI 是使用 FreeBSD jails (Samuel Karp 的 runj
)。文件系统目前仅支持 ZFS, 后续计划支持 unionfs
。
![](./wp-content/uploads/2021/06/1_Wu1CiRsPaGoiqNaeLJrWVg.png)
结尾
原文作者“张世明”是 任职 DaoCloud 研发团队的 天才青年,在过去的 半年,在 containerd 社区 排名第八的贡献者。
感谢“胖橘“对本文的润色加工。
各位观众老爷,您是否看好 containerd 呢?