9.7. Scaling Object Storage service capacity on external data plane nodes
Expand your Object Storage service (swift) cluster capacity to accommodate data growth by adding storage devices to existing external data plane nodes or by adding new nodes to the cluster.
Prerequisites
-
You have the
occommand line tool installed on your workstation. -
You are logged on to a workstation that has access to the RHOSO control plane as a user with
cluster-adminprivileges. - Your data plane nodes have additional storage devices available.
- You have verified that no recent ring rebalance is in progress. For more information, see Rebalancing Object Storage rings.
Procedure
Add new storage devices to your
OpenStackDataPlaneNodeSetCR:To add disks to all nodes in the node set, update the
nodeTemplate.ansible.ansibleVars.edpm_swift_diskslist:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: openstack-edpm-swift namespace: openstack spec: ... nodeTemplate: ansible: ansibleVars: edpm_swift_disks: - device: /dev/vdb path: /srv/node/vdb region: 0 weight: 4000 zone: 0 - device: /dev/vdc path: /srv/node/vdc region: 0 weight: 4000 zone: 0 - device: /dev/vdd path: /srv/node/vdd region: 0 weight: 4000 zone: 0 ...To add storage devices to a specific node only, update the
nodes.<node_name>.ansible.ansibleVars.edpm_swift_diskslist:apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneNodeSet metadata: name: openstack-edpm-swift namespace: openstack spec: ... nodes: edpm-swift-0: ansible: ansibleVars: edpm_swift_disks: - device: /dev/vdd path: /srv/node/vdd region: 0 weight: 1000 zone: 0 ... ...where:
device- Specifies the block device path for the storage disk.
path- Specifies the mount point path where the Object Storage service accesses the disk.
region-
Specifies the region identifier for the disk. Use
0for the default region. weight- Specifies the relative weight of the disk based on its capacity in GiB. The weight determines how many partitions are assigned to the disk in the Object Storage rings.
zone-
Specifies the zone identifier for the disk. Use
0for the default zone.
Apply the updated
OpenStackDataPlaneNodeSetCR:$ oc apply -f <nodeset_file>.yaml -n openstackDeploy the changes to the data plane nodes by creating an
OpenStackDataPlaneDeploymentCR that runs theswiftservice:$ oc apply -n openstack -f - << EOF apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: swift-storage-expansion spec: servicesOverride: - swift nodeSets: - <nodeset_name> EOF-
Replace
<nodeset_name>with the name of yourOpenStackDataPlaneNodeSetCR.
-
Replace
Wait for the deployment to complete:
$ oc wait openstackdataplanedeployment swift-storage-expansion --for condition=Ready --timeout=600s -n openstackTrigger a ring rebalance to distribute data across the new storage devices:
$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-ring-tool rebalance'注意Ring rebalances respect the
minPartHoursinterval (default: 24 hours). If multiple ring changes occur within this 24-hour window, manual rebalancing is required after verifying 100% replica coverage to ensure data durability. For more information, see Rebalancing Object Storage rings.Push the updated rings to the data plane nodes:
$ oc delete --ignore-not-found --wait openstackdataplanedeployment swift-ring-update -n openstack $ oc apply -n openstack -f - << EOF apiVersion: dataplane.openstack.org/v1beta1 kind: OpenStackDataPlaneDeployment metadata: name: swift-ring-update spec: ansibleTags: swiftrings servicesOverride: - swift nodeSets: - <nodeset_name> EOFWait for the ring update deployment to complete:
$ oc wait openstackdataplanedeployment swift-ring-update --for condition=Ready --timeout=300s -n openstack
Verification
Verify that the Object Storage cluster recognizes the updated capacity:
$ oc rsh -c proxy-server $(oc get pods -n openstack -l service=swift,component=swift-proxy -o name | head -n 1) swift-recon --diskusageExample output
[2026-04-16 10:30:15] Checking disk usage on 8 hosts... -> edpm-swift-0:6200: 0.00% used (100.00 GiB / 100.00 GiB) -> edpm-swift-0:6201: 0.00% used (100.00 GiB / 100.00 GiB) -> edpm-swift-0:6202: 0.00% used (100.00 GiB / 100.00 GiB) ...The output shows all nodes and disks with the updated total capacity.
Verify that all object replicas have been placed correctly after the rebalance:
$ oc debug --keep-labels=true job/swift-ring-rebalance -- /bin/sh -c 'swift-ring-tool get && swift-dispersion-report'Example output
Queried 1024 objects for dispersion reporting, 3s, 0 retries 100.00% of object copies found (3072 of 3072) Queried 1024 containers for dispersion reporting, 2s, 0 retries 100.00% of container copies found (3072 of 3072)All values must show 100.00% before you perform another scaling operation or ring rebalance.