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 |