Skip to content

Configuration Reference

The csi.flexfs start command accepts the following flags:

FlagTypeDefaultDescription
--bindAddrstringunix:///csi/csi.sockAddress to bind the CSI gRPC socket. Must use the unix:// scheme.
--kubeletDirstring/var/lib/kubeletKubelet root directory on the host. Must match the node’s real kubelet --root-dir; the driver builds its FUSE base mounts under {kubeletDir}/flexfs.
--verbose, -vboolfalseEnable verbose logging.

The Kubernetes Secret referenced by PersistentVolumes and StorageClasses supports the following fields in stringData:

FieldRequiredDescription
adminAddrYesAddress of the admin server (e.g., admin.example.com:443). For Community edition, use the free server address.
tokenYesAccount token for authenticating with the admin server.
secretNoEncryption secret for volumes with end-to-end encryption enabled.
apiVersion: v1
kind: Secret
metadata:
name: flexfs-secret
namespace: default
stringData:
adminAddr: admin.example.com:443
token: $TOKEN
secret: $SECRET

When using dynamic provisioning, the following parameters can be set on the StorageClass to control how new volumes are created:

ParameterDescription
csi.storage.k8s.io/provisioner-secret-namespaceNamespace of the Secret used for volume creation, deletion, and expansion.
csi.storage.k8s.io/provisioner-secret-nameName of that Secret.
csi.storage.k8s.io/node-publish-secret-namespaceNamespace of the Secret used for mounting (node operations).
csi.storage.k8s.io/node-publish-secret-nameName of that Secret.
csi.storage.k8s.io/controller-expand-secret-namespaceNamespace of the Secret used for volume expansion. Required if you enable allowVolumeExpansion.
csi.storage.k8s.io/controller-expand-secret-nameName of that Secret.

Use these prefixed names. The provisioner sidecar also accepts unprefixed equivalents (csiProvisionerSecretName, csiNodePublishSecretName, and their namespace counterparts), but it treats those as deprecated: it logs a warning and passes them to the driver as ordinary parameters rather than consuming them.

A StorageClass must tell the admin server where to put the volume, in one of two ways:

  • provider + region — the admin server picks a matching block store and metadata store. blockAPI is inferred for provider: aws and must be given otherwise.
  • metaStore + blockStore — explicit IDs, which bypass the lookup.

A StorageClass with neither combination is rejected: CreateVolume returns failed to create volume ... statusCode: 400, and the claim stays Pending with a ProvisioningFailed event. Note that provider and region are the parameter names — not providerCode/regionCode, which are block-store fields in configure.flexfs and are ignored here.

ParameterTypeDefaultDescription
blockAPIstring(auto)Block storage API code (e.g., s3, gcs, azure, oci).
blockSizestring4MiBlock size. Accepts human-readable values: 256Ki, 512Ki, 1Mi, 2Mi, 4Mi, 8Mi, or raw byte values (262144, 524288, 1048576, 2097152, 4194304, 8388608).
blockStorestring(auto)Block store ID (integer).
compressionstringtrueEnable block compression. Accepts true/false/yes/no.
compressionAlgostring(lz4)Compression algorithm: lz4 or zstd. Setting this implicitly enables compression.
encryptionstringfalseEnable end-to-end encryption. Requires a secret in the referenced Secret.
flagsstring(none)Volume-level mount flags (e.g., ro,noatime).
maxInodesstring(unlimited)Inode quota for the volume. A claim only expresses bytes, so an inode cap has to be stated here. Exceeding it fails with ENOSPC.
metaStorestring(auto)Metadata store ID (integer).
notesstring(none)Descriptive notes for the volume.
providerstring(auto)Provider code (e.g., aws, gcp, azure, oci).
proxyGroupstring(none)Proxy group ID or auto for automatic selection.
regionstring(auto)Region code (e.g., us-east-1).
retentionstring(none)Data retention period in seconds. Controls how long deleted data is preserved for time-travel.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: flexfs-genomics
provisioner: csi.flexfs.io
allowVolumeExpansion: true
parameters:
csi.storage.k8s.io/provisioner-secret-namespace: default
csi.storage.k8s.io/provisioner-secret-name: flexfs-secret
csi.storage.k8s.io/node-publish-secret-namespace: default
csi.storage.k8s.io/node-publish-secret-name: flexfs-secret
csi.storage.k8s.io/controller-expand-secret-namespace: default
csi.storage.k8s.io/controller-expand-secret-name: flexfs-secret
provider: aws
region: us-east-1
blockSize: 4Mi
compression: "true"
compressionAlgo: lz4

Mount options can be passed to the underlying mount.flexfs process via the mountOptions field on a PersistentVolume:

spec:
mountOptions:
- acl
- xattr
- rootsquash
- verbose

Option names are normalized to lowercase with hyphens removed before being passed to mount.flexfs via the -o flag; option values are passed through exactly as written, so case- and hyphen-sensitive values such as an atTime timestamp are preserved.