3 个版本 (破坏性更新)

0.3.0 2023 年 8 月 10 日
0.2.0 2023 年 4 月 14 日
0.1.0 2021 年 12 月 17 日

#1114异步

Download history 23/week @ 2024-03-09 24/week @ 2024-03-16 17/week @ 2024-03-23 52/week @ 2024-03-30 39/week @ 2024-04-06 49/week @ 2024-04-13 33/week @ 2024-04-20 32/week @ 2024-04-27 19/week @ 2024-05-04 11/week @ 2024-05-11 13/week @ 2024-05-18 19/week @ 2024-05-25 37/week @ 2024-06-01 22/week @ 2024-06-08 2/week @ 2024-06-15

61 次每月下载

Apache-2.0

36KB
351

containerd 的远程快照扩展

Crates.io docs.rs Crates.io CI

Snapshots crate 实现了 containerd 的代理插件以进行快照。它旨在隐藏底层 GRPC 接口、流和请求/响应转换的复杂性,并提供一个 Snapshots 特性以实现。

containerd 文档

代理插件

代理插件使用 containerd 的配置文件进行配置,并在 containerd 启动时与内部插件一起加载。这些插件通过为 containerd 的 GRPC API 服务之一提供本地套接字连接到 containerd。每个插件都配置了一个类型和名称,就像内部插件一样。

如何在 containerd 中使用

将以下内容添加到 containerd 的配置文件中

[proxy_plugins]
  [proxy_plugins.custom]
    type = "snapshot"
    address = "/tmp/snap2.sock"

启动守护进程并尝试使用 custom 快照器拉取镜像

# Start containerd daemon
$ containerd --config /path/config.toml

# Run remote snapshotter instance
$ cargo run --example snapshotter /tmp/snap2.sock

# Now specify the snapshotter when pulling an image
$ ctr i pull --snapshotter custom docker.io/library/hello-world:latest

入门

快照器需要实现 Snapshotter 特性(该特性与 containerd 的 Snapshotter 接口非常相似)。

#[derive(Default)]
struct Example;

#[snapshots::tonic::async_trait]
impl snapshots::Snapshotter for Example {
    type Error = ();

    async fn stat(&self, key: String) -> Result<Info, Self::Error> {
        info!("Stat: {}", key);
        Ok(Info::default())
    }

    // ...

    async fn commit(
        &self,
        name: String,
        key: String,
        labels: HashMap<String, String>,
    ) -> Result<(), Self::Error> {
        info!("Commit: name={}, key={}, labels={:?}", name, key, labels);
        Ok(())
    }
}

该库提供了 snapshots::server 以方便将实现包装到 GRPC 服务器中,以便可以使用 tonic 如此使用


use snapshots::tonic::transport::Server;

Server::builder()
    .add_service(snapshots::server(example))
    .serve_with_incoming(incoming)
    .await
    .expect("Serve failed");

依赖关系

~8.5MB
~149K SLoC