4 releases
| 1.0.0 |
|
|---|---|
| 0.2.0 | Jan 6, 2026 |
| 0.1.4 | Oct 29, 2024 |
| 0.1.2 | Oct 26, 2024 |
| 0.1.1 | Oct 9, 2024 |
#13 in #kubernetes-client
Used in fleetmod
22KB
cri-api
本项目基于k8s-cri。 在此基础上,只支持v1规范,并完善examples,以方便用户开发使用。
研制计划
lib.rs:
Examples
Connecting over TCP:
use cri_api::v1::runtime_service_client::RuntimeServiceClient;
use cri_api::v1::ListContainersRequest;
use tokio::main;
#[tokio::main]
async fn main() {
let mut client = RuntimeServiceClient::connect("http://[::1]:50051")
.await
.expect("Could not create client.");
let request = tonic::Request::new(ListContainersRequest { filter: None });
let response = client
.list_containers(request)
.await
.expect("Request failed.");
println!("{:?}", response);
}
Connecting to a Unix domain socket:
use std::convert::TryFrom;
use tokio::main;
use cri_api::v1::runtime_service_client::RuntimeServiceClient;
use tokio::net::UnixStream;
use tonic::transport::{Channel, Endpoint, Uri};
use tower::service_fn;
#[tokio::main]
async fn main() {
let path = "/run/containerd/containerd.sock";
let channel = Endpoint::try_from("http://[::]")
.unwrap()
.connect_with_connector(service_fn(move |_: Uri| UnixStream::connect(path)))
.await
.expect("Could not create client.");
let mut client = RuntimeServiceClient::new(channel);
}
List sandboxes
use cri_api::v1::{ListPodSandboxRequest};
use cri_api::v1::runtime_service_client::RuntimeServiceClient;
use tokio::net::UnixStream;
use tonic::transport::{Endpoint, Uri};
use tower::service_fn;
use tokio::main;
#[tokio::main]
async fn main() {
let mut client = RuntimeServiceClient::new(channel);
let request = ListPodSandboxRequest {
filter: None
};
let response = client.list_pod_sandbox(request).await;
println!("{:#?}", response);
}
List containers
use cri_api::v1::{ListContainersRequest};
use cri_api::v1::runtime_service_client::RuntimeServiceClient;
use tokio::net::UnixStream;
use tonic::transport::{Endpoint, Uri};
use tower::service_fn;
use tokio::main;
#[tokio::main]
async fn main() {
let path = "/run/containerd/containerd.sock";
let channel = Endpoint::try_from("http://[::]")
.unwrap()
.connect_with_connector(service_fn(move |_: Uri| UnixStream::connect(path)))
.await
.expect("Could not create client.");
let mut client = RuntimeServiceClient::new(channel);
let request = ListContainersRequest {
filter: None
};
let response = client.list_containers(request).await;
println!("{:#?}", response);
}
Container Stats
use cri_api::v1::{ListContainersRequest, ContainerStatsRequest};
use cri_api::v1::runtime_service_client::RuntimeServiceClient;
use tokio::net::UnixStream;
use tonic::transport::{Endpoint, Uri};
use tower::service_fn;
use tokio::main;
#[tokio::main]
async fn main() {
let path = "/run/containerd/containerd.sock";
let channel = Endpoint::try_from("http://[::]")
.unwrap()
.connect_with_connector(service_fn(move |_: Uri| UnixStream::connect(path)))
.await
.expect("Could not create client.");
let mut client = RuntimeServiceClient::new(channel);
let containers = client.list_containers(
ListContainersRequest::default()).await.expect("REASON").into_inner();
for container in containers.containers {
let stats = client.container_stats(ContainerStatsRequest {
container_id: container.id.clone(),
}).await.expect("REASON").into_inner();
println!("Container ID: {:?}", container.id);
println!("Usage: {:?}", stats);
}
}
API version v1, original Protocol Buffers file.
Dependencies
~13–28MB
~299K SLoC