ℹ️ Info
Outcome: Required namespaces and the VAST DataEngine operator are running on the Kubernetes cluster.
Before you begin: Install RKE2, configure kubectl, and obtain the VAST Zarf DataEngine package for your supported VAST AI OS release.
Previous: Install the VAST CSI Driver | Next: Connect DataEngine to the Kubernetes Cluster and Registry
Install the VAST Zarf DataEngine package
Ensure you have a valid Kubeconfig file for connecting to the Kubernetes cluster.
echo $KUBECONFIGExample Output
/home/vastdata/.kubeconfig/rke2.yamlVerify the inotify limits
To check current limits:
sysctl fs.inotify.max_user_instances; sysctl fs.inotify.max_user_watchesExample Output
fs.inotify.max_user_instances = 128
fs.inotify.max_user_watches = 61656To increase the limits temporarily:
sudo sysctl fs.inotify.max_user_instances=8192; sudo sysctl fs.inotify.max_user_watches=524288Expected Output
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 524288To make the change permanent:
echo "fs.inotify.max_user_instances=8192" | sudo tee -a /etc/sysctl.conf; echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf; sudo sysctl -pExpected Output
fs.inotify.max_user_instances=8192
fs.inotify.max_user_watches=524288
fs.inotify.max_user_instances = 8192
fs.inotify.max_user_watches = 524288Obtain the DataEngine package
Find your VAST AI OS release version

