This project aims to provide containerd shim implementations that can run Wasm / WASI workloads using runwasi as a library. This means that by installing these shims onto Kubernetes nodes, we can add a runtime class to Kubernetes and schedule Wasm workloads on those nodes. Your Wasm pods and deployments can act just like container workloads!
runwasi is a project that aims to run WASI workloads managed by containerd.
This repo currently maintains four shims for Wasm application runtimes/frameworks:
- Lunatic - an Erlang-inspired runtime for fast, robust and scalable server-side Wasm applications.
- Spin - a developer tool for building and running serverless Wasm applications.
- Slight - a wasmtime-based runtime for running Wasm applications that use SpiderLightning (aks WASI-Cloud-Core) capabilities
- Wasm Workers Server - a tool to develop and run serverless applications server on top of Wasm.
Below is a table of the shims and the the most recent versions of the shims that are supported by this project.
shim version | v0.10 | v0.9 | v0.8 | v0.7 | v0.5.1 | v0.5.0 |
---|---|---|---|---|---|---|
spin | v2.0.1 | v1.4.1 | v1.4.0 | v1.3.0 | v1.0.0 | v0.9.0 |
slight | v0.5.1 | v0.5.1 | v0.5.0 | v0.5.0 | v0.4.0 | v0.4.0 |
wws | v1.7.0 | v1.5.0 | v1.4.0 | v1.2.0 | / | / |
lunatic | v0.13.2 | / | / | / | / | / |
As mentioned above, this project uses runwasi's containerd-shim-wasm
to build shim implementations for higher level Wasm application runtimes/frameworks. The runwasi
shims are more lower level that are intended to run WASI-compatible Wasm modules, instead of Wasm applications that are built on top of a framework. If you are looking for Wasmtime
, WasmEdge
or Wasmer
shims, please check out runwasi.
- Start k3d and run a sample WASM application.
- Create a Spin application on k3d
- Deploy a SpiderLightning application with k3d
- Deploy a Wasm Workers Server application with k3d
To build the shims in this project, run make build
.
To run the integration tests, run make integration-tests
.
To clean up, run make tests/clean
.
In the deployments directory you will find examples of deploying the shims to Kubernetes clusters and using them in example Kubernetes workloads.
To use one of these containerd shims in Kubernetes, you must do the following:
- Install the shim binary somewhere on the path of your Kubernetes worker nodes. For example, copy
containerd-shim-spin-v2
to/bin
. - Add the following to the containerd config.toml that maps the runtime type to the shim binary from step 1.
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.spin]
runtime_type = "io.containerd.spin.v2"
- Apply a runtime class that contains a handler that matches the "spin" config runtime name from step 2.
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: wasmtime-spin
handler: spin
- Deploy a Wasm workload to your cluster with the specified runtime class name matching the "wasmtime-spin" runtime class from step 3.
apiVersion: apps/v1
kind: Deployment
metadata:
name: wasm-spin
spec:
replicas: 1
selector:
matchLabels:
app: wasm-spin
template:
metadata:
labels:
app: wasm-spin
spec:
runtimeClassName: wasmtime-spin
containers:
- name: spin-hello
image: ghcr.io/deislabs/containerd-wasm-shims/examples/spin-rust-hello:latest
command: ["/"]
This project has adopted the Microsoft Open Source Code of Conduct.
For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.