Skip to main content
Version: 3.1

VolumePlacementStrategy CRD reference

Portworx provides a CustomResouceDefinition (CRD) called VolumePlacementStrategy. The specification for this CRD is composed of 4 main sections:

Additional Information:

replicaAffinity

Schema

FieldDescriptionOptional?Default
enforcementSpecifies if the given rule is required (hard) or preferred (soft). Portworx will fail volume creation if it cannot provision volumes matching a rule with hard enforcement enabled.Yesrequired
matchExpressionsmatchExpressions is a list of label selector requirements. The requirements are ANDed.

The labels provided here are matched against the following:
  • Kubernetes node labels
  • PVC labels
  • Portworx storage pool labels
Yes *

* required if topologyKey is empty
empty
topologyKeyKey for the node label that the system uses to denote a topology domain. The key can be for any node label that is present on the Kubernetes node.

NOTE: Using topologyKey requires nodes to be consistently labelled, i.e. every node in the cluster must have an appropriate label matching topologyKey. If some or all nodes are missing the specified topologyKey label, it can lead to unintended behavior.
Yes*

* required if matchExpressions is empty
empty
weightSpecifies the weight of the rule. If more than one rule matches, then the rule with the highest weight is applied.Yes0
affected_replicasSpecifies the number of volume replicas affected by this rule.Yes0 (Interpreted as all volume replicas)

Example use cases of replicaAffinity

By default, Portworx automatically adds the following labels to each of its storage pools. These can be used for replica affinity rules to target replicas on a specific storage pool type:

  • iopriority
  • medium (Media Type)

replicaAntiAffinity

Schema

FieldDescriptionOptional?Default
enforcementSpecifies if the given rule is required (hard) or preferred (soft). Portworx will fail volume creation if it cannot provision volumes matching a rule with hard enforcement enabled.Yesrequired
topologyKeyKey for the node label that the system uses to denote a topology domain. The key can be for any node label that is present on the Kubernetes node. Using topologyKey requires nodes to be consistently labelled, i.e. every node in the cluster must have an appropriate label matching topologyKey. If some or all nodes are missing the specified topologyKey label, it can lead to unintended behavior.Yes*

* required if matchExpressions is empty
empty

Example use cases

volumeAffinity

Schema

FieldDescriptionOptional?Default
enforcementSpecifies if the given rule is required (hard) or preferred (soft) Portworx will fail volume creation if it cannot provision volumes matching a rule with hard enforcement enabled.Yesrequired
topologyKeyKey for the node label that the system uses to denote a topology domain. The key can be for any node label that is present on the Kubernetes node.
Using topologyKey requires nodes to be consistently labelled, i.e. every node in the cluster must have an appropriate label matching topologyKey. If some or all nodes are missing the specified topologyKey label, it can lead to unintended behavior.
Yesempty
matchExpressionsmatchExpressions is a list of label selector requirements. The requirements are ANDed.

The labels provided here are matched against the following:
  • Kubernetes node labels
  • PVC labels
  • Portworx
  • storage pool labels
Noempty
weightSpecifies the weight of the rule. If more than one rule matches, then the rule with the highest weight is applied.Yes0

Example use cases

volumeAntiAffinity

Schema

FieldDescriptionOptional?Default
enforcementSpecifies if the given rule is required (hard) or preferred (soft). Portworx will fail volume creation if it cannot provision volumes matching a rule with hard enforcement enabled.Yesrequired
topologyKeyKey for the node label that the system uses to denote a topology domain. The key can be for any node label that is present on the Kubernetes node.
Using topologyKey requires nodes to be consistently labelled, i.e. every node in the cluster must have an appropriate label matching topologyKey. If some or all nodes are missing the specified topologyKey label, it can lead to unintended behavior.
Yesempty
matchExpressionsmatchExpressions is a list of label selector requirements. The requirements are ANDed.

The labels provided here are matched against the following:
  • Kubernetes node labels
  • PVC labels
  • Portworx
  • storage pool labels
Noempty

Example use cases

Do not collocate with other cassandra volumes

topologyKey

If topologyKey is not set, by default the rule will avoid/colocate volumes at the node level using built-in unique node identifiers.

Portworx Built-in

topologyKey can use the built-in key portworx.io/pool that is set automatically as a unique key/value on every Portworx pool. This can be used with volumeAffinity/volumeAntiAffinity to control volume placement at the pool level to work for individual pools.

Templates

Parameter values in matchExpressions may use predefined templates. The VolumePlacementStrategy will automatically resolve these templates at provision time as detailed below:

Was this page helpful?