3 个版本 (破坏性更新)
0.3.0 | 2023 年 8 月 10 日 |
---|---|
0.2.0 | 2023 年 4 月 14 日 |
0.1.0 | 2021 年 12 月 17 日 |
#1114 在 异步
61 次每月下载
36KB
351 行
containerd 的远程快照扩展
Snapshots crate 实现了 containerd 的代理插件以进行快照。它旨在隐藏底层 GRPC 接口、流和请求/响应转换的复杂性,并提供一个 Snapshots
特性以实现。
代理插件
代理插件使用 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