ℹ️ Info
Outcome: The VAST CSI driver is installed and can dynamically provision a persistent volume claim. This section is optional but recommended.
Before you begin: Install the RKE2 cluster and complete the optional CSI tenant, view, policy, and service-account setup.
Previous: Create a Podman Registry for the RKE2 Cluster | Next: Install DataEngine Prerequisites on the Kubernetes Cluster
Install Helm
Install Helm on the manager node only. The remaining cluster nodes do not need Helm.
Helm is typically downloaded as a binary.
Quickstart is a good place to start learning about Helm.
Download the Helm archive
On the manager node
cd ~
wget https://get.helm.sh/helm-v4.2.3-linux-amd64.tar.gzExample Output
--2026-07-31 17:25:59-- https://get.helm.sh/helm-v4.2.3-linux-amd64.tar.gz
Resolving get.helm.sh (get.helm.sh)... 13.107.253.71, 13.107.226.71, 2620:1ec:48:1::71, ...
Connecting to get.helm.sh (get.helm.sh)|13.107.253.71|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 19812941 (19M) [application/x-tar]
Saving to: ‘helm-v4.2.3-linux-amd64.tar.gz’
helm-v4.2.3-linux-amd64.tar.gz 100%[===============================================================================================>] 18.89M 55.3MB/s in 0.3s
2026-07-31 17:25:59 (55.3 MB/s) - ‘helm-v4.2.3-linux-amd64.tar.gz’ saved [19812941/19812941]Extract the Helm archive
tar -xzvf helm-v4.2.3-linux-amd64.tar.gzCopy the binary to /usr/local/bin
sudo cp linux-amd64/helm /usr/local/bin/
sudo chmod 555 /usr/local/bin/helmInstall VAST CSI Driver
Install Custom Resource Definitions for snapshots
Run the following commands on the manager node
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v7.0.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v7.0.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v7.0.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v7.0.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v7.0.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yamlAdd the Helm Repository for VAST CSI Driver
Add the Helm repository that contains the VAST CSI Driver Helm chart to the list of available repositories:
Add the Helm repository for VAST CSI Driver:
helm repo add vastcsi https://vast-data.github.io/vast-csiExpected Output
"vastcsi" has been added to your repositoriesVerify that the repository has been added:
helm repo listThe output is similar to the following:
NAME URL
vastcsi https://vast-data.github.io/vast-csiCreate a Kubernetes Namespace for VAST CSI Driver
kubectl create ns vast-csiExpected Output
namespace/vast-csi createdVerify the Namespace
kubectl get nsExample Output
NAME STATUS AGE
default Active 3d18h
kube-node-lease Active 3d18h
kube-public Active 3d18h
kube-system Active 3d18h
vast-csi Active 2d19hCreate a Kubernetes Secret for VAST CSI Driver
Create secret.yaml
Modify the values in the YAML below to match your environment
Field | Description |
|---|---|
| Name for the Kubernetes secret |
| VMS IP address of the VAST Cluster |
| CSI Driver service account created earlier |
| Password for the CSI Driver service account |
| Tenant created for the VAST CSI Driver |
apiVersion: v1
kind: Secret
metadata:
name: de-lab-csi
type: Opaque
stringData:
endpoint: "10.143.12.206"
username: "de-lab-csi-driver"
password: "<csi-driver-password>"
tenant: "de-lab-csi"Run the command
kubectl apply -f secret.yaml -n vast-csiExpected Output
secret/de-lab-csi createdVerify Secret
kubectl get secret -n vast-csiExample Output
NAME TYPE DATA AGE
de-lab-csi Opaque 3 60sCreate a Helm Chart Configuration File for VAST CSI Driver
Create values.yaml
Modify the values in the YAML below to match your environment
| VIP Pool used for CSI Tenant |
| View Policy created for CSI |
| Name of the secret that was just created |
truncateVolumeName: 128
storageClasses:
vast-nfs:
vipPool: "de-lab-csi-vippool"
storagePath: "/k8s/csi/pvcs"
viewPolicy: "de-lab-csi-policy"
volumeNameFormat: "csi:{namespace}:{name}:{id}"
ephemeralVolumeNameFormat: "csi:{namespace}:{name}:{id}"
mountOptions:
- vers=3
- proto=tcp
- nconnect=16
secretName: "de-lab-csi"
secretNamespace: "vast-csi"
setDefaultStorageClass: true
controller:
runOnMaster: false
runOnControlPlane: false
nodeSelector:
node-role.kubernetes.io/control-plane: "true"Test the config file
helm template csi-driver vastcsi/vastcsi -f values.yamlExample output (very long)
---
# Source: vastcsi/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: csi-driver-vast-controller-sa
namespace: "default"
labels:
helm.sh/chart: vastcsi-2.6.5
app.kubernetes.io/name: vastcsi
app.kubernetes.io/instance: csi-driver
app.kubernetes.io/managed-by: Helm
---
# Source: vastcsi/templates/serviceaccount.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: csi-driver-vast-node-sa
namespace: "default"
labels:
helm.sh/chart: vastcsi-2.6.5
app.kubernetes.io/name: vastcsi
app.kubernetes.io/instance: csi-driver
app.kubernetes.io/managed-by: Helm
<snip> Install the VAST CSI Driver Helm Chart
Refresh Helm repository information:
helm repo updateExample Output
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "vastcsi" chart repository
Update Complete. ⎈Happy Helming!⎈Run the following command to initiate the install:
helm install <release name> <repo>/<chart> -f <filename>.yaml -n <namespace>For example:
helm install csi-driver vastcsi/vastcsi -f values.yaml -n vast-csiExample Output
NAME: csi-driver
LAST DEPLOYED: Mon Aug 3 15:29:36 2026
NAMESPACE: vast-csi
STATUS: deployed
REVISION: 1
DESCRIPTION: Install complete
TEST SUITE: None
NOTES:
Thank you for installing vastcsi.
Your release is named csi-driver.
The release is installed in namespace vast-csi
To learn more about the release, try:
$ helm status -n vast-csi csi-driver
$ helm get all -n vast-csi csi-driver
Examples on how to configure a storage class and start using the driver are here:
https://support.vastdata.com/s/topic/0TOV400000026yzOAA/vast-csi-driverValidate the install
helm status -n vast-csi csi-driverExample Output
NAME: csi-driver
LAST DEPLOYED: Mon Aug 3 15:29:36 2026
NAMESPACE: vast-csi
STATUS: deployed
REVISION: 1
DESCRIPTION: Install complete
RESOURCES:
==> v1/StorageClass
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
vast-nfs (default) csi.vastdata.com Delete Immediate true 4m37s
==> v1/ClusterRole
NAME CREATED AT
csi-driver-vast-provisioner-role 2026-08-03T15:29:36Z
csi-driver-vast-attacher-role 2026-08-03T15:29:36Z
csi-driver-external-resizer-runner 2026-08-03T15:29:36Z
==> v1/ClusterRoleBinding
NAME ROLE AGE
csi-driver-vast-provisioner-binding ClusterRole/csi-driver-vast-provisioner-role 4m37s
csi-driver-vast-attacher-binding ClusterRole/csi-driver-vast-attacher-role 4m37s
csi-driver-resizer-role ClusterRole/csi-driver-external-resizer-runner 4m37s
==> v1/DaemonSet
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE
csi-vast-node 6 6 6 6 6 <none> 4m37s
==> v1/Pod(related)
NAME READY STATUS RESTARTS AGE
csi-vast-node-8xvtp 2/2 Running 0 4m36s
csi-vast-node-bv69k 2/2 Running 0 4m36s
csi-vast-node-kpvgl 2/2 Running 0 4m36s
csi-vast-node-lfgmj 2/2 Running 0 4m36s
csi-vast-node-r5fmr 2/2 Running 0 4m36s
csi-vast-node-v5xlh 2/2 Running 0 4m36s
csi-vast-controller-777b946659-vcjkk 5/5 Running 0 4m36s
==> v1/Deployment
NAME READY UP-TO-DATE AVAILABLE AGE
csi-vast-controller 1/1 1 1 4m36s
==> v1/CSIDriver
NAME ATTACHREQUIRED PODINFOONMOUNT STORAGECAPACITY TOKENREQUESTS REQUIRESREPUBLISH MODES AGE
csi.vastdata.com true true false <unset> false Persistent,Ephemeral 4m36s
==> v1/ServiceAccount
NAME AGE
csi-driver-vast-controller-sa 4m37s
csi-driver-vast-node-sa 4m37s
TEST SUITE: None
NOTES:
Thank you for installing vastcsi.
Your release is named csi-driver.
The release is installed in namespace vast-csi
To learn more about the release, try:
$ helm status -n vast-csi csi-driver
$ helm get all -n vast-csi csi-driver
Examples on how to configure a storage class and start using the driver are here:
https://support.vastdata.com/s/topic/0TOV400000026yzOAA/vast-csi-driverAlso run
helm list -n vast-csiExample Output
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
csi-driver vast-csi 1 2026-08-03 15:29:36.664472551 +0000 UTC deployed vastcsi-2.6.5Additional Validations
kubectl get storageclassNAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
vast-nfs (default) csi.vastdata.com Delete Immediate true 13mkubectl get csidriversNAME ATTACHREQUIRED PODINFOONMOUNT STORAGECAPACITY TOKENREQUESTS REQUIRESREPUBLISH MODES AGE
csi.vastdata.com true true false <unset> false Persistent,Ephemeral 14mkubectl get pods -n vast-csi -o wideNAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
csi-vast-controller-777b946659-vcjkk 5/5 Running 0 14m 10.144.19.53 ubuntu-03 <none> <none>
csi-vast-node-8xvtp 2/2 Running 0 14m 10.144.19.55 ubuntu-05 <none> <none>
csi-vast-node-bv69k 2/2 Running 0 14m 10.144.19.51 ubuntu-01 <none> <none>
csi-vast-node-kpvgl 2/2 Running 0 14m 10.144.19.56 ubuntu-06 <none> <none>
csi-vast-node-lfgmj 2/2 Running 0 14m 10.144.19.54 ubuntu-04 <none> <none>
csi-vast-node-r5fmr 2/2 Running 0 14m 10.144.19.52 ubuntu-02 <none> <none>
csi-vast-node-v5xlh 2/2 Running 0 14m 10.144.19.53 ubuntu-03 <none> <none>Create a PVC
Create a configuration file for a PVC (testpvc.yaml)as follows:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: vast-pvc-1
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi
storageClassName: vast-nfsApply the PVC configuration file:
kubectl apply -f testpvc.yaml -n vast-csiExpected Output
persistentvolumeclaim/vast-pvc-1 createdVerify that the PVC has been created with the following commands:
kubectl get pvc -n vast-csiExample Output
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE
vast-pvc-1 Bound pvc-c4090c55-09f4-4756-ac4e-2cc62eeb55f9 1Gi RWX vast-nfs <unset> 5m36skubectl get pvExample Output
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE
pvc-fab55a5d-3b8b-4c54-8c2a-31c50a4199a8 1Gi RWX Delete Bound vast-csi/vast-pvc-1 vast-nfs <unset> 19sIn Element Store → Views

In Element Store → Quotas
