The module lifecycle stage: Experimental
Before enabling the module, you need to allow the use of experimental modules in the deckhouse ModuleConfig. To do this, set the allowExperimentalModules parameter to true.
v0.1.0
Release date: 2026-11-06
The first release of sds-nfs: an NFSServer turns one ReadWriteOnce volume into ReadWriteMany storage served over NFS, with an NFSStorageClass of its own, a quota for every claim, encryption and mTLS between the nodes and the server, and a move to another node when the node of the server is lost.
Highlights
Changes in this release:
- An
NFSServerprovisions a volume of the chosen StorageClass, serves it over NFS from a single pod and publishes anNFSStorageClassof the csi-nfs module with its name; every claim of the class gets its own directory, limited to the size of the claim by an XFS project quota. - The traffic between the nodes and the server is always encrypted with RPC-with-TLS, and the server admits only the nodes that present the client certificate csi-nfs issues for them (mTLS). Every volume is exported only to the nodes that run its pods, and the nodes mount it with
nosuidandnodev. - With a replicated backend StorageClass and fencing enabled on its NodeGroups, the server moves off a lost node once the node is proven dead;
status.interruptionandstatus.lastInterruptionshow what the server waits for and how long the pause lasted.
New features
This release adds:
- The
NFSServerresource (storage.deckhouse.io/v1alpha1, cluster-scoped):spec.backend.sizeandspec.backend.storageClassNameset the backend volume (the default StorageClass of the cluster unless named),spec.nodeSelectorthe nodes of the server (the system nodes by default),spec.storageClass.volumeBindingModethe binding mode of the published class. The backend StorageClass and the binding mode cannot change after creation, and the backend size can only grow. - The module grows the backend volume and its file system online as the claims of the class ask for more, and reports in the
CapacityReadycondition when the backend cannot hold them.dfin a pod shows the size of the claim, and a write past it fails withENOSPC. - Conditions of
NFSServersay what is not ready and why:BackendReady,Serving,CapacityReady,NFSStorageClassReady,TLSReady,ClientNodesReady(nodes whose kernel lacks RPC-with-TLS),FencingReady(NodeGroups without fencing),ExportsApplied,QuotasApplied,RecoveredandReady. A change ofReadyis recorded as a Kubernetes Event on the server. - An
NFSServeris not deleted while PersistentVolumes of its class exist: it keeps serving them withReady=Falseand the reasonDeletionBlocked. AnNFSServercannot be created under the name of an existing StorageClass or NFSStorageClass. - The Grafana dashboard SDS-NFS / NFS servers shows the state of the servers, their interruptions and backend volumes, NFS operations, latency and throughput, and how full every volume is; the alerts
SdsNfsServerInterrupted,SdsNfsServerNotReady,SdsNfsServerCapacityNotReadyandSdsNfsServerFencingNotReadyfire on the conditions of the servers. NFSServeris part of the access roles of the storage subsystem: the viewer role and theUseraccess level read the servers, the manager role andClusterEditorand above create, change and delete them.
Known issues
Known limitations of this release:
- The module is in the
Experimentalstage and ships in the EE and FE editions only. It requires the csi-nfs module 0.4.14 or newer. - Every node that mounts the volumes needs a kernel with RPC-with-TLS (6.5 or later, with
CONFIG_TLSandCONFIG_NET_HANDSHAKE); pods on other nodes, such as Astra and Debian with kernel 6.1, cannot mount the volumes. - One server serves every volume of its class, so a restart or a move pauses the I/O of all of them, and an update of the module that changes the image of the server restarts the servers of every class at once, for about 15–30 seconds each. A move off a lost node takes minutes.
- Synchronous writes are slow (about 250–1600 IOPS for 4 KiB random writes with
direct=1in the module’s load test): the module suits shared files and moderate writing, not databases.