Storage Classes
Storage classes are responsible for managing and provisioning volumes for an installed CSI Driver. A CSI Driver can be used by multiple storage classes with different configurations. Once a configuration is in place, it will define storage volumes that are created by users within their accounts.
You can configure storage classes using either the web UI or the CLI. Creating initial storage classes and drivers with the UI is easier since values are automatically populated based on the initial configuration in the cloud formation template. But configuring storage classes and drivers by writing yaml files and issuing CLI commands grants the administrator complete freedom to specify detailed configurations.
Allocating storage classes and using storage volumes can incur cost in the cloud. For instance, Amazon Elastic File System (EFS) is priced based on the amount of persistent data that you store as well as amount of data transferred through read and write operations. Admins should review pricing information and be aware of the potential implications of running workflows before configuring new storage volumes.
The Fuzzball Admin UI presents an option to automatically create an initial set of storage classes based on the values entered in the cloud formation template during the installation procedure. Selecting this option will also automatically generate the necessary storage driver to back the newly created storage classes.
To use this feature, first navigate to the Admin UI URL for your Fuzzball cluster. (This URL can be
found at https://ui-admin.<domain>
) Now you can select the “Storage” option on the left. You will
be presented with a screen like the following, informing you that you don’t have any storage classes
and asking if you’d like to create a default storage class.
Selecting the blue “Create Default Storage Class” option will cause Fuzzball to create initial storage classes based on the default parameters entered in the cloud formation template during the installation process. In this example, an ephemeral and persistent storage class are created based on Amazon EFS.
If your newly created storage classes are not immediately visible, try pressing the UI refresh button toward the upper right of the dashboard.
If you encounter an error when creating default storage classes, you may need to edit the values provided during installation in the cloud formation template.
If you want to review the initial configurations and potentially make adjustments, you can click the vertical ellipsis (kebob) menu to the right of a storage class and inspect/change values like so:
Creating default storage classes via the push-button workflow will also generate the appropriate storage driver configuration based on the initial values set in cloud formation template. See the section on storage drivers for more information.
And finally, you can also create new storage classes in the UI from scratch by clicking on the blue “Add Storage Class” button in the upper right of the dashboard view. There are a large number of configuration parameters available. Creating a default storage class and inspecting the initial configuration can give you hints about the values that you should enter to configure your new storage class from scratch.
Storage classes can be manually specified by writing YAML files and using the fuzzball admin storage class create <class.yaml>
command. For information about creating YAML files to create
storage classes, see the storage class definitions section.
Ensure that you have created and logged into your admin context by issuing these commands:
$ fuzzball admin context create <context_name> <api_url>
$ fuzzball admin context login -u <admin_username> -p '<admin_password>'
You can manage storage classes with the Fuzzball CLI
binary. The root command is fuzzball admin storage class
with the following sub commands:
Manage Fuzzball storage classes
Usage:
fuzzball admin storage class [command]
Aliases:
class, cl
Available Commands:
create Create a storage class
delete Delete a storage class
describe Describe storage class regarding the most recent install/update operation
disable Disable a storage class
export Export storage class definition as YAML
info Get information about a storage class
list List storage classes
update Update a storage class
The --help
option will give detailed up-to-date information about the usage of each of these
commands. For instance, fuzzball admin storage class create --help
will give you information on
creating a storage class via the CLI.
For convenience, information about managing storage classes in the CLI with the available subcommands is summarized below.
The CLI--help
docs have the most up-to-date information regarding sub-commands.
Once you have finished creating a storage class definition YAML, you can create the class for your cluster like so:
$ fuzzball admin storage class create <storage_def.yaml>
The command should return a message like
Storage class af0644ef-ab71-3677-9409-473847af3925 created
The create operation runs asynchronously and can take some time depending on the
resources available in your
Fuzzball cluster. The Fuzzball Storage service will create a temporary volume to validate the
definition with the CSI driver. This requires an available Substrate node. The CLI doesn’t wait for
completion by default, but you can specify that the CLI should wait until the volume has been
created and validated using the --wait
argument:
$ fuzzball admin storage class create --wait <storage_def.yaml>
Administrators can also update a storage class definition for a cluster. Note the name
field is
immutable after the class creation, so changing the class name will return an error when updating.
To update a class definition:
$ fuzzball admin storage class update -i af0644ef-ab71-3677-9409-473847af3925 <new_definition.yaml>
Similar to the create
command, the update operation is asynchronous. The update command also
accepts the --wait
argument to wait for the update completion.
Note that class definition updates done at short interval might return the error:
child workflow execution already started
This signifies that a previous update is still completing. This may be confusing when performing class updates in the UI.
If you encounter this error, you can use the describe
command with --wait
argument to wait for
the update to complete.
The describe command retrieves the last creation/update state and class error if any. This command returns a raw JSON output or the last error that occurred.
To describe a class:
$ fuzzball admin storage class describe --wait af0644ef-ab71-3677-9409-473847af3925
Storage classes can be disabled preventing users from creating/using storage volumes. This might be useful to migrate users to another storage class for example.
$ fuzzball admin storage class disable af0644ef-ab71-3677-9409-473847af3925
Admins can also delete storage classes. To delete a storage class, all storage volumes attached to the class must first be deleted.
$ fuzzball admin storage class delete af0644ef-ab71-3677-9409-473847af3925
If volumes are still attached to the storage class, an error will be returned:
could not delete storage class af0644ef-ab71-3677-9409-473847af3925: volumes still attached to it
Administrators can view the configured storage classes like so:
$ fuzzball admin storage volume list
ID | NAME | STATUS | CREATED TIME | LAST UPDATED | PERSISTENT | RESTRICTED
4e19b6f4-7f69-3f1f-afc5-3aff70eb0f40 | ephemeral | Ready | 2023-06-27 06:28:58PM | 2024-01-25 04:24:59PM | No | No
af0644ef-ab71-3677-9409-473847af3925 | homedir | Ready | 2024-01-19 05:17:01PM | 2024-01-19 05:17:01PM | Yes | No
Administrators can view information about a storage class like so:
$ fuzzball admin storage class info af0644ef-ab71-3677-9409-473847af3925