Containerd Wasm Shims
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.
Shims
This repo currently maintains four shims for Wasm application runtimes/frameworks:
- Lunatic - an Earlang-inspired runtime for fast, robust and scalable server-side Wasm application.
- 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.9 | v0.8 | v0.7 | v0.5.1 | v0.5.0 |
---|---|---|---|---|---|
spin | v1.4.1 | v1.4.0 | v1.3.0 | v1.0.0 | v0.9.0 |
slight | v0.5.1 | v0.5.0 | v0.5.0 | v0.4.0 | v0.4.0 |
wws | v1.5.0 | v1.4.0 | v1.2.0 | / | / |
lunatic | v0.13.2 | / | / | / | / |
runwasi
shims
Compare to 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 applicaitons that are built on top of a framework. If you are looking for Wasmtime
, WasmEdge
or Wasmer
shims, please check out runwasi.
Quickstarts
- 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
Building the shims
To build the shims in this project, run make build
.
Running the integration tests
To run the integration tests, run make integration-tests
.
Cleaning up
To clean up, run make tests/clean
.
Example Kubernetes Cluster Deployments
In the deployments directory you will find examples of deploying the shims to Kubernetes clusters and using them in example Kubernetes workloads.
Using a shim in Kubernetes
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: ["/"]
Code of Conduct
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.