Skip to content

Storage Architecture

Portworx Configuration

Property Value
Version 3.4.1
Cluster Name px-{{.spectro.system.cluster.name}}
Namespace portworx
KVDB Internal
CSI Enabled
SAN Type Pure FlashArray (FC)
StoreV2 Enabled (-T px-storev2)
Run on Master Yes

Storage Classes

Name Default Default Virt Reclaim Binding Parameters
portworx-block Yes Yes Delete WaitForFirstConsumer repl: 2, io_profile: auto_journal, priority_io: high, nodiscard: true

KubeVirt Default Storage Class

portworx-block has the annotation storageclass.kubevirt.io/is-default-virt-class: "true", making it the default for VM disks.

Clone Strategy

Property Value
Clone Strategy csi-clone
Snapshot Class portworx-snapshot-class
Volume Mode Block
Access Mode ReadWriteMany

CSI clones are copy-on-write at the Portworx layer, making cross-namespace disk cloning fast even for large volumes.

Node Placement

Portworx runs on all nodes with placement rules:

placement:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
        - matchExpressions:
          - key: px/enabled
            operator: NotIn
            values:
              - "false"
          - key: node-role.kubernetes.io/control-plane
            operator: Exists

Environment Variables

Variable Value Purpose
PURE_FLASHARRAY_SAN_TYPE FC Fibre Channel connectivity
KUBERNETES_OPS_QPS_RATE 2000 API rate limit
KUBERNETES_OPS_BURST_RATE 4000 API burst limit

Network Interfaces

Portworx data and management interfaces use Palette variables:

Interface Variable
Data {{ .spectro.var.PortworxDataInterface }}
Management {{ .spectro.var.PortworxMgmtInterface }}

Additional Features

  • Autopilot: Enabled, using Prometheus at http://prometheus-operator-prometheus.monitoring.svc.cluster.local:9090
  • Stork: Enabled with webhook controller
  • Telemetry: Enabled
  • Prometheus Export: Enabled (exportMetrics: true)
  • License: Enterprise (manual activation, activateLicense: false)
  • Delete Strategy: UninstallAndWipe

Container Runtime Mounts

Portworx requires access to the containerd runtime:

volumes:
  - hostPath:
      path: /var/lib/spectro/containerd
    mountPath: /var/lib/spectro/containerd
    name: custom-var-containerd
  - hostPath:
      path: /run/spectro/containerd/containerd.sock
    mountPath: /run/containerd/containerd.sock
    name: custom-containerd-sock

Palette-specific paths

Palette uses /var/lib/spectro/containerd and /run/spectro/containerd/ instead of the standard containerd paths. These mounts are required for Portworx to function correctly.

Cloud Storage

cloudStorage:
  maxStorageNodes: '{{ .spectro.var.PortworxMaxStorageNodes }}'
  deviceSpecs:
    - size='{{ .spectro.var.PortworxCloudDriveSize }}'
  systemMetadataDeviceSpec: size=64
  journalDeviceSpec: size=3
  provider: pure

PVC Controller Ports

Custom ports are configured to avoid conflicts:

Annotation Value
portworx.io/pvc-controller-port 10261
portworx.io/pvc-controller-secure-port 10262