Chart version: 1.2.0
Api version: v1
App version: 1.2.0
A Helm chart for Pure Service Orchestrator CSI driver
Chart Type
Set me up:
helm repo add center https://repo.chartcenter.io
Install Chart:
helm install pure-csi center/purestorage/pure-csi
Versions (0)


This helm chart installs the CSI plugin on a Kubernetes cluster.

Platform and Software Dependencies

  • #### Operating Systems Supported*:
    • CentOS 7
    • CoreOS (Ladybug 1298.6.0 and above)
    • RHEL 7
    • Ubuntu 16.04
    • Ubuntu 18.04
  • #### Environments Supported*:
    • Kubernetes 1.13+
    • Minimum Helm version required is 3.1.0.
    • Google Anthos 1.2.x
    • Docker Kuberenetes Service (DKS) - based on Docker EE 3.0 with Kubernetes 1.14.3
    • Platform9 Managed Kubernetes (PMK) - Privileged mode only
  • #### Other software dependencies:
    • Latest linux multipath software package for your operating system (Required)
    • Latest Filesystem utilities/drivers (XFS by default, Required)
    • Latest iSCSI initiator software for your operating system (Optional, required for iSCSI connectivity)
    • Latest NFS software package for your operating system (Optional, required for NFS connectivity)
    • Latest FC initiator software for your operating system (Optional, required for FC connectivity, FC Supported on Bare-metal K8s installations only)
  • #### FlashArray and FlashBlade:

* Please see release notes for details

Additional configuration for Kubernetes 1.13 Only

For details see the CSI documentation. In Kubernetes 1.12 and 1.13 CSI was alpha and is disabled by default. To enable the use of a CSI driver on these versions, do the following:

  1. Ensure the feature gate is enabled via the following Kubernetes feature flag: --feature-gates=CSIDriverRegistry=true
  2. Either ensure the CSIDriver CRD is installed cluster with the following command:
$> kubectl create -f https://raw.githubusercontent.com/kubernetes/csi-api/master/pkg/crd/manifests/csidriver.yaml

CSI Snapshot and Clone features for Kubernetes

More details on using the snapshot and clone functionality can be found here.

Using Per-Volume FileSystem Options with Kubernetes

More details on using customized filesystem options can be found here.

Using Read-Write-Many (RWX) volumes with Kubernetes

More details on using Read-Write-Many (RWX) volumes with Kubernetes can be found here

PSO use of StorageClass

Whilst there are some default StorageClass definitions provided by the PSO installation, refer here for more details on these default storage classes and how to create your own custom storage classes that can be used by PSO.

How to install

Add the Pure Storage helm repo

helm repo add pure https://purestorage.github.io/helm-charts
helm repo update
helm search repo pure-csi

Optional (offline installation): Download the helm chart

git clone https://github.com/purestorage/helm-charts.git

Create your own values.yaml and install the helm chart with it, and keep it. Easiest way is to copy the default ./values.yaml.


The following table lists the configurable parameters and their default values.

