Configure Pure Storage FlashArray as a Direct Access volume
On-premises users who want to use Pure Storage FlashArray with Portworx on Kubernetes can attach FlashArray as a Direct Access volume. Used in this way, Portworx directly provisions FlashArray volumes, maps them to a user PVC, and mounts them to pods. Once mounted, the application writes data directly onto FlashArray. As a result, this mounting method doesn’t use storage pools.
FlashArray Direct Access volumes support the following CSI operations:
- Basic filesystem operations: create, mount, expand, clone, unmount, delete
- Mount options: Configure file system mount options
- Snapshots
- Quality of service (QoS) settings (requires at least one FlashArray with Purity version 5.3.0 or newer and REST API version 1.17 or newer)
Use FlashArray as a Direct Access volume
Once you’ve configured Portworx to work with your FlashArray, you can create a StorageClass and reference it in any PVCs you create.
Create a StorageClass
Create a StorageClass spec and set parameters.backend
to "pure_block"
. Here is an example StorageClass spec:
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: sc-portworx-fa-direct-access
provisioner: pxd.portworx.com
parameters:
backend: "pure_block"
max_iops: "1000"
max_bandwidth: "1G"
allowVolumeExpansion: true
Create a PVC
Create a PersistentVolumeClaim and reference the StorageClass you created by entering the name that you gave your StorageClass in the spec.storageClassName
field. For example:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pure-claim-block
labels:
app: nginx
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: sc-portworx-fa-direct-access
Mount to a pod
Create a Pod and reference the PVC you created by entering the name you gave your PVC in the persistentVolumeClaim.claimName
field. For example:
kind: Pod
apiVersion: v1
metadata:
name: nginx-pod
labels:
app: nginx
spec:
volumes:
- name: pure-vol
persistentVolumeClaim:
claimName: pure-claim-block
containers:
- name: nginx
image: nginx
volumeMounts:
- name: pure-vol
mountPath: /data
ports:
- containerPort: 80
Clone a PVC
To clone PVC, create a PersistentVolumeClaim with dataSource.kind
set to PVC
and dataSource.name
set to the name of the PVC you wish to clone. For example:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-clone
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: sc-portworx-fa-direct-access
dataSource:
kind: PersistentVolumeClaim
name: pure-claim-block
Take a snapshot
To take a snapshot, perform the following steps:
-
Create a SnapshotClass with
driver
set topxd.portworx.com
. For example:kind: VolumeSnapshotClass
apiVersion: snapshot.storage.k8s.io/v1
metadata:
name: px-fa-direct-access-snapshotclass
annotations:
snapshot.storage.kubernetes.io/is-default-class: "true"
driver: pxd.portworx.com
deletionPolicy: Delete -
Create a VolumeSnapshot where
volumeSnapshotClassName
is set to the name you gave your VolumeSnapshotClass, andsource.persistentVolumeClaimName
is set to the name you gave your volume. For example:kind: VolumeSnapshot
apiVersion: snapshot.storage.k8s.io/v1
metadata:
name: volumesnapshot-of-pure-claim-block
spec:
volumeSnapshotClassName: px-fa-direct-access-snapshotclass
source:
persistentVolumeClaimName: pure-claim-block
Restore a snapshot
To restore a snapshot to a new PVC, create a PersistentVolumeClaim with dataSource.kind
set to VolumeSnapshot
and dataSource.name
set to the name of your VolumeSnapshot. For example:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-restore
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
storageClassName: sc-portworx-fa-direct-access
dataSource:
kind: VolumeSnapshot
name: volumesnapshot-of-pure-claim-block
apiGroup: snapshot.storage.k8s.io