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.
We are moving the spin shim to a separate repository, follwoing the annoucement of SpinKube project. Please check out the SpinKube organization for the latest updates on the Spin shim.
This repo currently maintains four shims for Wasm application runtimes/frameworks:
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.11.1 | v0.10 | v0.9 | v0.8 | v0.7 | v0.5.1 | v0.5.0 |
---|---|---|---|---|---|---|---|
Spin | v2.2.0 | 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.1 | v0.5.0 | v0.5.0 | v0.4.0 | v0.4.0 |
Wasm Workers Server | v1.7.0 | v1.7.0 | v1.5.0 | v1.4.0 | v1.2.0 | / | / |
Lunatic | v0.13.2 | v0.13.2 | / | / | / | / | / |
runwasi
shimsAs 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.
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:
containerd-shim-spin-v2
to /bin
.[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.spin]
runtime_type = "io.containerd.spin.v2"
apiVersion: node.k8s.io/v1
kind: RuntimeClass
metadata:
name: wasmtime-spin
handler: spin
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.