author logo
Chris Snell

Tutorial: How to get started with the HPE CSI Driver and HPE Primera and 3PAR

April 30, 2020

Tutorial: How to get started with the HPE CSI Driver and HPE Primera and 3PAR

With the release of the HPE Container Storage Interface (CSI) driver for Kubernetes back in January, HPE has been hard at work on integrating additional platforms into the CSI driver framework. Initially the HPE CSI Driver for Kubernetes only supported Nimble Storage now with the latest v1.1.1 comes support for HPE Primera and 3PAR arrays. In this tutorial, I will walk you through the steps of deploying the CSI driver with HPE Primera and then we will deploy a Wordpress site using persistent storage. With that, let's get going!


I will be starting with an existing Kubernetes cluster. This can be a fresh install with kubeadm or kubespray. The deployment of Kubernetes is outside of the scope of this document. If you don't have a cluster up and running, I recommend that you get started there.

Also I am assuming kubectl is installed and configured to communicate with the cluster and Helm 3 to deploy the HPE CSI Driver for Kubernetes. If not, here are some good resources to check out for assistance Install and Set Up kubectl and to get setup.

Deploying the HPE CSI Driver and HPE 3PAR and Primera Container Storage Provider with Helm

To get started with the deployment of the HPE CSI Driver, check out the HPE Storage Container Orchestrator Documentation (SCOD for short) site. SCOD is an umbrella documentation project for all Kubernetes and Docker integrations for HPE primary storage tailored for IT Ops, developers and partners. It includes HPE 3PAR, HPE Primera, HPE Cloud Volumes and HPE Nimble Storage.

The HPE CSI Driver is deployed by using industry standard means, either a Helm chart or an Operator. For this tutorial, I will be using Helm to the deploy the CSI driver.

The official Helm chart for the HPE CSI Driver for Kubernetes is hosted on There, you will find the configuration and installation instructions for the chart.

The first step of installing the HPE CSI Driver is creating the values.yaml file.

Please refer to this sample values.yaml file.

vi primera-values.yaml

Copy the following into the file. Make sure to set the backendType: primera3par and the backend to the array IP along with the array username and password.

# HPE backend storage type (nimble, primera3par)
backendType: primera3par

  # parameters for specified backendType (nimble, primera3par)
  create: true
  username: 3paradm
  password: 3pardata
  servicePort: "8080"

## For creating the StorageClass automatically:
  create: false

The user specified will need at a minimum the edit role on the array.

Save and exit.

Deploying the HPE CSI Driver with the HPE 3PAR and Primera CSP currently doesn't support the creation of the default StorageClass in the Helm chart. Make sure to set create: false or omit the StorageClass section.

Installing the chart

To install the chart with the name hpe-csi:

Add the HPE CSI Driver for Kubernetes helm repo:

helm repo add hpe
helm repo update

Install the latest chart:

helm install hpe-csi hpe/hpe-csi-driver --namespace kube-system -f primera-values.yaml

Wait a few minutes as the deployment finishes.

Verify that everything is up and running correctly with the listing out the pods.

kubectl get pods --all-namespaces -l 'app in (primera3par-csp, hpe-csi-node, hpe-csi-controller)'
NAMESPACE     NAME                                  READY     STATUS    RESTARTS   AGE
kube-system   hpe-csi-controller-84d8569476-vt7xg   5/5       Running   0          13m
kube-system   hpe-csi-node-s4c8z                    2/2       Running   0          13m
kube-system   primera3par-csp-66f775b555-2qclg      1/1       Running   0          13m
kubectl get secret -n kube-system | grep primera3par
primera3par-secret                Opaque                                5         13m

If all of the components show in Running state, then the HPE CSI driver and the HPE 3PAR and Primera Container Storage Provider has been successfully deployed.

Using the HPE CSI Driver and HPE 3PAR and Primera Container Storage Provider

Now, let's validate the deployment by creating a StorageClass, PersistentVolumeClaim and deploy a Wordpress site.

We need to create a StorageClass API object using the HPE CSI driver, along with the parameters specific to HPE 3PAR and Primera CSP, as well as the Secret used for the primera3par backend. For a full list of supported parameters, please refer to the CSP specific documentation.

The below YAML declarations are meant to be created with kubectl create. Either copy the content to a file on the host where kubectl is being executed, or copy & paste into the terminal, like this:

kubectl create -f-
< paste the YAML >
^D (CTRL + D)

Create a StorageClass API object for a Primera Data Reduction volume.

kind: StorageClass
  name: primera-reduce-sc
parameters: ext4 primera3par-secret kube-system primera3par-secret kube-system primera3par-secret kube-system primera3par-secret kube-system
  # Uncomment for k8s 1.15 for resize support primera3par-secret kube-system
  cpg: SSD_r6
  provisioning_type: reduce
  accessProtocol: fc

