3 个版本 (破坏性更新)
0.3.0 | 2023 年 6 月 17 日 |
---|---|
0.2.0 | 2023 年 2 月 24 日 |
0.1.0 | 2023 年 2 月 14 日 |
#615 in 文件系统
每月 251 次下载
用于 nydus-rs
1.5MB
37K SLoC
nydus-service
nydus-service 库帮助您复用 nydus 的核心服务,使您能够优雅且简单地集成 nydus 服务到您的项目中。它提供了
- fuse 服务
- virtio-fs 服务
- fscache 服务
- blobcache 服务
它还提供了 nydus 守护进程和守护进程控制器,以帮助管理这些服务。
为什么你需要
您应该知道 nydusd
作为守护进程运行,以暴露一个 FUSE 挂载点,一个 Virtio-FS 挂载点,或一个 EROFS 挂载点,以便容器在虚拟机内部访问,并提供了以下关键特性:
- 容器镜像按需下载
- 块级别数据去重
- 平坦图像元数据和数据以移除所有中间层
- 在构建容器镜像时仅保存可用的图像数据
- 在运行容器时仅下载可用的图像数据
- 端到端图像数据完整性
- 兼容 OCI 艺术品规范和分发规范
- 集成现有 CNCF 项目 Dragonfly,以支持在大集群中的图像分发
- 支持不同的容器镜像存储后端
如果您想在项目中以原生方式使用这些功能,而不需要专门准备和调用 nydusd
,那么 nydus-service
正是为此而生的。
如何使用
例如,使用 nydus-service
在三个步骤中重用 fuse 服务。
准备配置:
{
"device": {
"backend": {
"type": "registry",
"config": {
"scheme": "",
"skip_verify": true,
"timeout": 5,
"connect_timeout": 5,
"retry_limit": 4,
"auth": "YOUR_LOGIN_AUTH="
}
},
"cache": {
"type": "blobcache",
"config": {
"work_dir": "cache"
}
}
},
"mode": "direct",
"digest_validate": false,
"iostats_files": false,
"enable_xattr": true,
"fs_prefetch": {
"enable": true,
"threads_count": 4
}
}
创建守护进程:
static ref DAEMON_CONTROLLER: DaemonController = DaemonController::default()
let cmd = FsBackendMountCmd {
fs_type: FsBackendType::Rafs,
// Bootstrap path
source: bootstrap,
// Backend config
config,
// Virutal mountpoint
mountpoint: "/".to_string(),
// Prefetch files
prefetch_files: None,
};
let daemon = {
create_fuse_daemon(
// Mountpoint for the FUSE filesystem, target for `mount.fuse`
mountpoint,
// Vfs associated with the filesystem service object
vfs,
// Supervisor
None,
// Service instance identifier
id,
// Number of working threads to serve fuse requests
fuse_threads,
// daemon controller's waker
waker,
// Path to the Nydus daemon administration API socket
Some("api_sock"),
// Start Nydus daemon in upgrade mode
upgrade,
// Mounts FUSE filesystem in rw mode
!writable,
// FUSE server failover policy
failvoer-policy,
// Request structure to mount a backend filesystem instance
Some(cmd),
BTI.to_owned(),
)
.map(|d| {
info!("Fuse daemon started!");
d
})
.map_err(|e| {
error!("Failed in starting daemon: {}", e);
e
})?
};
DAEMON_CONTROLLER.set_daemon(daemon);
启动守护进程控制器:
thread::spawn(move || {
let daemon = DAEMON_CONTROLLER.get_daemon();
if let Some(fs) = daemon.get_default_fs_service() {
DAEMON_CONTROLLER.set_fs_service(fs);
}
// Run the main event loop
if DAEMON_CONTROLLER.is_active() {
DAEMON_CONTROLLER.run_loop();
}
// Gracefully shutdown system.
info!("nydusd quits");
DAEMON_CONTROLLER.shutdown();
});
然后,您可以在您的项目中充分利用 nydus 服务。
支持
平台:
- x86_64
- aarch64
操作系统:
- Linux
许可证
此代码根据 Apache-2.0 或 BSD-3-Clause 许可。
依赖项
~16–36MB
~595K SLoC