snapshotter

command
v0.0.0-...-73f17ac Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 3, 2024 License: Apache-2.0 Imports: 5 Imported by: 0

README

(De)multiplexing Snapshotter

This package enables the use of in-VM snapshotters.

There are a couple of components within this package that enable containerd snapshot requests to be proxied to an in-VM snapshotter:

  • The snapshotter plugin that runs as a service to receive snapshotter requests from containerd via GRPC. See containerd's plugin guide for more information on building external snapshotter plugins. This plugin enables containerd snapshotter requests to be proxied over a GRPC connection on top of firecracker's vsock.
  • The address resolver agent which implements the namespace lookup API for querying firecracker's vsock pathing for communication to the microVM.

Snapshotter Plugin

The snapshotter plugin is a snapshots service for which we can configure containerd to proxy snapshot requests.

[proxy_plugins]
  [proxy_plugins.proxy]
    type = "snapshot"
    address = "/var/lib/demux-snapshotter/snapshotter.sock"

The containerd configuration above will match the demux snapshotter listener configuration.

[snapshotter.listener]
  type = "unix"
  address = "/var/lib/demux-snapshotter/snapshotter.sock"

Address Resolver Agent

The address resolver agent is a service for querying the network address for a remote snapshotter keyed off the namespace of the container being built.

The example agent provided here does a simple lookup of the Firecracker microVM using a firecracker-control client where the VMID matches the namespace of the container.

HTTP Address Resolver Agent

An address resolver agent must implement the following HTTP endpoint to be able to handle requests from the demux snapshotter.

Example Request:

GET /address?namespace="cbfad871-0862-4dd6-ae7a-52e9b1c16ede"

Example Response:

{
  "network": "unix",
  "address": "/var/lib/firecracker-containerd/shim-base/default#cbfad871-0862-4dd6-ae7a-52e9b1c16ede/firecracker.vsock",
  "snapshotter_port": "10000",
  "metrics_port": "10001",
  "labels": {
    "namespace": "cbfad871-0862-4dd6-ae7a-52e9b1c16ede"
  }
}

Building

demux-snapshotter and http-address-resolver can be built with

make

Testing

To run unit-tests, run:

make test

To run integration tests, run:

make integ-test

Configuration

Configuration filepath can be specified at runtime using command line argument --config.

By default, if no configuration filepath is specified then /etc/demux-snapshotter/config.toml will be used.

Listener

Application configuration to denote the interface the service will receive requests.

[snapshotter.listener]
  type = "unix"
  address = "/var/lib/demux-snapshotter/snapshotter.sock"
Proxy Address Resolver

Application configuration to denote the interface to use for resolving proxy addressing for remote snapshotters.

[snapshotter.proxy.address.resolver]
  type = "http"
  address = "http://127.0.0.1:10001"
Metrics

Application configuration to enable remote snapshotter metrics collection via a demux snapshotter endpoint.

[snapshotter.metrics]
  enable = true
  port_range = "9000-9999"

  [snapshotter.metrics.service_discovery]
    enable = true
    port = 8080

Service discovery enables Prometheus service discovery at http://localhost:{port} which returns proxy endpoints for remote snapshotter Prometheus endpoints.

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL