3 个不稳定版本
0.2.0 | 2023年1月31日 |
---|---|
0.1.1 | 2022年11月8日 |
0.1.0 | 2022年6月18日 |
#7 在 #content-addressable
4,278 每月下载量
在 2 个 crate 中使用(通过 dbs-virtio-devices)
1.5MB
30K SLoC
[⬇️ 下载] [📖 网站] [☸ 快速入门 (Kubernetes)] [🤓 快速入门 (nerdctl)] [❓ 常见问题 & 故障排除]
Nydus:Dragonfly 容器镜像服务
简介
Nydus 在 RAFS 格式上实现内容可寻址文件系统,通过提高容器启动速度、镜像空间和网络带宽效率以及数据完整性来增强当前的 OCI 图像规范。
以下基准测试结果表明,Nydus 图像在 Containerd 上的容器冷启动耗时方面显著优于 OCI 图像,尤其是在 OCI 图像大小增加时。
原则
提供快速、安全且易于访问的数据分发
- 性能:二级容器启动速度,毫秒级功能计算代码包加载速度。
- 低成本:用内存安全语言
Rust
编写,众多优化有助于提高内存、CPU 和网络消耗。 - 灵活:支持运行时如 runC 和 Kata,并提供 Confidential Containers 和漏洞扫描功能
- 安全:端到端数据完整性检查,运行时可以检测并避免供应链攻击。
主要功能
- 按需加载:容器镜像/包以块为单位按需下载,以提高启动速度。
- 块级去重:在跨层或跨图像级别进行块级数据去重,以减少存储、传输和内存成本。
- 兼容生态系统:存储后端支持与注册表、对象存储服务(OSS)、网络附加存储(NAS)、共享磁盘以及P2P服务。兼容OCI镜像,并提供原生的eStargz镜像支持。
- 数据可分析性:记录访问、数据布局优化、预取、I/O放大、异常行为检测。
- POSIX兼容性:内核中的EROFS或FUSE文件系统与overlayfs结合提供完整的POSIX兼容性。
- I/O优化:使用合并的文件系统树、数据预取和用户I/O放大以降低读延迟并提高用户I/O性能。
生态系统
Nydus工具
工具 | 描述 |
---|---|
nydusd | Nydus用户空间守护进程,它处理来自内核的所有fscache/FUSE消息,并解析Nydus镜像以满足这些请求 |
nydus-image | 将OCI格式容器镜像的单层转换为Nydus格式容器镜像,分别生成元数据文件和数据文件 |
nydusify | 它拉取OCI镜像并解包,调用nydus-image create 进行转换,然后将转换后的镜像推送到注册表和数据存储 |
nydusctl | Nydusd CLI客户端(nydus-image inspect ),查询守护进程的工作状态/指标并对其进行配置 |
ctr-remote | 增强的containerd CLI工具,使containerd ctr支持Nydus |
nydus-docker-graphdriver | [实验性] 作为docker 远程图驱动器,控制镜像和容器的存储和管理方式 |
nydus-overlayfs | Containerd 挂载助手,通过稍微调整挂载选项来调用overlayfs挂载。因此,可以将Nydus先决条件传递给基于虚拟机的运行时 |
nydus-backend-proxy | 一个简单的HTTP服务器,将本地目录作为Nydusd的blob后端提供服务 |
支持的平台
类型 | 平台 | 描述 | 状态 |
---|---|---|---|
存储 | 注册表/OSS/S3/NAS | 支持与Docker Hub、Harbor、Github GHCR、阿里云ACR、NAS和类似阿里云OSS的对象存储服务兼容的OCI兼容分发实现 | ✅ |
存储/构建 | Harbor | 为Harbor提供通用服务,支持基于Nydus和eStargz等加速器进行加速镜像转换 | ✅ |
分发 | Dragonfly | 通过Dragonfly P2P数据分发系统进一步提高Nydus镜像的运行时性能 | ✅ |
构建 | Buildkit | 提供从Dockerfile直接构建和导出Nydus镜像的能力 | ✅ |
构建/运行时 | Nerdctl | 容器d客户端,用于构建或运行(需要nydus snapshotter)Nydus镜像 | ✅ |
运行时 | Docker / Moby | 使用containerd和nydus-snapshotter在Docker容器中运行Nydus镜像 | ✅ |
运行时 | Kubernetes | 使用CRI接口运行Nydus镜像 | ✅ |
运行时 | Containerd | Nydus Snapshotter,一个容器d远程插件,用于运行Nydus镜像 | ✅ |
运行时 | CRI-O / Podman | 使用CRI-O或Podman运行Nydus镜像 | 🚧 |
运行时 | KataContainers | 作为原生解决方案在KataContainers中运行Nydus镜像 | ✅ |
运行时 | EROFS | 直接在内核中的EROFS中运行Nydus镜像以进一步提高性能 | ✅ |
构建
构建二进制文件
# build debug binary
make
# build release binary
make release
# build static binary with docker
make docker-static
构建Nydus镜像
将OCIv1镜像转换为Nydus镜像:Nydusify、Acceld或Nerdctl。
直接从Dockerfile构建Nydus镜像:Buildkit。
从各种来源构建Nydus层:Nydus Image Builder。
镜像预取优化
为了进一步减少容器启动时间,可以使用 NRI 插件(containerd >=1.7)构建带有预取列表的 nydus 镜像:容器镜像优化器
运行
快速入门
有关如何在 Kubernetes 节点或本地使用 nydus-snapshotter
和 nydus 镜像懒惰地启动容器以及不使用 CRI 的详细信息,请参阅 Nydus 设置
运行 Nydus Snapshotter
Nydus-snapshotter 是 containerd 的非核心子项目。
从 Nydus-snapshotter 仓库 中查看其代码和教程。它作为一个 containerd
远程快照器,帮助设置带有 nydus 镜像的容器根文件系统,在必要时处理 nydus 镜像格式。在没有 nydus 镜像运行时,它与 containerd 内置的 overlayfs 快照器相同。
运行 Nydusd 守护进程
通常,用户不需要手动启动 nydusd
。当准备容器根文件系统时,它将由 nydus-snapshotter
启动。
运行 Nydusd 守护进程以提供 Nydus 镜像:Nydusd。
使用内核 EROFS 文件系统运行 Nydus
从 Linux 5.16 开始,内核 EROFS 已完全兼容 RAFS v6 镜像格式。换句话说,从那时起,未压缩的 RAFS v6 镜像可以挂载到块设备。
自 Linux 5.19 以来,EROS 已添加了一个新的基于文件的缓存(fscache)后端。通过这种方式,压缩的 RAFS v6 镜像可以与 fscache 子系统直接挂载,即使这些镜像部分可用。也可以实时转换 estargz
并以这种方式挂载。
关于使用 fscache 运行 Nydus 的指南:Nydus-fscache
使用 Dragonfly P2P 系统运行 Nydus
Nydus 与 Dragonfly P2P 系统深度集成,可以大大降低注册服务器网络延迟和单点压力。生产环境中的基准测试结果表明,使用 Dragonfly 可以将网络延迟降低超过 80%,要了解性能结果和集成步骤,请参阅 nydus 集成。
如果您想通过 Helm 同时部署 Dragonfly 和 Nydus,请参阅 快速入门。
直接使用 Nydus 运行 OCI 镜像
Nydus 能够从现有的 OCI 镜像中快速生成一个名为 nydus zran
的小型工件。此工件可以用于加速容器启动时间,无需进行完整的镜像转换。有关更多信息,请参阅 文档。
使用 Docker(Moby) 运行
Nydus 提供了多种方法来支持在 docker(Moby) 上运行,请参阅 Nydus 在 Docker(Moby) 环境中的设置。
在 macOS 上运行
Nydus 还可以使用 macfuse(也称为 osxfuse)运行。有关更多详细信息,请阅读 Nydus 在 macOS 上的运行。
运行 eStargz 镜像(带有懒惰拉取)
容器d远程快照插件nydus-snapshotter可用于运行nydus镜像,或通过添加--enable-stargz
命令行选项直接运行eStargz镜像。
将来,zstd::chunked
也可以这样工作。
运行Nydus服务
在您的项目中直接使用nydus的键特性,无需故意准备和调用nydusd
,nydus-service帮助复用nydus的核心服务。
文档
社区
Nydus旨在为所有社区提供一个厂商中立的开源镜像分发解决方案。问题、错误报告、技术讨论、功能请求和贡献总是受欢迎的!
我们非常乐意在任何时候了解您的用例。请随时通过Slack或钉钉联系我们。
-
Slack: Nydus Workspace
-
Twitter: @dragonfly_oss
-
Dingtalk: 34971767
依赖项
~18–37MB
~593K SLoC