Skip to content

Helm Installation

The recommended way to deploy the flexFS CSI driver is with the provided Helm chart.

  • Kubernetes 1.25 or later
  • Helm 3
  • /dev/fuse available on all worker nodes (most Linux distributions include it by default)
  • Cluster must allow privileged pods in the kube-system namespace (the node DaemonSet requires privileged mode for FUSE access)
FieldValue
Chart nameflexfs-csi-driver
Chart typeapplication
Homehttps://flexfs.io
Default namespacekube-system

The following table lists the configurable values in values.yaml and their defaults:

KeyDefaultDescription
csiDriver.namecsi.flexfs.ioName of the CSIDriver object
clusterRole.nameflexfs-csi-controllerClusterRole name
clusterRoleBinding.nameflexfs-csi-controllerClusterRoleBinding name
serviceAccount.nameflexfs-csi-controllerServiceAccount name
serviceAccount.namespacekube-systemServiceAccount namespace
deployment.nameflexfs-csi-controllerController Deployment name
deployment.namespacekube-systemController Deployment namespace
deployment.appflexfs-csi-controllerController pod label
deployment.replicas2Controller replica count
daemonSet.nameflexfs-csi-nodeNode DaemonSet name
daemonSet.namespacekube-systemNode DaemonSet namespace
daemonSet.appflexfs-csi-nodeNode pod label
driver.imageflexfs/csi-driver-<MAJOR>.<MINOR>:latestCSI driver container image
driver.imagePullPolicyAlwaysImage pull policy
driver.nameflexfs-csi-driverContainer name
Terminal window
# Add chart from a local directory (included in the flexFS distribution)
helm install flexfs-csi ./csi/k8s/helm \
--namespace kube-system

To customize values:

Terminal window
helm install flexfs-csi ./csi/k8s/helm \
--namespace kube-system \
--set deployment.replicas=3 \
--set driver.imagePullPolicy=IfNotPresent

Or use a values override file:

Terminal window
helm install flexfs-csi ./csi/k8s/helm \
--namespace kube-system \
-f my-values.yaml

The chart installs six Kubernetes resources:

ResourceKindName
CSI driver registrationCSIDrivercsi.flexfs.io
Service accountServiceAccountflexfs-csi-controller
Cluster roleClusterRoleflexfs-csi-controller
Cluster role bindingClusterRoleBindingflexfs-csi-controller
ControllerDeploymentflexfs-csi-controller
Node pluginDaemonSetflexfs-csi-node

The ClusterRole grants the controller the following access:

API groupResourcesVerbs
storage.k8s.iocsinodesget, list, watch
"" (core)eventscreate, list, patch, update, watch
"" (core)nodesget, list, watch
"" (core)persistentvolumeclaimsget, list, update, watch
"" (core)persistentvolumescreate, delete, get, list, watch
"" (core)secretsget, list
storage.k8s.iostorageclassesget, list, watch

The controller runs two containers:

  1. flexfs-csi-driver — the CSI driver process
  2. csi-provisioner (registry.k8s.io/sig-storage/csi-provisioner:v3.6.4) — the external provisioner that watches for PVCs and calls CreateVolume/DeleteVolume

The controller pods use the system-cluster-critical priority class and tolerate CriticalAddonsOnly. They are scheduled only on Linux nodes.

The node DaemonSet runs two containers on every node:

  1. flexfs-csi-driver — the CSI driver process, running in privileged mode
  2. csi-node-driver-registrar (registry.k8s.io/sig-storage/csi-node-driver-registrar:v2.10.1) — registers the CSI driver with kubelet

Key volume mounts on the node pods:

VolumeHost pathContainer pathPurpose
driver-dir/var/lib/kubelet/plugins/csi.flexfs.io/csiCSI socket
kubelet-dir/var/lib/kubelet/var/lib/kubeletBidirectional mount propagation for FUSE
registration-dir/var/lib/kubelet/plugins_registry/registrationkubelet plugin registration

The DaemonSet uses OnDelete update strategy, system-node-critical priority class, and tolerates all taints.

Terminal window
helm upgrade flexfs-csi ./csi/k8s/helm \
--namespace kube-system
Terminal window
helm uninstall flexfs-csi --namespace kube-system