Create storage class¶
F5 recommends using a Kubernetes StorageClass backed by NFS that supports the ReadWriteMany (RWX) access mode. RWX is required because TMM pods and Observer pods run on different nodes. With this distributed design, local node storage is not suitable, since data written on one node is not available to pods on another.
The F5 Lifecycle Operator (FLO) creates a PersistentVolumeClaim (PVC) with RWX access mode and the required naming. Kubernetes then uses an RWX‑capable StorageClass to provision a PersistentVolume (PV) automatically.
These persistent volumes store important operational data such as core files, statistics, and other files that must remain available across pod restarts and node reboots.
For more information on StorageClass behavior, see https://kubernetes.io/docs/concepts/storage/storage-classes/.
Create storage class¶
Follow these steps to configure an NFS‑based StorageClass.
Install the NFS CSI driver.
helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts
helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs \ --namespace kube-system \ --set kubeletDir=/var/lib/kubelet
List the CSI driver pods:
kubectl get pods --selector app.kubernetes.io/name=csi-driver-nfs --namespace kube-system
Sample output
NAME READY STATUS RESTARTS AGE csi-nfs-controller-7dfdf8bb86-h6b2q 5/5 Running 0 32h csi-nfs-node-9s784 3/3 Running 0 32h csi-nfs-node-ccld9 3/3 Running 0 32h
List the available CSI drivers:
kubectl get csidrivers
Sample output
NAME ATTACHREQUIRED PODINFOONMOUNT STORAGECAPACITY TOKENREQUESTS REQUIRESREPUBLISH MODES AGE nfs.csi.k8s.io false false false <unset> false Persistent 32h
Create the StorageClass configuration file.
Create a file named
storageclass.yamlwith the following example configuration:allowVolumeExpansion: true apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: annotations: storageclass.kubernetes.io/is-default-class: "true" name: nfs parameters: share: server: provisioner: nfs.csi.k8s.io reclaimPolicy: Delete volumeBindingMode: Immediate mountOptions: - hard - nfsvers=4.0
Update values in
storageclass.yamlbefore applying it:Set
parameters.shareto the path where PVCs should be created.Set
parameters.serverto the external NFS server address.
Apply the StorageClass.
kubectl apply -f storageclass.yaml
Verify the StorageClass.
kubectl get storageclass
Sample output
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs (default) nfs.csi.k8s.io Delete Immediate true 31h
Set the NFS StorageClass as the default.
kubectl patch storageclass nfs -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'
Verify the NFS StorageClass.
kubectl get storageclass
Sample output
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE nfs (default) nfs.csi.k8s.io Delete Immediate true 12d
Next steps¶
To continue preparing your cluster, go to Configure the SR-IOV Network Device Plugin.