Giter Club home page Giter Club logo

containerd-wasm-shims's Introduction

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:

  1. Lunatic - an Earlang-inspired runtime for fast, robust and scalable server-side Wasm application.
  2. Spin - a developer tool for building and running serverless Wasm applications.
  3. Slight - a wasmtime-based runtime for running Wasm applications that use SpiderLightning (aks WASI-Cloud-Core) capabilities
  4. 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 / / / /

Compare to runwasi shims

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

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:

  1. Install the shim binary somewhere on the path of your Kubernetes worker nodes. For example, copy containerd-shim-spin-v1 to /bin.
  2. 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.v1"
  1. 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
  1. 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 [email protected] with any additional questions or comments.

containerd-wasm-shims's People

Contributors

0xe282b0 avatar angelmmiguel avatar bindsi avatar danbugs avatar devigned avatar dierbei avatar ereslibre avatar jprendes avatar jsturtevant avatar mossaka avatar rumpl avatar squillace avatar stevesloka avatar suneetnangia avatar swgriffith avatar zr-msft avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.