Create a PersistentVolumeClaim for MariaDB for use by Wordpress. This object creates a PersistentVolume as defined. Make sure to reference the correct .spec.storageClassName.

kind: PersistentVolumeClaim
apiVersion: v1
  name: data-my-wordpress-mariadb-0
    - ReadWriteOnce
      storage: 50Gi
  storageClassName: primera-reduce-sc

Next, let's make another for the Wordpress application.

apiVersion: v1
kind: PersistentVolumeClaim
  name: my-wordpress
    - ReadWriteOnce
      storage: 20Gi
  storageClassName: primera-reduce-sc

Let's again verify the PersistentVolume were created successfully.

kubectl get pv
NAME                          STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
data-my-wordpress-mariadb-0   Bound     pvc-1abdb7d7-374e-45b3-8fa1-534131ec7ec6   50Gi       RWO            primera-reduce-sc   1m
my-wordpress                  Bound     pvc-ff6dc8fd-2b14-4726-b608-be8b27485603   20Gi       RWO            primera-reduce-sc   1m

The above output means that the HPE CSI Driver successfully provisioned a new volume based upon the primera-reduce-sc StorageClass. The volume is not attached to any node yet. It will only be attached to a node once a scheduled workload requests the PersistentVolumeClaim pvc-nginx.

Now, let's use Helm to deploy Wordpress using the PVC created previously. When Wordpress is deployed, the volumes will be attached, formatted and mounted.

The first step is to add the Wordpress chart.

helm repo add bitnami
helm repo update
helm search repo bitnami/wordpress
bitnami/wordpress       9.2.1           5.4.0           Web publishing platform for building blogs and ...

Deploy Wordpress by setting persistence.existingClaim=<existing_PVC> to the PVC created in the previous step.

helm install my-wordpress bitnami/wordpress --version 9.2.1 --set service.type=ClusterIP,wordpressUsername=admin,wordpressPassword=adminpassword,mariadb.mariadbRootPassword=secretpassword,persistence.existingClaim=my-wordpress,allowEmptyPassword=false

Check to verify that Wordpress and MariaDB were deployed and are in the Running state. This may take a few minutes.

kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
my-wordpress-69b7976c85-9mfjv   1/1       Running   0          2m
my-wordpress-mariadb-0          1/1       Running   0          2m

Finally lets take a look at the Wordpress site. You can use kubectl port-forward to access the Wordpress application from within the Kubernetes cluster to verify everything is working correctly.

kubectl port-forward svc/my-wordpress 80:80
Forwarding from -> 8080
Forwarding from [::1]:80 -> 8080

If you have something already running locally on port 80, modify the port-forward to an unused port (i.e. 5000:80).

Open a browser on your workstation to and you should see, "Hello World!". Access the admin console at: using the user/password used to deploy the Helm Chart. Happy Blogging!

Next steps

Stay tuned to HPE DEV for future blogs regarding the HPE CSI Driver for Kubernetes. In the meantime, if you want to learn more about Kubernetes, CSI and the integration with HPE storage products, you can find a ton of Resources out on SCOD! If you are already on Slack or an HPE employee, connect with us on Slack. If you are a new user, signup at We hang out in #kubernetes, #nimblestorage and #3par-primera.


author logo
Michael Mattsson

Synchronized Volume Snapshots for Distributed Workloads on Kubernetes

Jan 14, 2021
author logo
Chris Snell

Automating 3PAR provisioning with Chef

Apr 2, 2018
author logo
Michael Mattsson

Introducing a multi-vendor CSI driver for Kubernetes

Aug 30, 2019
author logo
Michael Mattsson

Introducing HPE Storage Container Orchestrator Documentation

Apr 20, 2020
author logo
Michael Mattsson

Introducing Kubernetes CSI Sidecar Containers from HPE

Aug 25, 2020
author logo
Michael Mattsson

Introducing an NFS Server Provisioner for the HPE CSI Driver for Kubernetes

Jun 20, 2020
author logo
Chris Snell

Storage Provisioning using Ansible with HPE 3PAR Storage

May 30, 2018
author logo
Chris Snell

Tutorial: Enabling Remote Copy using the HPE CSI Driver for Kubernetes on HPE Primera

Aug 26, 2020

HPE Developer Newsletter

Stay in the loop.

Sign up for the HPE Developer Newsletter or visit the Newsletter Archive to see past content.

By clicking on “Subscribe Now”, I agree to HPE sending me personalized email communication about HPE and select HPE-Partner products, services, offers and events. I understand that my email address will be used in accordance with HPE Privacy Statement. You may unsubscribe from receiving HPE and HPE-Partner news and offers at any time by clicking on the Unsubscribe button at the bottom of the newsletter.

For more information on how HPE manages, uses, and protects your personal data please refer to HPE Privacy Statement.