libStorage provides a vendor agnostic storage orchestration model, API, and
reference client and server implementations.
libStorage enables storage consumption by leveraging methods commonly
available, locally and/or externally, to an operating system (OS).
libStorage project and its architecture represents a culmination of
experience gained from the project authors' building of
orchestration tools. While created using
different languages and targeting disparate storage platforms, all the tools
were architecturally aligned and embedded functionality directly inside the
tools and affected storage platforms.
This shared design goal enabled tools that natively consumed storage, sans external dependencies.
libStorage focuses on adding value to container runtimes and storage
orchestration tools such as
Mesos, however the
framework is available abstractly for more general usage across:
- Operating systems
- Storage platforms
- Hardware platforms
- Virtualization platforms
The client side implementation, focused on operating system activities, has a minimal set of dependencies in order to avoid a large, runtime footprint.
Storage Orchestration Tools Today
Today there are many storage orchestration and abstraction tools relevant to container runtimes. These tools often must be installed locally and run alongside the container runtime.
The solid green lines represent active communication paths. The dotted black lines represent passive paths. The orange volume represents a operating system device and volume path available to the container runtime.
libStorage Embedded Architecture
libStorage client and server components enable container
runtimes to communicate directly with storage platforms, the ideal
architecture. This design requires minimal operational dependencies and is
still able to provide volume management for container runtimes.
libStorage Centralized Architecture
In a centralized architecture,
libStorage is hosted as a service, acting as a
go-between for container runtimes and backend storage platforms.
libStorage endpoint is advertised by a tool like REX-Ray, run from anywhere, and is
responsible for all control plane operations to the storage platform along with
maintaining escalated credentials for these platforms. All client based
processes within the operating system are still embedded in the container
libStorage Decentralized Architecture
Similar to the centralized architecture, this implementation design involves
running a separate
libStorage process alongside each container runtime, across
one or several hosts.
libStorage is the
JSON API. It defines the control plane
calls that occur between the client and server. While the
includes reference implementations of the client and server written using Go,
both the client and server could be written using any language as long as both
adhere to the published
libStorage client is responsible for discovering a host's instance ID
and the next, available device name. The client's reference implementation is
written using Go and is compatible with C++.
The design goal of the client is to be lightweight, portable, and avoid obsolescence by minimizing dependencies and focusing on deferring as much of the logic as possible to the server.
libStorage server implements the
libStorage API and is responsible for
coordinating requests between clients and backend orchestration packages. The
server's reference implementation is also written using Go.
defines several data structures that are easily represented using Go structs or
a portable format such as JSON.
libStorage documentation is available at
libStorage project is licensed to you under the Apache License, Version 2.0. Please reference the LICENSE file for additional information.