Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/idlab-discover/wasm-operator
Run k8s operators in wasm to reduce their overhead
https://github.com/idlab-discover/wasm-operator
Last synced: 3 months ago
JSON representation
Run k8s operators in wasm to reduce their overhead
- Host: GitHub
- URL: https://github.com/idlab-discover/wasm-operator
- Owner: idlab-discover
- License: apache-2.0
- Created: 2022-09-19T14:37:44.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2023-09-07T18:04:57.000Z (about 1 year ago)
- Last Synced: 2024-02-17T13:31:14.177Z (9 months ago)
- Language: Jupyter Notebook
- Homepage:
- Size: 6.69 MB
- Stars: 48
- Watchers: 7
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Kubernetes Operators in WebAssembly
This repository contains the code of a prototype runtime for running Kubernetes operators in WebAssembly. The goal is to improve the memory usage of a Kubernetes cluster by reducing the memory footprint of operators. This prototype reduces the overhead in three ways.
* It runs operators in a shared WebAssembly runtime to reduce the overhead of containerization.
* It swaps operators to disk when there are no changes to process.
* It uses the Rust programming language instead of Go.For more information, read the paper [Adapting Kubernetes controllers to the edge: on-demand control planes using Wasm and WASI](https://doi.org/10.48550/arXiv.2209.01077) accepted to CloudNet 2022.
This project builds upon [this proof of concept](https://github.com/slinkydeveloper/extending-kubernetes-api-in-process-poc).
```text
+-- 📂controllers # All child operators / components used for testing
| +-- 📂comb-rust-controller # Rust combined operator (no isolation)
| +-- 📂ring-go-controller # Go operator (container-based)
| +-- 📂ring-rust-controller # Rust operator (container-based and WASM-based)
| +-- 📂simple-rust-controller # simple child operator (container-based and WASM-based)
| +-- 📂value-changer # script to change watched resources based on traces to emulate resource changes
+-- 📂mongodbSpammer # script that spams a mongodb server, to test influence of heavy load server on reconcile time| :
+-- 📂devel # Tools for building & deploying
+-- 📂full_test # Scripts for running e2e test & benchmark
+-- run_wasm.sh # Script to run the wasm based operator inside our framework, this is the main script
+-- 📂pkg
| +-- 📂controller # Parent controller
| +-- 📂kube-rs # Modified kube-rs library
| +-- 📂kube-runtime-abi # ABI for making Kubernetes API requests from within child operator
| :
+-- 📂profile # Cgroup v2 memory usage measuring
+-- 📂test # Deployment files for tests
+-- 📂prediction # Prediction related benchmarks/server
+-- 📂models # Tests/experiments using different prediction models
+-- 📂webserver # Webserver flask api that predicts future values
:
```## Run all e2e tests and benchmarks (old)
```console
> ./full_test/run.sh
```## Run wasm test only
```console
> ./full_test/run_wasm.sh
```## Copyright
This code is released under the Apache License Version 2.0.
This prototype was initially developed by Tim Ramlot as part of his Master's dissertation.
This prototype was later extended by Kevin Van Landuyt as part of his Master's dissertation .