Skip to content

virt-do/cloudlet

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

96 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Cloudlet

The almost fast FaaS

Demo

Table of Contents

Prerequisites

Install the dependencies. On Debian/Ubuntu:

apt install build-essential cmake pkg-config libssl-dev flex bison libelf-dev iptables

Then, configure the Rust toolchain and install Just (only for dev environment):

rustup target add x86_64-unknown-linux-musl
cargo install just # optional

Finally, install the protobuf compiler.

Run Locally

Clone the project

git clone https://github.com/virt-do/cloudlet

Setup

Go to the project directory:

cd cloudlet

Create a TOML config file or update the existing one:

cat << EOF > src/cli/examples/config.toml
workload-name = "fibonacci"
language = "rust"
action = "prepare-and-run"

[server]
address = "localhost"
port = 50051

[build]
source-code-path = "$(readlink -f ./src/cli/examples/main.rs)"
release = true
EOF

Make sure to update the source-code-path to the path of the source code you want to run. Use an absolute path.

Here are more informations about each field

Start the VMM

Warning

Make sure to replace CARGO_PATH environment variable with the path to your cargo binary

export CARGO_PATH=$(which cargo)
sudo -E capsh --keep=1 --user=$USER --inh=cap_net_admin --addamb=cap_net_admin -- -c  'RUST_BACKTRACE=1 '$CARGO_PATH' run --bin vmm -- grpc'

Run the API

cargo run --bin api

Send the request using the CLI

cargo run --bin cli -- run --config-path src/cli/examples/config.toml

Note

If it's your first time running the request, cloudlet will have to compile a kernel and an initramfs image. This will take a while, so make sure you do something else while you wait...

Architecture

Here is a simple sequence diagram of Cloudlet:

sequenceDiagram
    participant CLI
    participant API
    participant VMM
    participant Agent

    CLI->>API: HTTP Request /run
    API->>VMM: gRPC Request to create VM
    VMM->>Agent: Creation of the VM
    VMM->>Agent: gRPC Request to the agent
    Agent->>Agent: Build and run code
    Agent-->>VMM: Stream Response
    VMM-->>API: Stream Response
    API-->>CLI: HTTP Response
Loading
  1. The CLI sends an HTTP request to the API which in turn sends a gRPC request to the VMM
  2. The VMM then creates a VM
  3. When a VM starts it boots on the agent which holds another gRPC server to handle requests
  4. The agent then builds and runs the code
  5. The response is streamed back to the VMM and then to the API and finally to the CLI.

Config file

Field Description Type
workload-name Name of the workload you wanna run String
language Language of the source code String enum: rust, python node
action Action to perform String enum: prepare-and-run
server.address Address of the server (currently not used) String
server.port Port of the server (currently not used) Integer
build.source-code-path Path to the source code on your local machine String
build.release Build the source code in release mode Boolean

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages