Skip to main content
Version: latest

Portworx Operator

Portworx is a software-defined persistent storage solution designed and purpose-built for applications deployed as containers via container orchestrators such as Kubernetes. You can include Portworx in your Kubernetes cluster by using the Portworx Operator pack.

Versions Supported


Portworx Operator has the following prerequisites for installation. You can learn more about all the required Portworx requirements in the Portworx documentation.

  • The Kubernetes cluster must have at least three nodes of the type bare metal or virtual machine.

  • Storage drives must be unmounted block storage. You can use either, raw disks, drive partitions, LVM, or cloud block storage.

  • The backing drive must be at least 8 GB in size.

  • The following disk folder require enough space to store Portworx metadata:

    • /var - 2 GB

    • /opt - 3 GB

  • The operating system root partition must be at least 64 GB is the minimum.

  • The minimum hardware requirements for each node are:

    • 4 CPU cores

    • 8 GB RAM

    • 50 GB disk space

    • 1 Gbps network connectivity

  • A Linux kernel version of 3.10 or higher is required.

  • Docker version 1.13.1 or higher is required.

Starting with Portworx version 3.x.x and greater. Lighthouse is no longer available in the pack itself. Instead you can install Portworx Central, which provides monitoring capabilities.


The following parameters are highlighted for this version of the pack and provide a preset option when configured through the UI. These parameters are not exhaustive and you can configure additional parameters as needed.

portworx-generic.activateLicenseSet to true to activate the Portworx license.true
portworx-generic.license.typeAllowed values are: essentials, saas, enterprise. If you want to deploy the PX Enterprise Trial version, or need manual offline activation, select the PX Enterprise type and set activateLicense to false.essentials
portworx-generic.Storagecluster.specDefine the storage type and behavior for Portworx.Refer to the Storage Specification section below to learn more.{}
portworx-generic.externalKvdbDefine the external Key Value Database (KVDB) configuration for Portworx. Refer to the Integration With External etcd section below to learn more.{}
portworx-generic.storageCluster.envSpecify environment variables, such as HTTP Proxy settings, for Portworx.{}


The default installation of Portworx /w Operator will deploy the following components in the Kubernetes cluster:

  • Portworx Operator

  • StorageCluster resource that tells the Operator how to deploy and configure Portworx.

  • StorageClass resource for dynamic provisioning of PersistentVolumes`` using the` provisioner.

  • Stork. Portworx's storage scheduler for Kubernetes.

License Model

This pack can install Portworx in three different licensing modes:

  • Essentials: a free Portworx license with limited functionality that allows you to deploy a small production or proof-of-concept workloads. Essentials limits capacity and advanced features, but otherwise functions the same way as the fully featured Portworx Enterprise version of Portworx.

  • Enterprise: the fully featured version of Portworx. If you install this model without a valid key, Portworx will automatically enter a 30-day trial mode.

  • Enterprise SaaS PAYG: the fully featured version of Portworx but using a SaaS license key that allows unlimited use and in-arrears billing. If you install this model without a valid key, Portworx will automatically enter a 30-day trial mode.

Use the presets in the pack user interface to select which license model you want to use, then update the charts.portworx-generic.license section for your chosen license model.

type: essentials
# Base64-decoded value of the px-essen-user-id value in the px-essential secret
# Find your Essentials Entitlement ID at
userId: 1234abcd-12ab-12ab-12ab-123456abcdef
# Base64-decoded value of the px-osb-endpoint value in the px-essential secret
# Leave at the default value unless there are special circumstances

Storage Specification

You can install Portworx in a variety of storage configurations.

  • Existing disks (generic): This mode does not integrate with any particular storage solution, it uses existing disks available on the nodes.

  • AWS Cloud Storage: This mode integrates with Amazon EBS block volumes and allows AWS EKS and EC2 based Kubernetes clusters to dynamically attach EBS volumes to worker nodes for Portworx.

  • Azure Cloud Storage: This mode integrates with Azure block storage and allows Azure AKS and regular Azure Kubernetes clusters to dynamically attach Azure block storage to worker nodes for Portworx.

  • Google Cloud Storage: This mode integrates with Google persistent disks and allows GKE and regular Google Kubernetes clusters to dynamically attach persistent disks to worker nodes for Portworx.

  • VMware vSphere Datastores: This mode integrates with VMware vSphere storage and allows Kubernetes clusters on vSphere to dynamically attach vSAN and regular Datastore disks to worker nodes for Portworx.

  • Pure Storage Flash Array: This mode integrates with Pure Storage Flash Arrays and allows Kubernetes clusters to dynamically attach Flash Array disks over iSCSI to worker nodes for Portworx.


Use the presets in the pack user interface to select which storage specification you want to use, then update the charts.portworx-generic.storageCluster section to your specific needs.

Select the tab below for the storage specification you want to use. Use the example YAML as a starting point for your configuration.

# Use the Portworx Spec Builder at to define custom configurations, then paste the spec section here
image: portworx/oci-monitor:3.0.0
imagePullPolicy: Always
type: UninstallAndWipe
internal: true
# endpoints:
# - etcd:
# authSecret: px-kvdb-auth
useAll: true
# kvdbDevice: /dev/sdb
journalDevice: auto
# network:
# dataInterface: eth0
# mgmtInterface: eth1
secretsProvider: k8s
enabled: true
webhook-controller: "true"
enabled: true
- name: default
url: http://prometheus-operator-prometheus.monitoring.svc.cluster.local:9090
type: prometheus
default-io-profile: "6"
enabled: true
enabled: true
enabled: false
exportMetrics: true


Portworx Enterprise supports multiple etcd scenarios. Portworx will default to an internal key-value store (KVDB).

Kvdb and Etcd Presets

The following pack presets are available for configuring etcd.

The pack defaults to the Use Internal Kvdb option. You can change to a different preset if you need to connect to an external etcd server.

internal: true

Integration With External Etcd

Use the following steps to integrate Portworx to an external etcd server by following the steps below.

  1. During the cluster profile creation, select the Portworx pack and click on the Presets button in the top right corner of the pack user interface.

  2. Select the Use External Kvdb over HTTP or Use External Kvdb over SSL preset in the pack UI. If your external etcd server requires certificate authentication, select Use External Kvdb over SSL preset.

  3. Configure the external etcd endpoints in the YAML parameter block named charts.portworx-generic.storageCluster.spec.kvdb.endpoints.

  4. If you selected the Use External Kvdb over SSL preset, you will also need to configure the charts.portworx-generic.externalKvdb section. Set charts.portworx-generic.externalKvdb.useCertsForSSL to true to enable certificate authentication. Input your SSL certificates in the cacert, cert, and key sections of charts.portworx-generic.externalKvdb. The preset will give you cropped example values that you can overwrite with your actual PEM certificates. Leave the charts.portworx-generic.storageCluster.spec.kvdb.endpoints option to its default of px-kvdb-auth. The name of the Kubernetes secret will automatically get created by this pack.


When inserting SSL certificate values into the YAML. Ensure you follow the provided indentation style. Otherwise, SSL certificates will not be imported correctly and will result in Portworx deployment failure.


Use the following Terraform code to interact with the Portworx Operator pack in your Terraform scripts.

data "spectrocloud_registry" "public_registry" {
name = "Public Repo"

data "spectrocloud_pack_simple" "portworx-operator" {
name = "csi-portworx-generic"
version = "3.0.0"
type = "operator-instance"
registry_uid =