Architecture

StorageOS is a software-defined storage platform for running stateful applications in Kubernetes.

Fundamentally, StorageOS uses the storage attached to the nodes in the StorageOS cluster to create and present virtual volumes into containers. Space on the host is consumed from the mount point /var/lib/storageos/data, so it is therefore recommended that disk devices are used exclusively for StorageOS, as described in Managing Host Storage

StorageOS is agnostic to the underlying storage and runs equally well on bare metal, in virtual machines or on cloud providers.

StorageOS architecture

Read about the cloud native storage principles behind StorageOS.

StorageOS on Kubernetes

StorageOS is architected as a series of containers that fulfil separate, discrete functions.

  • StorageOS Controlplane

    Responsible for monitoring and maintaining the state of volumes and nodes in the cluster

  • StorageOS Dataplane

    Responsible for all I/O path related tasks; reading, writing, compression and caching

  • StorageOS Scheduler

    Responsible for scheduling applications on the same node as applications’ volumes

  • CSI helper

    Responsible for registering StorageOS with Kubernetes as a CSI driver

  • StorageOS Operator

    Responsible for the creation and maintenance of the StorageOS cluster

StorageOS is deployed by the StorageOS operator. In Kubernetes, the StorageOS Controlplane and Dataplane are deployed in a single pod managed by a daemonset. This daemonset runs on every node in the cluster that will consume or present storage. The scheduler, CSI helper and Operator run as separate pods and are controlled as deployments.

StorageOS is designed to feel familiar to Kubernetes and Docker users. Storage is managed through standard StorageClasses and PersistentVolumeClaims, and features are controlled by Kubernetes-style labels and selectors, prefixed with storageos.com/. By default, volumes are cached to improve read performance and compressed to reduce network traffic.

Any pod may mount a StorageOS virtual volume from any node that is also running StorageOS, regardless of whether the pod and volume are collocated on the same node. Therefore, applications may be started or restarted on any node and access volumes transparently.