If storage becomes easy and ubiquitous, then any application can be made portable in a container. This latest release of REX-Ray adds new functionality for a proposed universal standard, reduces the barrier of entry for more storage platforms, and unifies an existing {code} project.

CSI Enabled

REX-Ray is the first Container Storage Interface (CSI) enabled plugin whereby it includes all of the components necessary to bridge communication to a CSI supported container orchestrator (CO) and has been validated against the current pre-release of the CSI 0.1 specification. We’ve talked about CSI before on this blog and this shows Dell Technologies’ commitment to furthering container adoption. REX-Ray v0.10 boasts the first ever CSI compliant Identity, Node, and Controller services using REX-Ray modules. The module(s) listens on the given CSI_ENDPOINT for gRPC traffic, and translates that to REX-Ray’s existing libStorage API. The CSI Spec is continually evolving and is fostering a community focused at implementing this in all major container orchestrators (COs).

As the first to be a CSI plugin implementation, REX-Ray enables all of its 15 available storage services to work with COs that adopt the CSI specification. REX-Ray will serve as a validation for integration testing among the COs and anyone looking to adopt CSI. REX-Ray’s adherence to the spec will evolve as CSI evolves and having a valid plugin will help continue this effort.

3 Native CSI storage plugins

The CSI specification facilitates interoperability between container orchestrators and storage platforms. This work represents the first three native CSI storage drivers and opens the market for more storage platform support, while also functioning as a blueprint for contributors looking to create CSI drivers. The three newest CSI plugins represent a total of 15 supported storage plugins.

  • CSI-NFS – The NFS protocol has been around for a long time and the majority of storage platforms on the market support NFS in some fashion. The NFS plugin opens the market for storage platforms that do not have direct CSI support.
  • CSI-BlockDevices – A block devices plugin introduces new capabilities for on-premises applications that can optimally make use of logical or physical devices local to a host.
  • CSI-VFS – A VFS (virtual file system) driver allows end-to-end CI verification of the CSI specification without the need of a separate storage provider.

A CSI plugin can stand on its own by functioning as a standalone Go binary but can gain more benefits by being packaged with REX-Ray. REX-Ray imports these CSI plugins so they are distributed using the simple curl | sh installation and can take advantage of REX-Ray’s ability to be containerized. There will be more features that can be enabled using REX-Ray through future additions such as throttling, centralized credentials, and more.

Docker Managed Volume Plug-ins have support for CSI within REX-Ray (#1012) as well. If CSI_ENDPOINT is set to simply rexray.sock then the Docker module will be disabled and the CSI module will multiplex incoming connections to a gRPC server for CSI requests and a no-op Docker server in order to fulfill the contract for managed docker volume plug-ins.

If you are a developer looking at creating a CSI driver, REX-Ray includes beta support for loading your CSI plugin from a Go plugin. This means, as a developer, you have the freedom to focus on the storage platform and creating new CSI plugin releases without worrying about the REX-Ray release cycle.

libStorage is Unified

libStorage, an open source vendor and platform-agnostic storage framework from {code}, was created to simplify storage integration to heterogeneous open source container platforms through a common model and API.

In 2016, we started conversations with Cloud Native Computing Foundation (CNCF) on contributing REX-Ray and libStorage to CNCF to expand cloud native computing environments to include storage. At this point, a few key things that happened.

  1. The CNCF Technical Oversight Committee (TOC) decided to create a sub-committee called the Storage Working Group to further discuss what storage means in cloud native.
  2. The TOC decided to embrace a strategy for similar interoperability projects for networking resulting in the adoption of Container Network Interface (CNI)
  3. The CO’s got on board.

After many conversations with the Storage Working Group, it was decided to unify libStorage into REX-Ray, as we did with Polly earlier this year, then further develop for CSI directly in REX-Ray. Within REX-Ray, there is a translation that happens between RPCs. libStorage uses HTTP as the transport while CSI uses gRPC. This translation and serialization takes effect to make CSI gRPC calls compatible with the existing set of libStorage APIs.

The absorption of libStorage inside of REX-Ray simplifies the process for end-users who need assistance with any part of REX-Ray’s feature tree. It’s a one stop shop mentality where the unification of these two create a fully cohesive project and simplifies development of future storage drivers.

Other Fixes

One of most popular Golang projects is Logrus. It’s a simple and structured logger for Golang projects and is used heavily in tools like ours, Kubernetes, Docker, and more. The owner of Logrus decided to change their GitHub name from Sirupsen to sirupsen. The one character change meant that lots of Go projects that imported this package were broken, including REX-Ray. This has been fixed so log messages work as normal.

Glide has been used for dependency management in most {code} projects. Glide filled a hole in the market where vendored code needed to be imported at a specific git hash. The Go community has come to an agreement using Dep as the tool of choice and REX-Ray has abided.

If you’re a REX-Ray developer, then you may have seen that Makefile and build.sh have gotten out of hand. With the absorption of libStorage, this has been cleaned up and the build process has been simplified.

Wrap up

This REX-Ray release shows our commitment to CSI with regards to increasing container adoption. The major COs see storage as a critical component to their success by being able to run any application including persistent and stateful applications. The CSI initiative is a clear indication they want to achieve a common goal and simplify the integration for all storage vendors. REX-Ray is putting the first CSI Enabled plugin on the market that, once implemented,  provides immediate availability of 15 storage platforms to CSI COs.

REX-Ray continues to grow in popularity, with the community helping shape its roadmap. It’s the most feature rich, container focused, storage orchestration tool on the market. More supported storage platforms are needed to further interoperability with the COs. The new CSI drivers, now packaged with REX-Ray, are helping fill this need. These drivers become an example of scaffolding for new plugins and demonstrates that REX-Ray can be a packaging mechanism using Go Plugins to enable cloud native storage interoperability.

The enterprise requires trusted tools that have a healthy status. This is why REX-Ray continually adds new capabilities to satisfy the needs of system administrators and operators of container environments.

Get the latest REX-Ray v0.10 binary along with release notes on GitHub releases.