If you are a VAST SE:
Open a DataEngine OCTO request using the internal form.
If you are a VAST Partner or Customer:
Provide your VAST Account Team with the version string from above and they will generate a URL for you.
The URL generated in this example is:
https://vastdata-releases.s3.amazonaws.com/release_bundles/service-packs/release-5.4.3-sp5/dataengine/dataengine_offline-2459535.vast.tar.gz?AWSAccessKeyId=AKIARTN2ZMSY5WYRAXHB&Signature=vHag%2By8%2B91kewGLKk3D%2BG0yDqF4%3D&Expires=1786982326Download the package to the manager node
wget "https://vastdata-releases.s3.amazonaws.com/release_bundles/service-packs/release-5.4.3-sp5/dataengine/dataengine_offline-2459535.vast.tar.gz?AWSAccessKeyId=AKIARTN2ZMSY5WYRAXHB&Signature=vHag%2By8%2B91kewGLKk3D%2BG0yDqF4%3D&Expires=1786982326" -O dataengine_offline-2459535.vast.tar.gzExtract and initialize the Zarf package
Extract the VAST Zarf DataEngine package
mkdir -p zarf && tar -xzvf dataengine_offline-2459535.vast.tar.gz -C zarfuse ls -l to verify files have been extracted
cd zarf; ls -lExample Output
total 2498024
-rw------- 1 vastdata vastdata 706464698 May 20 14:29 vast-builder.tar.gz
drwxrwxr-x 3 vastdata vastdata 4096 Aug 10 20:02 vast-cli
-rwxrwxr-x 1 vastdata vastdata 171475128 Aug 14 2025 zarf
-rw-rw-r-- 1 vastdata vastdata 81193896 Oct 9 2025 zarf-init-amd64-v0.60.0.tar.zst
-rw-rw-r-- 1 vastdata vastdata 73371902 Sep 17 2025 zarf-init-upstream-amd64-v0.60.0.tar.zst
-rw-rw-r-- 1 vastdata vastdata 1525440916 May 20 14:28 zarf-package-dataengine-amd64-1.0.0.tar.zstℹ️ Info
If you are running a version of VAST Cluster prior to 5.4.1-sp2, run the below command before you proceed:
if [ -f vast-zarf-mutator-amd64-v0.60.0.tar.zst ]; then
mv vast-zarf-mutator-amd64-v0.60.0.tar.zst zarf-init-amd64-v0.60.0.tar.zst
fiInitialize Zarf with the VAST CSI driver
Use kubectl to see storage classes
kubectl get storageclassExample Output
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
vast-nfs (default) csi.vastdata.com Delete Immediate true 7d4hrun zarf init with the following options :
./zarf init --architecture amd64 zarf-init-amd64-v0.60.0.tar.zst --set REGISTRY_HPA_AUTO_SIZE=true --confirm --log-level debug --storage-class=vast-nfsThis can take a few minutes depending on available resources.
Example Output
<snip>
2026-08-11 14:49:23 INF init complete. To get credentials for Zarf deployed services run `zarf tools get-creds`Initialize Zarf with local storage
If you do not have the VAST CSI Driver:
Installing local-path
Apply the manifest from Rancher's repository and annotate the local-path resource to mark it as the default StorageClass.
Deploy Local Path Provisioner
kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yamlSet local-path as the Default StorageClass
Annotate the local-path StorageClass so Kubernetes automatically assigns it to new PersistentVolumeClaims (PVCs):
kubectl patch storageclass local-path -p '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"true"}}}'run zarf init with the following options :
./zarf init --architecture amd64 zarf-init-amd64-v0.60.0.tar.zst --set REGISTRY_HPA_AUTO_SIZE=true --confirm --log-level debug --storage-class=local-pathThis can take a few minutes depending on available resources.
Example Output
<snip>
2026-08-11 14:49:23 INF init complete. To get credentials for Zarf deployed services run `zarf tools get-creds`Create and label the Kubernetes namespaces
Add the following labels to the Kubernetes namespace:
create_namespace_for_zarf(){
local namespace=$1
kubectl create ns $namespace || true
kubectl label namespace $namespace zarf.dev/vast=mutate
}
create_namespace_for_zarf vast-dataengine
create_namespace_for_zarf knative-eventing
create_namespace_for_zarf knative-serving
create_namespace_for_zarf vast-pipelinesExpected Output
namespace/vast-dataengine created
namespace/vast-dataengine labeled
namespace/knative-eventing created
namespace/knative-eventing labeled
namespace/knative-serving created
namespace/knative-serving labeledVerify that you have all of the namespaces
kubectl get nsExample Output
NAME STATUS AGE
default Active 62m
knative-eventing Active 58s
knative-serving Active 57s
kube-node-lease Active 62m
kube-public Active 62m
kube-system Active 62m
vast-csi Active 32m
vast-dataengine Active 58s
zarf Active 6m53sInstall the VAST DataEngine operator
Run zarf package deploy with the following options:
./zarf package deploy --architecture amd64 zarf-package-dataengine*.tar.zst --confirm --log-level debugExample Output
2026-08-11 15:03:39 INF running health checks chart=vast-serverless
2026-08-11 15:03:40 DBG done processing Helm chart name=vast-serverless duration=1m7.483781224s
2026-08-11 15:03:40 DBG done deploying component name=vast-serverless duration=2m34.996325919s
2026-08-11 15:03:40 DBG deployment complete duration=5m28.57834808sValidate Pods are created
kubectl get pods -n knative-eventing
kubectl get pods -n vast-dataengineExample Output
$ kubectl get pods -n knative-eventing
NAME READY STATUS RESTARTS AGE
eventing-controller-97d8fd766-t8n48 1/1 Running 0 86s
eventing-webhook-6c8f9fb4f9-gjzc8 1/1 Running 0 85s
imc-controller-7cdc9cc88-mgr2k 1/1 Running 0 80s
imc-dispatcher-574bfd84c7-bl595 1/1 Running 0 80s
job-sink-5574cb78d8-vjbdg 1/1 Running 0 86s
kafka-broker-dispatcher-0 1/1 Running 0 108s
kafka-broker-receiver-75547cc84d-jwkr8 1/1 Running 0 108s
kafka-controller-8486fcc78d-dnb9s 1/1 Running 0 74s
kafka-controller-post-install-eventing-1.17.1-lpm62 0/1 Completed 0 72s
kafka-source-dispatcher-0 1/1 Running 0 70s
kafka-webhook-eventing-6bc57cf945-9dw6g 1/1 Running 0 73s
knative-kafka-storage-version-migrator-eventing-1.17.1-2dbc4 0/1 Completed 0 72s
mt-broker-controller-7d7c874d4d-wgwng 1/1 Running 0 78s
mt-broker-filter-7795c7468c-jw94q 1/1 Running 0 79s
mt-broker-ingress-9b46b84f6-kjd9n 1/1 Running 0 78s
storage-version-migration-eventing-eventing-1.17.1-t4mwg 0/1 Completed 0 77s
$ kubectl get pods -n vast-dataengine
NAME READY STATUS RESTARTS AGE
keda-admission-webhooks-95c8dc6f4-jcj9q 1/1 Running 0 5m14s
keda-operator-846d96d678-nd8mj 1/1 Running 1 (5m8s ago) 5m14s
keda-operator-metrics-apiserver-575c49b475-g5l2j 1/1 Running 0 5m14s
knative-operator-55f4bd4679-s26pf 1/1 Running 0 6m26s
operator-webhook-6cdd696bcf-c4t4r 1/1 Running 0 6m26s
vast-operator-controller-manager-86f5795d56-4l2wl 1/1 Running 0 2m10s
vast-telemetries-collector-56db6d769b-9jd2d 1/1 Running 0 115s
vast-telemetries-collector-56db6d769b-dxpff 1/1 Running 0 115s
vast-telemetries-collector-56db6d769b-km9rh 1/1 Running 0 115s
vast-telemetries-collector-56db6d769b-lp4zs 1/1 Running 0 2m10s
vast-telemetries-collector-56db6d769b-xffv2 1/1 Running 0 115s$
$