k0s plugin to enable wasm runtime.
It leverages the new k0s containerd plugin "framework" to dynamically configure k0s managed containerd.
Check the example manifest in manifests/ directory.
Essentially it runs as a DaemonSet and does the following:
- Drops WASM shim binaries into k0s bin dir at
/var/lib/k0s/bin - Drops WASM CRI plugin configuration into
/etc/k0s/containerd.d/
Once k0s sees the drop-in configuration it will automatically reload the containerd configuration.
If you do not wish to install WASM runtime on all worker nodes you can customize the manifest with your own nodeSelector.
You can simply create a pod using the newly installed WASM runtime:
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:v0.5.1
command: ["/"]
resources: # limit the resources to 128Mi of memory and 100m of CPU
limits:
cpu: 100m
memory: 128Mi
requests:
cpu: 100m
memory: 128Mi
---
apiVersion: v1
kind: Service
metadata:
name: wasm-spin
spec:
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
selector:
app: wasm-spinThe key here is runtimeClassName: wasmtime-spin which instructs containerD to use wasmtime-spin runtime when it creates the container.
Once the Pod is running you can invoke the service via the exposed NodePort service:
# curl 172.17.0.3:32196/hello
Hello world from Spin!