Skip to main content
Version: 25.8

StorageCluster CRD reference

The Portworx CSI cluster configuration is defined by a Kubernetes CustomResourceDefinition (CRD) called StorageCluster. This object specifies the Portworx Cluster.

The StorageCluster object offers a Kubernetes-native experience, allowing you to manage your Portworx cluster like any other Kubernetes application. When you create or modify the StorageCluster object, the Operator will automatically create or update the Portworx cluster in the background.

To generate a StorageCluster specification tailored to your environment, visit Portworx Central and click Install and Run. This will launch the Portworx specification generator, which will guide you through the steps to create a customized StorageCluster specification.

Using the Portworx specification generator is the recommended method for generating a StorageCluster specification. If you prefer to create the specification manually, refer to the StorageCluster Schema section.

StorageCluster schema

This section explains the fields used to configure the StorageCluster object.

FieldDescriptionTypeDefault
spec.
image
Specifies the Portworx monitor image.stringNone
spec.
imagePullPolicy
Specifies the image pull policy for all the images deployed by the operator. It can take one of the following values: Always or IfNotPresentstringAlways
spec.
imagePullSecret
If Portworx pulls images from a secure repository, you can use this field to pass it the name of the secret. Note that the secret should be in the same namespace as the StorageCluster object.stringNone
spec.
customImageRegistry
The custom container registry server Portworx uses to fetch the Docker images. You may include the repository as well.stringNone
spec.
env[]
A list of Kubernetes like environment variables. Similar to how environment variables are provided in Kubernetes, you can directly provide values to Portworx or import them from a source like a Secret, ConfigMap, etc.[]objectNone
spec.
metadata.
annotations
A map of components and custom annotations.map[string]map[string]stringNone
spec.
metadata.
labels
A map of components and custom labels.map[string]map[string]stringNone

Monitoring configuration

This section provides details on how to enable monitoring for Portworx.

FieldDescriptionTypeDefault
spec.monitoring.telemetry.enabledEnable Pure1 telemetrybooleanfalse
spec.monitoring.prometheus.enabledEnable prometheus and export metricsbooleanfalse

CSI configuration

This section provides details on how to configure CSI for the StorageCluster. Note this is for Operator 1.8 and higher only.

FieldDescriptionTypeDefault
spec.
csi.
enabled
Flag indicating whether CSI needs to be installed for the storage cluster.booleantrue
spec.
csi.
installSnapshotController
Flag indicating whether CSI Snapshot Controller needs to be installed for the storage cluster.booleanfalse

Node specific configuration

This section provides details on how to override certain cluster level configuration for individual or group of nodes.

FieldDescriptionTypeDefault
spec.
nodes[]
A list of node specific configurations.[]objectNone
spec.
nodes[].
selector
Selector for the node(s) to which the configuration in this section will be applied.objectNone
spec.
nodes[].
selector.
.nodeName
Name of the node to which this configuration will be applied. Node name takes precedence over selector.labelSelector.stringNone
spec.
nodes[].
selector.
.labelSelector
Kubernetes style label selector for nodes to which this configuration will be applied.objectNone
spec.
nodes[].
env
Specify extra environment variables for the selected nodes. Cluster level environment variables are combined with these and sent to the selected nodes. If same variable is present at cluster level, then the node level variable takes precedence.objectNone

Environment variables

This section provides configuration details for setting FlashArray and FlashBlade environment variables. All fields are objects under the spec.env[] list:

NameValueTypeDefault
PURE_ISCSI_ALLOWED_CIDRSUse this when the FlashArray has multiple iSCSI network interfaces with different subnets and you need to connect to a specific subnet. Separate multiple entries with commas—for example, 10.0.0.0/24,10.1.0.0/16. An empty string connects to all enabled iSCSI interfaces.string"" (empty string)
PURE_NVME_ALLOWED_CIDRSUse this when the FlashArray has multiple NVMe network interfaces with different subnets and you need to connect to a specific subnet. Use commas as the separator, e.g. 10.0.0.0/24,10.1.0.0/16. An empty string connects to all enabled NVMe interfaces.string"" (empty string)
NODE_STAGE_CONCURRENCYUse this to control how many NodeStageVolume operations the CSI driver can process concurrently on a single node.string"25"
PURE_FLASHARRAY_SAN_TYPESpecifies the SAN transport protocol that Portworx CSI uses to communicate with FlashArray. Supported values are ISCSI, NVMEOF-TCP, NVMEOF-RDMA, and FC.string"ISCSI"
PURE_ISCSI_ALLOWED_IFACESRestricts iSCSI sessions to specific network interfaces on the host. Use commas to separate multiple interface names, for example, eth0,eth1. An empty string allows all interfaces.string"" (empty string)
PX_LOGLEVELControls the log verbosity level for the Portworx CSI driver. Use values such as error, warn, info, debug, or trace to adjust the logging detail.string"info"

StorageCluster Annotations

AnnotationDescription
portworx.io/misc-argsArguments that you specify in this annotation are passed to portworx container verbatim. Note that you cannot use = to specify the value of an argument.
Some of the arguments that you can specify in the annotation are listed below:
  • --oem px-csi - Specifies that Portworx will be installed with the CSI FA/FB license, determining the type of build and license for the installation.
portworx.io/disable-storage-classWhen applied to a StorageCluster object and set to true, this annotation instructs the Portworx Operator to disable and remove the default storage classes created during Portworx setup. For example: portworx.io/disable-storage-class: "true"
portworx.io/health-checkAnnotation created by the Operator to save the state of the health checks. If the health checks pass, the Operator writes a value of passed. If the health checks fail, the Operator writes a value of failed and reruns the checks periodically. You can control the health checks manually by setting the value to skip to bypass the health checks, or removing the annotation to instruct the Operator to rerun the checks immediately.