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)

| Field | Value | |---|---| | Chart name | flexfs-csi-driver | | Chart type | application | | Home | https://flexfs.io | | Default namespace | kube-system |

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

| Key | Default | Description | |---|---|---| | csiDriver.name | csi.flexfs.io | Name of the CSIDriver object | | clusterRole.name | flexfs-csi-controller | ClusterRole name | | clusterRoleBinding.name | flexfs-csi-controller | ClusterRoleBinding name | | serviceAccount.name | flexfs-csi-controller | ServiceAccount name | | serviceAccount.namespace | kube-system | ServiceAccount namespace | | deployment.name | flexfs-csi-controller | Controller Deployment name | | deployment.namespace | kube-system | Controller Deployment namespace | | deployment.app | flexfs-csi-controller | Controller pod label | | deployment.replicas | 2 | Controller replica count | | daemonSet.name | flexfs-csi-node | Node DaemonSet name | | daemonSet.namespace | kube-system | Node DaemonSet namespace | | daemonSet.app | flexfs-csi-node | Node pod label | | driver.image | flexfs/csi-driver-<MAJOR>.<MINOR>:latest | CSI driver container image | | driver.imagePullPolicy | Always | Image pull policy | | driver.name | flexfs-csi-driver | Container 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:

| Resource | Kind | Name | |---|---|---| | CSI driver registration | CSIDriver | csi.flexfs.io | | Service account | ServiceAccount | flexfs-csi-controller | | Cluster role | ClusterRole | flexfs-csi-controller | | Cluster role binding | ClusterRoleBinding | flexfs-csi-controller | | Controller | Deployment | flexfs-csi-controller | | Node plugin | DaemonSet | flexfs-csi-node |

The ClusterRole grants the controller the following access:

| API group | Resources | Verbs | |---|---|---| | storage.k8s.io | csinodes | get, list, watch | | "" (core) | events | create, list, patch, update, watch | | "" (core) | nodes | get, list, watch | | "" (core) | persistentvolumeclaims | get, list, update, watch | | "" (core) | persistentvolumes | create, delete, get, list, watch | | "" (core) | secrets | get, list | | storage.k8s.io | storageclasses | get, 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:

| Volume | Host path | Container path | Purpose | |---|---|---|---| | driver-dir | /var/lib/kubelet/plugins/csi.flexfs.io | /csi | CSI socket | | kubelet-dir | /var/lib/kubelet | /var/lib/kubelet | Bidirectional mount propagation for FUSE | | registration-dir | /var/lib/kubelet/plugins_registry | /registration | kubelet 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