Helm Installation
The recommended way to deploy the flexFS CSI driver is with the provided Helm chart.
Prerequisites
Section titled “Prerequisites”- Kubernetes 1.25 or later
- Helm 3
/dev/fuseavailable on all worker nodes (most Linux distributions include it by default)- Cluster must allow privileged pods in the
kube-systemnamespace (the node DaemonSet requires privileged mode for FUSE access)
Chart overview
Section titled “Chart overview”| Field | Value |
|---|---|
| Chart name | flexfs-csi-driver |
| Chart type | application |
| Home | https://flexfs.io |
| Default namespace | kube-system |
Default values
Section titled “Default values”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 |
Installation
Section titled “Installation”# Add chart from a local directory (included in the flexFS distribution)helm install flexfs-csi ./csi/k8s/helm \ --namespace kube-systemTo customize values:
helm install flexfs-csi ./csi/k8s/helm \ --namespace kube-system \ --set deployment.replicas=3 \ --set driver.imagePullPolicy=IfNotPresentOr use a values override file:
helm install flexfs-csi ./csi/k8s/helm \ --namespace kube-system \ -f my-values.yamlWhat gets created
Section titled “What gets created”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 |
RBAC permissions
Section titled “RBAC permissions”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 |
Controller Deployment
Section titled “Controller Deployment”The controller runs two containers:
- flexfs-csi-driver — the CSI driver process
- 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.
Node DaemonSet
Section titled “Node DaemonSet”The node DaemonSet runs two containers on every node:
- flexfs-csi-driver — the CSI driver process, running in privileged mode
- 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.
Upgrading
Section titled “Upgrading”helm upgrade flexfs-csi ./csi/k8s/helm \ --namespace kube-systemUninstalling
Section titled “Uninstalling”helm uninstall flexfs-csi --namespace kube-systemNext steps
Section titled “Next steps”- Create a Secret with admin server credentials for dynamic provisioning
- Create a PV/PVC for static provisioning
- Review the full Configuration reference