Crates.io | kube-coordinate |
lib.rs | kube-coordinate |
version | 0.2.1 |
source | src |
created_at | 2023-12-04 18:51:15.70265 |
updated_at | 2024-03-06 17:02:37.556431 |
description | Kubernetes leader election using the coordination.k8s.io API. |
homepage | |
repository | |
max_upload_size | |
id | 1057919 |
size | 35,941 |
Kube Coordinate builds upon the kube-rs ecosystem, and implements a streamlined version of the client-go leader election system. This implementation uses only Lease
objects for coordination.
// Spawn a leader elector task, and get a handle to the state channel.
let handle = LeaderElector::spawn(/* ... */);
let state_chan = handle.state();
// Before taking action as a leader, just check the channel to ensure
// the lease is currently held by this process.
if state_chan.borrow().is_leader() {
// Only perform leader actions if in leader state.
}
// Or, for a more sophisticated pattern, watch the state channel for changes,
// and use it to drive your application's state machine.
let state_stream = tokio_stream::wrappers::WatchStream::new(state_chan);
loop {
tokio::select! {
Some(state) = state_stream.next() => match state {
LeaderState::Leader => (), // Leader tasks.
_ => (), // Non-leader tasks.
},
}
}
cargo add kube-coordinate
kube-coordinate is licensed under the terms of the MIT License or the Apache License 2.0, at your choosing.