Overview

At this point the CSI driver should be installed and configured.

Important

Most examples below assumes there's a Secret named "hpe-file-backend" in the "hpe-storage" Namespace. Learn how to add Secrets in the Deployment section.

PVC Access Modes

The HPE GreenLake File Storage CSI Driver is primarily a ReadWriteMany (RWX) CSI implementation for file based storage. The CSI driver also supports ReadWriteOnce (RWO) and ReadOnlyMany (ROX).

Access Mode Abbreviation Use Case
ReadWriteOnce RWO For high performance Pods where access to the PVC is exclusive to one host at a time.
ReadWriteOncePod RWOP Exclusive access by a single Pod. Not currently supported by the CSI driver.
ReadWriteMany RWX For shared filesystems where multiple Pods in the same Namespace need simultaneous access to a PVC across multiple nodes.
ReadOnlyMany ROX Read-only representation of RWX.

ReadWriteOnce and access by multiple Pods

Pods that require access to the same "ReadWriteOnce" (RWO) PVC needs to reside on the same node and Namespace by using selectors or affinity scheduling rules applied when deployed. If not configured correctly, the Pod will fail to start and will throw a "Multi-Attach" error in the event log if the PVC is already attached to a Pod that has been scheduled on a different node within the cluster.

Enabling CSI Snapshots

Support for VolumeSnapshotClasses and VolumeSnapshots is available from Kubernetes 1.17+. The snapshot CRDs and the common snapshot controller needs to be installed manually. As per Kubernetes TAG Storage, these should not be installed as part of a CSI driver and should be deployed by the Kubernetes cluster vendor or user.

Ensure the snapshot CRDs and common snapshot controller hasn't been installed already.

kubectl get crd volumesnapshots.snapshot.storage.k8s.io \
  volumesnapshotcontents.snapshot.storage.k8s.io \
  volumesnapshotclasses.snapshot.storage.k8s.io

Vendors may package, name and deploy the common snapshot controller using their own naming conventions. Run the command below and look for workload names that contain "snapshot".

kubectl get sts,deploy -A

If no prior CRDs or controllers exist, install the snapshot CRDs and common snapshot controller (once per Kubernetes cluster, independent of any CSI drivers).

# Kubernetes 1.28-1.31
git clone https://github.com/kubernetes-csi/external-snapshotter
cd external-snapshotter
git checkout tags/v8.0.1 -b hpe-greenlake-for-file-csi-driver-v1.0.0-beta
kubectl kustomize client/config/crd | kubectl create -f-
kubectl -n kube-system kustomize deploy/kubernetes/snapshot-controller | kubectl create -f-

Tip

The provisioning section contains examples on how to create a VolumeSnapshotClass and VolumeSnapshot objects.

Base StorageClass Parameters

This serve as a base StorageClass using the most common scenario.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: hpe-file-standard
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
provisioner: filex.csi.hpe.com
parameters:
  csi.storage.k8s.io/provisioner-secret-name: hpe-file-backend
  csi.storage.k8s.io/provisioner-secret-namespace: hpe-storage
  csi.storage.k8s.io/controller-publish-secret-name: hpe-file-backend
  csi.storage.k8s.io/controller-publish-secret-namespace: hpe-storage
  csi.storage.k8s.io/node-publish-secret-name: hpe-file-backend
  csi.storage.k8s.io/node-publish-secret-namespace: hpe-storage
  csi.storage.k8s.io/controller-expand-secret-name: hpe-file-backend
  csi.storage.k8s.io/controller-expand-secret-namespace: hpe-storage
  root_export: /my-volumes
  view_policy: my-view-policy-1
  vip_pool_name: my-pool-1
reclaimPolicy: Delete
volumeBindingMode: Immediate
allowVolumeExpansion: true

Important

Replace "hpe-file-backend" with a Secret relevant to the backend being referenced. See Deployment on how to create a Secret.

HPE GreenLake for File Storage CSI Driver StorageClass parameters.

Parameter Required String Description
root_export Yes Text Folder on the appliance to create new PersistentVolumes in.
view_policy Yes Text Existing View Policy on the appliance.
vip_pool_name No* Text Existing VIP Pool on the appliance.
vip_pool_fqdn No* Text Existing DNS name with multiple A records that maps to IP addresses in a VIP Pool.
use_local_ip_for_mount No Text Hard coded IP address for the NFS server. Has no effect if vip_pool_name or vip_pool_fqdn is set.
qos_policy No Text Existing QoS Policy on the appliance.

* = Mutually exclusive.

Tip

Guidance on how to create the necessary resources such as a VIP Pool, View Policy, and QoS Policy on the appliance, check out the official HPE GreenLake for File Storage: Cluster Administrator Guide

NFS Protocol Version

The CSI driver will by default mount NFS exports with version 3. To use version 4.1, add nfsvers=4 to "mountOptions" in the StorageClass.

mountOptions:
  - nfsvers=4

Provisioning Concepts

These instructions are provided as an example on how to use common Kubernetes resources with the CSI driver.

New to Kubernetes?

There's a basic tutorial of how dynamic provisioning of persistent storage on Kubernetes works in the Video Gallery.

Create a PersistentVolumeClaim from a StorageClass

The steps in the HPE CSI Driver for Kubernetes section of SCOD outlines the basic concepts of creating a PVC from a StorageClass. Skip the steps creating a HPE CSI Driver for Kubernetes StorageClass.

Using CSI Snapshots

CSI introduces snapshots as native objects in Kubernetes that allows end-users to provision VolumeSnapshot objects from an existing PersistentVolumeClaim. New PVCs may then be created using the snapshot as a source.

Tip

Ensure CSI snapshots are enabled.
There's a tutorial in the Video Gallery on how to use CSI snapshots and clones.

Start by creating a VolumeSnapshotClass referencing the Secret and defining additional snapshot parameters.

apiVersion: snapshot.storage.k8s.io/v1
driver: filex.csi.hpe.com
deletionPolicy: Delete
kind: VolumeSnapshotClass
metadata:
  name: hpe-file-snapshot
  annotations:
    snapshot.storage.kubernetes.io/is-default-class: "true"
parameters:
  csi.storage.k8s.io/snapshotter-secret-name: hpe-file-backend
  csi.storage.k8s.io/snapshotter-secret-namespace: hpe-storage
  csi.storage.k8s.io/snapshotter-list-secret-name: hpe-file-backend
  csi.storage.k8s.io/snapshotter-list-secret-namespace: hpe-storage

Once a VolumeSnapshotClass has been created, follow the steps outlined in the HPE CSI Driver section for using CSI snapshots.

Expanding PVCs

Instructions on how to expand an existing PVC is available in the HPE CSI Driver section for expanding PVCs.

Further Reading

The official Kubernetes documentation contains comprehensive documentation on how to markup PersistentVolumeClaim and StorageClass resources to tweak certain behaviors. Including volumeBindingMode and mountOptions.