Containerd 1.5 于 2021 年 5 月 4 日发布。这是 Containerd 的第 6 个主要版本,包括许多稳定性改进, 以及代码组织结构变化,使后续开发更方便。该版本默认启用支持 OCI crypt 解密,并引入了对 zstd、NRI 和 FreeBSD 实验性支持还包括将 CRI 插件纳入主容器库和切换到 Go modules。Containerd 相对于 Docker 更轻量,也更先进。
🔗 详细设计稿参考:
https://static.sched.com/hosted_files/kccnceu2021/d3/containerd-KubeConEU2021.pdf
重要功能
|支持加密镜像
可以把镜像加密后上传到镜像仓库, Containerd 只需要配置解码的 key 就可以运行这加密的镜像, 对于一些对于安全性有需求的镜像可以使用这种方式。
自从 Containerd 1.3 加入该功能后,已支持容器使用加密镜像 「OCI crypt」但是一直并没有启用该功能。
该特性将在 1.5 中已经默认启用,使用方法请参见文档 「依赖的二进制文件包含在 cri-containerd-cni-1.5.0-linux-amd64.tar.gz」
注意:当前 Docker 是不支持 OCI crypt 的,因为 Docker 目前还没有使用 Containerd 管理镜像。
|1.1 全局启用
在 /etc/containerd/config.toml 中增加如下配置并手动重启 Containerd 服务。
在本例中,容器镜像解码被设置为使用 Node 上的密钥,配置参数 –decryption-keys-path 以指定解密密钥在 Node 中的路径。
$OCICRYPT_KEYPROVIDER_CONFIG 环境变量用于 OCI crypt keyprovider protocol。
| 1.2 单独启用
可以使用如下所示的配置文件启动一个新的 Containerd。为了避免对当前安装的 Containerd 的干扰,我们使用 /tmp 作为目录。
创建 /tmp/etc/containerd/config.toml 配置, 并启动 Containerd。
使用 openssl 命令行工具创建 RSA 密钥对,并对镜像进行加密:
启动一个支持加密镜像的最新版本的本地镜像仓库,这样我们就可以将加密的镜像推送进去。
将加密镜像推入本地镜像仓库,使用 ctr-enc 拉取镜像,然后运行镜像。
|节点资源接口
节点资源接口 「NRI」 用于 CPU 调度约束和内存配额的标准接口。
其类似容器网络接口 「CNI」 的基本接口、概念和插件设计是一种处理容器网络堆栈的多种实现的优雅方式。此概念可用于其他接口,以定制容器的运行时环境。节点资源接口(NRI)是一个新的接口,其实带有结构化API和容器插件设计,用对节点上的资源进行管理。与 CNI 相同 NRI 插件将在容器创建完毕, 但是还没有真正启动之前的初始化时被调用。
可以看示例代码 「https://github.com/containerd/nri#sample-plugin」 了解 NRI 的使用。
| 2.1 如何配置自己的 NRI 插件呢
配置分为两个部分。一个是特定于插件调用的可执行文件,而第二个是指定要运行哪些插件并为插件提供额外配置。
插件可执行文件路径可以通过用户配置,但默认为 /opt/nri/bin。二进制文件以其类型命名为二进制名称,与 CNI 插件命名方案相同。
配置的默认路径是 /etc/nri/resource.d/*.conf 。
|2.2 插件的工作原理
插件的输入输出是通过 STDIN/STDOUT 其格式是 JSON。
- 输入示例
- 输出示例
| 更好的压缩算法支持
现在除了 gzip 之外,还支持 zstd 作为镜像压缩算法。zstd 是 Facebook 在 2016 年开源的新无损压缩算法,优点是压缩率和压缩/解压缩性能都很突出。
zstd 的设计目的是达到与 deflate 算法 「开发于1991年,用于gzip」 相当的压缩比, 并且更快,尤其是解压的时候。
zstd 在其最大压缩级别的压缩比接近 lzma、lzham 和 ppmx,并且比 lza 或 bzip2 性能更好。它的解压速度比任何当前可用的算法都快,并且压缩比更好。
zstd 的基准测试结果在速度方面,在最快模式下,它的速度通常是 stdlib deflate/gzip 2倍。
🔗 图片来源:
|支持 FreeBSD
现在支持在 FreeBSD 运行 Containerd,容器运行时 OCI 是使用 FreeBSD jails 「Samuel Karp 的 runj」。文件系统目前仅支持 ZFS, 后续计划支持 unionfs。
🔗 图片来源:
https://medium.com/nttlabs/containerd15-fe0a9845a572
|其他改变|
- CRI 插件合并入主库,以简化代码贡献流程
- 使用 Go modules 管理依赖版本
- 支持 JSON 格式的日志输出
未经允许不得转载:DaoCloud道客博客 » Containerd 1.5 震撼发布| 支持加密的容器引擎