Introduction to External Volumes
Cycle's external volume management enables you to connect and manage external storage systems such as SAN arrays and Ceph RBD clusters in a standardized way. Once configured, volumes on these storage systems can be used as block devices for containers and virtual machines, or mounted as filesystems within containers. This allows workloads to take advantage of persistent, high-performance storage while maintaining full visibility and control.
Connecting Storage Backends to Cycle
In order to utilize external volumes, you must first set up an external storage hub integration. Details for each integration varies based on the storage backend, but generally will require some form of authentication, and network details for connecting to the storage array.
Currently there are two supported integrations for storage backends, with more in the works:
Once the integration is configured, Cycle will manage the lifecycle of volumes in a standardized way no matter what the underlying backend is.
External Volumes
External volumes are a primitive on Cycle. An external volume is a provisioned block of persistent storage carved from the larger storage pool (the backend integration) and exposed as a virtual disk.
Attaching an External Volume
An external volume can be attached as a block device or filesystem, depending on the target host.
| Attachment Type | Containers | Virtual Machines |
|---|---|---|
| Block Device | ☑️ | ☑️ |
| Filesystem Mount | ☑️ | ☐ |
When attached as a block device, the external volume will appear as a raw storage device (like an unformatted USB) and can be formatted with any desired filesystem. For virtual machines, it will be up to the host operating system how these devices are exposed.
Containers have the additional option of mounting the external volume as a filesystem. The platform will format the volume using the ext4 filesystem and mount it into the selected path. This makes it quick and convenient to gain access to an external volume.
The attachment type cannot be changed after the volume has been created.
Attaching to Stateless Containers
It is important to note that when attaching external volumes as a block device to stateless containers, the external volume will not be wiped between container restarts. For filesystem external volumes, they will be wiped normally like local volumes are.
Attachment Modes
The attachment mode of a volume defines how and where it can be connected. It determines whether it attaches directly to a container/virtual machine, or to an entire node, whether multiple attachments are allowed, and whether the connection provides read-only or read-write access.
The attachment mode cannot be changed after the volume has been created.
| Mode | Description |
|---|---|
| Single Instance Writer | A single instance can attach to the volume with full read and write access. |
| Single Instance Read Only | A single instance can attach to the volume in read-only mode. |
| Single Node Writer | Multiple containers on the same node can attach and write to the volume. |
| Single Node Read Only | Multiple containers on the same node can attach in read-only mode. |
| Multi Node Writer | Multiple nodes can attach to the volume with write access. |
| Multi Node Read Only | Multiple nodes can attach to the volume in read-only mode. |
Location
External volumes are bound to a single location. The servers that have access to the volume are selected during create, but they must all be within that same location. This is to ensure top performance and reduce the risk of issues caused due to latency or network drops.
Automatic Provisioning Support
Some external volume integrations support creating volumes if needed, while others require the volume to already exist. For those that support it, when selected Cycle will create the volume automatically when configuring the external volume.
| Storage System | Create Volumes On Demand | Pre-Provisioned Volumes Required |
|---|---|---|
| SAN | ☐ | ☑️ |
| Ceph RBD | ☑️ | ☐ |
Managing External Volumes on Cycle
For details on how to view, attach, and manage external volumes through different interfaces, see the documentation for each workflow below: