
如何在 Anolis 8上部署 Nydus 镜像加速方案? 原创
在上一篇文章中详细介绍 Anolis OS 是首个原生支持镜像加速 Linux 内核,Nydus 镜像加速服务重新优化了现有的 OCIv1 容器镜像格式,重新定义镜像的文件系统,数据与元数据分离,实现按需加载,本文作为使用 Nydus 的教程将详细介绍在 Anolis OS 上部署 Nydus 的过程,以帮助用户熟悉 Nydus 的基本使用方法。
一、部署环境
本教程中使用的是阿里云上购买的 EC2 虚拟机,您也可以在本地或其他云环境中部署 Nydus。
操作系统:Anolis OS 8.4 (ANCK 64位)
内核版本:Linux 4.19
CPU:2 vCPU@3.5GHz
内存:8GB
软件依赖:Nydus 当前仅支持 Containerd,因此在需要使用 containerd 作为容器引擎
龙蜥安装使用 containerd 的方法。
二、安装 Nydus
龙蜥社区已经集成 Nydus 最新 Stable 稳定版本,推荐使用龙蜥集成的软件包安装 Nydus。如果需要安装指定版本的 Nydus,可以下载上游开源版本的代码包安装(以下两种安装方式任选一种即可)。
2.1 使用龙蜥集成的软件包
2.2 使用上游开源版本
下载 Nydus 的可执行文件。
从发布页面(见文末链接1)获取最新的压缩包,并解压。
下载 Nydus Snapshotter 的可执行文件。
从发布页面(见文末链接2)获取最新的压缩包,并解压。
选择 Nydus 运行模式。
Nydus 加速框架支持了三种运行模式,以支持不同场景下的镜像按需加载:
- 通过 FUSE 提供给 RunC 这类容器运行时的按需加载能力,也是 Nydus 目前最常用的模式;
- 通过 VirtioFS 承载 FUSE 协议,支持基于 VM 的容器运行时,例如 Kata 等,为 VM Guest 里的容器提供 RootFS 按需加载能力;
- 通过内核态的 EROFS 只读文件系统提供 RootFS,目前 Nydus 的 EROFS 格式支持已经进入了 Linux 5.16 主线,其内核态缓存方案 erofs over fscache 也已经合入 Linux 5.19-rc1 主线,内核态方案可以减少上下文切换及内存拷贝开销,在性能有极致要求的情况下可以用这种模式。
由于第一种模式的环境依赖最少,比较适合演示。因此在这里我们选择 fuse 模式,将 nydusd 二进制文件中的 nydusd-fusedev 重命名为 nydusd。
安装可执行文件。
三、启动 Nydus Snapshotter
3.1 写入配置文件
Nydus 提供了一个容器化的远程快照管理器 containerd-nydus-grpc 来准备容器 rootfs 与 nydus 格式的镜像。要启动它,首先将 nydusd 配置保存到 /etc/nydusd-config.json:
3.2 启动远程快照管理器
新开一个终端运行 containerd-nydus-grpc。
cache-dir参数表示本地 blob 缓存根目录,如果未设置,会默认为root+ "/cache"。它会覆盖 nydusd-config.json 中的 device.cache.config.work_dir。
四、配置 Containerd
4.1 将以下内容添加到 containerd 配置中(默认为/etc/containerd/config.toml):
4.2 重新启动 Contained。
配置更新后需要重启 Contained 服务。
五、启动 Nydus 镜像格式的容器
这里展示如何使用 crictl 启动一个 Nydus 镜像格式的容器。
5.1 编写 sandbox yaml 文件 nydus-sandbox.yaml,往 POD 中传递 Nydus annotation。
5.2 编写容器 yaml 文件 nydus-container.yaml,指定使用的容器镜像。
这里我们使用了龙蜥云原生镜像仓库中已经集成的 Anolis 8.6 的镜像作为测试镜像。 5.3 拉取镜像并启动容器。
这里可以看到,采用 Nydus 镜像仅使用 2 秒便完成了容器镜像的拉取和容器启动的过程。在同等的条件下,我们创建一个 OCIv1 的镜像对比一下,使用的依然是 anolis 8.6 的镜像,镜像的内容与上述使用的 nydus 完全一致。yaml 文件编写如下:
采用如下的命令:
可以看到,同等环境下,使用 OCIv1 镜像格式启动 Anolis 8.6 的版本需要10 秒,是 Nydus 的 5 倍。
六、转换并启动 Nydus 镜像
这里展示转换 Nydus 镜像并推送到您的镜像仓库中去,为了能够登录镜像仓库,我们采用 nerdctl 工具进行配置。
6.1 安装 Nerdctl 和 CNI plugin。
Nerdctl 是一种与 docker 兼容的命令行,但是由于它能够支持启动 Nydus 镜像,因此我们在这里选择使用 Nerdctl。由于容器在运行中可能需要依赖一些插件,所以我们同时安装 CNI plugin。
使用 nerdctl login 进行登录,用于仓库认证,当然,您可以采用 docker login 方式登录。
6.2 将镜像转换为 Nydus 格式,并推送至远程镜像仓库。
按照操作完成以上步骤,恭喜,您已经成功在 Anolis OS 上完成了 Nydus 镜像加速方案的部署!如果后续还有疑问,请扫描下方二维码或搜索钉钉群号(44701621)入群交流。
参考链接:
1. Nydus软件包发布页面:
https://github.com/dragonflyoss/image-service/releases/latest
2.containerd 下 nydus snapshotter 发布页面:
https://github.com/containerd/nydus-snapshotter/releases/tag/v0.2.4
3. Nydus 的更多技术细节:
https://developer.aliyun.com/article/971522
4.Nydus 更详细的部署说明:
https://github.com/dragonflyoss/image-service/blob/master/docs/containerd-env-setup.md
—— 完 ——
加入社群
加入微信群:添加社区助理-龙蜥社区小龙(微信:openanolis_assis),备注【龙蜥】与你同在;加入钉钉群:扫描下方钉钉群二维码。欢迎开发者/用户加入龙蜥社区(OpenAnolis)交流,共同推进龙蜥社区的发展,一起打造一个活跃的、健康的开源操作系统生态!
关于龙蜥社区
龙蜥社区(OpenAnolis)由企事业单位、高等院校、科研单位、非营利性组织、个人等在自愿、平等、开源、协作的基础上组成的非盈利性开源社区。龙蜥社区成立于 2020 年 9 月,旨在构建一个开源、中立、开放的Linux 上游发行版社区及创新平台。龙蜥社区成立的短期目标是开发龙蜥操作系统(Anolis OS)作为 CentOS 停服后的应对方案,构建一个兼容国际 Linux 主流厂商的社区发行版。中长期目标是探索打造一个面向未来的操作系统,建立统一的开源操作系统生态,孵化创新开源项目,繁荣开源生态。
目前,Anolis OS 8.6 已发布,更多龙蜥自研特性,支持 X86_64 、RISC-V、Arm64、LoongArch 架构,完善适配 Intel、兆芯、鲲鹏、龙芯等芯片,并提供全栈国密支持。
欢迎下载:https://openanolis.cn/download
加入我们,一起打造面向未来的开源操作系统!https://openanolis.cn
