Containerd 是 Kubernetes 默认的标准 CRI 运行时环境,被 Kubernetes, Docker 等各种项目使用。也是 CNCF 唯一的容器运行时。Docker 在最近这些年 ,没有太多新特性引入,而更轻量的 containerd 正在蓬勃发展。 Docker公司 正在衰落,Containerd 将继承衣钵,成为未来容器引擎的实施标准。
Containerd 的使用情况
Containerd 并非一个 全新技术,它是由 Docker 公司开源,作为 docker 的核心组件存在。根据社区中的几个托管服务和开源项目使用的统计,到 2020 年止 Containerd 的使用 (包含在 Docker 中使用) 占容器使用的 83%。
根据 Sysdig 的统计数据,从 2019 年 到 2020 年,conatinerd 的独立使用率,上升了 2倍。上升趋势明显。
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倍。
支持加密镜像
可以把镜像加密后上传到镜像仓库, 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
。
结尾
原文作者“张世明”是 任职 DaoCloud 研发团队的 天才青年,在过去的 半年,在 containerd 社区 排名第八的贡献者。
感谢“胖橘“对本文的润色加工。
各位观众老爷,您是否看好 containerd 呢?