8个版本 (5个破坏性版本)
1.0.0-alpha.1 | 2021年7月27日 |
---|---|
0.7.0 | 2021年3月24日 |
0.6.0 | 2021年2月2日 |
0.5.0 | 2020年9月22日 |
0.2.1 | 2020年5月19日 |
#366 in WebAssembly
每月下载量 39次
660KB
14K SLoC
Kubelet
用Rust语言实现自定义kubelet的库。
lib.rs
:
一个用于构建自定义Kubernetes kubelet 的crate。
该crate提供了用于声明Kubelet后端的Provider
trait,以及一个接收Provider
并运行Kubelet服务器的Kubelet
类型。
示例
use kubelet::Kubelet;
use kubelet::config::Config;
use kubelet::resources::DeviceManager;
use kubelet::plugin_watcher::PluginRegistry;
use kubelet::pod::Pod;
use kubelet::provider::{DevicePluginSupport, Provider, PluginSupport};
use std::sync::Arc;
use tokio::sync::RwLock;
use kubelet::pod::state::prelude::*;
use kubelet::pod::state::Stub;
// Create some type that will act as your provider
struct MyProvider;
// Track shared provider-level state across pods.
struct ProviderState;
// Track pod state amongst pod state handlers.
struct PodState;
#[async_trait::async_trait]
impl ObjectState for PodState {
type Manifest = Pod;
type Status = PodStatus;
type SharedState = ProviderState;
async fn async_drop(self, _provider_state: &mut ProviderState) {}
}
// Implement the `Provider` trait for that type
#[async_trait::async_trait]
impl Provider for MyProvider {
const ARCH: &'static str = "my-arch";
type ProviderState = ProviderState;
type InitialState = Stub;
type TerminatedState = Stub;
type PodState = PodState;
fn provider_state(&self) -> SharedState<ProviderState> {
Arc::new(RwLock::new(ProviderState {}))
}
async fn initialize_pod_state(&self, _pod: &Pod) -> anyhow::Result<Self::PodState> {
Ok(PodState)
}
async fn logs(&self, namespace: String, pod: String, container: String, sender: kubelet::log::Sender) -> anyhow::Result<()> { todo!() }
}
impl PluginSupport for ProviderState {
fn plugin_registry(&self) -> Option<Arc<PluginRegistry>> {
None
}
}
impl DevicePluginSupport for ProviderState {
fn device_plugin_manager(&self) -> Option<Arc<DeviceManager>> {
None
}
}
async {
// Instantiate your provider type
let provider = MyProvider;
// Load a kubernetes configuration
let kubeconfig = kube::Config::infer().await.unwrap();
// Get a configuration for the Kubelet
let kubelet_config = Config::default();
// Instantiate the Kubelet
let kubelet = Kubelet::new(provider, kubeconfig, kubelet_config).await.unwrap();
// Start the Kubelet and block on it
kubelet.start().await.unwrap();
};
依赖项
~92MB
~1.5M SLoC