Parameter Description Default
image.name The image name to pull from purestorage/k8s
image.tag The image tag to pull 5.2.0
image.pullPolicy Image pull policy Always
app.debug Enable/disable debug mode for app false
storagetopology.enable Enable/disable csi topology feature false
storagetopology.strictTopology Enable/disable csi strict topology feature false
storageclass.createBuiltIn Control to create the built-in StorageClasses ‘pure’, ‘pure-file’ and ‘pure-block’ true
storageclass.isPureDefault Set pure storageclass to the default false
storageclass.pureBackend Set pure storageclass’ default backend type block
clusterrolebinding.serviceAccount.name Name of K8s/openshift service account for installing the plugin pure
flasharray.defaultFSType Block volume default filesystem type. Not recommended to change! xfs
flasharray.defaultFSOpt Block volume default mkfs options. Not recommended to change! -q
flasharray.defaultMountOpt Block volume default filesystem mount options. Not recommended to change! ””
flasharray.iSCSILoginTimeout iSCSI login timeout in seconds. Not recommended to change! 20sec
flasharray.iSCSIAllowedCIDR List of CIDR blocks allowed as iSCSI targets, e.g., Use comma (,) as the separator, and empty string means allowing all addresses. ””
flasharray.preemptAttachments Enable/Disable attachment preemption! true
flasharray.sanType Block volume access protocol, either ISCSI or FC ISCSI
flashblade.snapshotDirectoryEnabled Enable/Disable FlashBlade snapshots false
namespace.pure Namespace for the backend storage k8s
orchestrator.name Orchestrator type, such as openshift, k8s k8s
orchestrator.basePath Base path of the Kubelet, should contain the plugins, plugins_registry, and pods directories. /var/lib/kubelet
*arrays Array list of all the backend FlashArrays and FlashBlades must be set by user, see an example below
mounter.nodeSelector NodeSelectors Select node-labels to schedule CSI node plugin. {}
mounter.tolerations Tolerations []
mounter.affinity Affinity {}
provisioner.nodeSelector NodeSelectors Select node-labels to schedule provisioner. {}
provisioner.tolerations Tolerations []
provisioner.affinity Affinity {}
csi.provisioner.image.name The image name of the csi-provisioner quay.io/k8scsi/csi-provisioner
csi.provisioner.image.pullPolicy Image pull policy Always
csi.clusterDriverRegistrar.image.name The image name of the csi-cluster-driver-registrar quay.io/k8scsi/csi-cluster-driver-registrar
csi.clusterDriverRegistrar.image.pullPolicy Image pull policy Always
csi.nodeDriverRegistrar.image.name The image name of the csi-node-driver-registrar quay.io/k8scsi/csi-node-driver-registrar
csi.nodeDriverRegistrar.image.pullPolicy Image pull policy Always
csi.livenessProbe.image.name The image name of the csi livenessprobe quay.io/k8scsi/livenessprobe
csi.livenessProbe.image.pullPolicy Image pull policy Always
csi.snapshotter.image.name The image name of the csi snapshotter quay.io/k8scsi/csi-snapshotter
csi.snapshotter.image.pullPolicy Image pull policy Always


    - MgmtEndPoint: ""
      APIToken: "a526a4c6-18b0-a8c9-1afa-3499293574bb"
    - MgmtEndPoint: ""
      APIToken: "b526a4c6-18b0-a8c9-1afa-3499293574bb"
    - MgmtEndPoint: ""
      APIToken: "T-c4925090-c9bf-4033-8537-d24ee5669135"
      NfsEndPoint: ""
    - MgmtEndPoint: ""
      APIToken: "T-d4925090-c9bf-4033-8537-d24ee5669135"
      NfsEndPoint: ""

Assigning Pods to Nodes

It is possible to make CSI Node Plugin and CSI Controller Plugin to run on specific nodes using nodeSelector, toleration, and affinity. You can set these config separately for Node Plugin and Controller Plugin using mounter.nodeSelector, and provisioner.nodeSelector respectively.

Install the plugin in a separate namespace(i.e. project)

For security reason, it’s strongly recommended to install the plugin in a separate namespace/project. Make sure the namespace is existing, otherwise create it before installing the plugin.

Customize your values.yaml including arrays info (replacement for pure.json), and then install with your values.yaml.

Create a namespace for PSO to install into

kubectl create namespace <namespace>

Dry run the installation, and make sure your values.yaml is working correctly.

helm install pure-storage-driver pure/pure-csi --namespace <namespace> -f <your_own_dir>/yourvalues.yaml --dry-run --debug

Run the Install

helm install pure-storage-driver pure/pure-csi --namespace <namespace> -f <your_own_dir>/yourvalues.yaml

The values in your values.yaml overwrite the ones in pure-csi/values.yaml, but any specified with the --set option will take precedence.

helm install pure-storage-driver pure/pure-csi --namespace <namespace> -f <your_own_dir>/yourvalues.yaml \
            --set flasharray.sanType=fc \
            --set namespace.pure=k8s_xxx \

Install the VolumeSnapshotClass

Make sure you have related CRDs in your system before installing it:

kubectl get crds

You should see CRDs like this:

NAME                                             CREATED AT
volumesnapshotclasses.snapshot.storage.k8s.io    2019-11-21T17:25:23Z
volumesnapshotcontents.snapshot.storage.k8s.io   2019-11-21T17:25:23Z
volumesnapshots.snapshot.storage.k8s.io          2019-11-21T17:25:23Z

To install the VolumeSnapshotClass:

kubectl apply -f https://raw.githubusercontent.com/purestorage/helm-charts/master/pure-csi/snapshotclass.yaml

How to update arrays info

Update your values.yaml with the correct arrays info, and then upgrade the helm as below.

Note: Ensure that the values for --set options match when run with the original install step. It is highly recommended to use the values.yaml and not specify options with --set to make this easier.

helm upgrade pure-storage-driver pure/pure-csi --namespace <namespace> -f <your_own_dir>/yourvalues.yaml --set ...


How to upgrade the driver version

It’s not recommended to upgrade by setting the image.tag in the image section of values.yaml. Use the version of the helm repository with the tag version required. This ensures the supporting changes are present in the templates.

# list the avaiable version of the plugin
helm repo update
helm search repo pure-csi -l

# select a target chart version to upgrade as
helm upgrade pure-storage-driver pure/pure-csi --namespace <namespace> -f <your_own_dir>/yourvalues.yaml --version <target chart version>

How to upgrade from the flexvolume to CSI

Upgrade from flexvolume to CSI is not currently supported and is being considered for an upcoming release.

Release Notes

Release notes can be found here

Known Vulnerabilities