Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/olix0r/kubert
Rust Kubernetes runtime helpers. Based on kube-rs.
https://github.com/olix0r/kubert
kubernetes
Last synced: 2 days ago
JSON representation
Rust Kubernetes runtime helpers. Based on kube-rs.
- Host: GitHub
- URL: https://github.com/olix0r/kubert
- Owner: olix0r
- License: apache-2.0
- Created: 2022-02-18T04:39:33.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-24T04:52:06.000Z (22 days ago)
- Last Synced: 2024-10-30T17:01:58.073Z (16 days ago)
- Topics: kubernetes
- Language: Rust
- Homepage:
- Size: 329 KB
- Stars: 146
- Watchers: 7
- Forks: 13
- Open Issues: 14
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-rust-cloud-native - olix0r/kubert - rs (Uncategorized / Uncategorized)
README
# kubert
Rust Kubernetes runtime helpers. Based on [`kube-rs`][krs].
![kubert](https://user-images.githubusercontent.com/240738/154825590-5a94ca46-a453-4037-a738-26663b2c8630.png)
/ˈkuː.bərt/
[![Crates.io][crate-badge]][crate-url]
[![Documentation][docs-badge]][docs-url]
[![License](https://img.shields.io/crates/l/kubert)](LICENSE)[crate-badge]: https://img.shields.io/crates/v/kubert.svg
[crate-url]: https://crates.io/crates/kubert
[docs-badge]: https://docs.rs/kubert/badge.svg
[docs-url]: https://docs.rs/kubert## Features
* [`clap`](https://docs.rs/clap) command-line interface support;
* A basic admin server with `/ready` and `/live` probe endpoints;
* Optional [`prometheus-client`][pc] integration, with process and Tokio Runtime
metrics;
* A default Kubernetes client;
* Graceful shutdown on `SIGTERM` or `SIGINT` signals;
* An HTTPS server (for admission controllers and API extensions) with
certificate reloading;
* A utility for maintaining an index derived from watching one or more
Kubernetes resources types;
* A _requeue_ channel that supports deferring/rescheduling updates (i.e. in case
a write fails);
* And a [`Runtime`][rt] type that ties it all together!### Why not `kube-rs`?
The [`kube`][krs] crate is great! And in fact, `kubert` builds on `kube`'s
client and runtime modules. This crate, however, captures some of the repeated
patterns we've encountered building controllers for
[Linkerd](https://github.com/linkerd/linkerd2). It doesn't try to hide
`kube`--though it does reduce boilerplate around initializing watches and caches
(reflectors); and it expects you to schedule work via the `tokio` runtime.## Examples
This repository includes a simple [example application](./examples) that
demonstrates how to use a `kubert::Runtime`.Other examples include:
* [Linkerd2 policy controller](https://github.com/linkerd/linkerd2/blob/d4543cd86e427b241ce961b50dd83b1738c0b069/policy-controller/src/main.rs)
## kubert-prometheus-process
The `kubert-prometheus-process` crate provides [process metrics][pm] for
prometheus-client. It has no dependencies on kubert, and can be used
independently.## kubert-prometheus-tokio
The `kubert-prometheus-tokio` crate exposes [Tokio runtime metrics][tm] for
prometheus-client. It also has no dependencies on kubert, and can be used
independently.Note that tokio runtime metrics require `RUSTFLAGS="--cfg tokio_unstable"` to be
set at compile-time.## Status
This crate is still fairly experimental, though it's based on production code
from Linkerd; and we plan to use it in Linkerd moving forward.[krs]: https://docs.rs/kube
[pc]: https://docs.rs/prometheus-client
[pm]: https://prometheus.io/docs/instrumenting/writing_clientlibs/#process-metrics
[tm]: https://docs.rs/tokio-metrics
[rt]: https://docs.rs/kubert/latest/kubert/runtime/struct.Runtime.html