Stateful Control Plane Pods Fail To Start Due To NetApp Storage Volume Corruption
Problem
One or more stateful control-plane pods on a single node fail to start. airctl status reports the region as Not Ready and the Networking Service shows as unhealthy. The affected pods sit in Init:0/1 (the volume will not mount) or CrashLoopBackOff (the volume mounts but the data cannot be read), and the affected pods are concentrated on one control plane node.
NAMESPACE NAME READY STATUS NODE
default decco-consul-consul-server-2 0/1 Init:0/1 [NODE_NAME]
[REGION_NS] ovn-ovsdb-sb-0 0/1 CrashLoopBackOff [NODE_NAME]
[REGION_NS] percona-db-pxc-db-pxc-0 0/3 Init:0/1 [NODE_NAME]Environment
Self-Hosted Private Cloud Director Virtualization - v2025.10 and Higher
Component:Consul, OVN OVSDB databases, Percona XtraDB Cluster
Storage: NetApp Trident CSI over Fibre Channel, storage class
pcd-sc, provisionercsi.trident.netapp.io
Cause
Stateful Private Cloud Director workloads store data on persistent volumes provisioned by NetApp Trident over Fibre Channel. Each volume is presented to the host as a LUN, assembled by Linux multipath into a device under /dev/mapper/, formatted ext4, and mounted into the pod. A pod can only start once the persistent volume mounts and the filesystem on the volume is readable.
After an extended storage degradation or Fibre Channel path-flapping event, the LUN is re-presented at a different size or the contents are damaged, and the filesystem becomes unreadable. The host cannot mount or open the volume, so the dependent pod cannot start. Because every stateful pod scheduled on one node shares the same host storage path layer, a single storage event affects several pods at once. A pod restart cannot repair data on disk, so the affected pods never progress.
Two related corruption signatures appear in the host kernel log. The first is a geometry mismatch: the ext4 superblock records a filesystem larger than the LUN now presented to the host.
EXT4-fs (dm-9): bad geometry: block count 1310720 exceeds size of device (262144 blocks)A block count of 1310720 at 4K equals 5GiB (the size the filesystem expects), while 262144 blocks equals 1GiB (the actual device). The device is physically smaller than the filesystem the superblock describes. The second signature is metadata corruption: the LUN is the correct size but the directory or inode structures are damaged.
The failure then cascades into the clustered services that depend on the affected volumes. When the OVN Southbound member on the corrupted node restarts onto an unreadable volume, that member can abandon the original cluster and bootstrap a new, empty, single-node cluster, while the surviving members stay in the original cluster and cannot elect a leader. The Diagnostics section shows how to capture and confirm this split-brain from the Southbound cluster status. A surviving Southbound member logs repeated elections at a higher term and is terminated by the startup watchdog before quorum can form. A Consul member on the same node drops out of the Raft cluster, leaving Consul at reduced quorum.
Diagnostics
Confirm the surviving cluster members are healthy
Confirm the surviving Consul servers and OVN members are Running, and that at least one Percona member reports Synced to act as the donor for a rebuild.
If the surviving members are not healthy, stop. Regenerating a volume while the surviving members are unhealthy can cause permanent data loss. Contact Platform9 Support.
If all checks above match, proceed to the Workaround.
Resolution
The permanent fix must be applied at the storage layer, as the corruption originates entirely at the NetApp storage array and the Fibre Channel path layer beneath the Kubernetes cluster. The storage team / OS administration team must identify and correct the underlying condition that re-presented the LUN at an incorrect size or corrupted its contents (such as an unannounced resize, remap, clone, snapshot restore, or severe path loss during the disconnect window). They must also confirm that the LUN WWIDs and physical capacities presented to the host exactly match what Trident originally provisioned. Until the root storage condition is corrected, this corruption can recur. Use the Workaround below to restore service in the meantime.
Provide the storage team with the following evidence, captured during Diagnostics:
The
dmesgoutput showing the geometry mismatch and directory-checksum errorsThe
e2fsckabort output showing the filesystem-size versus device-size mismatchThe affected
/dev/mapper/device identifiers and the matching persistent volume claim names
Workaround
The affected workloads rebuild from a surviving copy, so regenerating the corrupted volumes restores service. A Consul member re-syncs from the cluster leader, a Percona member copies the database from a healthy member through a State Snapshot Transfer, and the OVN Southbound database is recomputed by ovn-northd from the Northbound database.
Deleting a persistent volume claim destroys the data on the volume. This workaround is safe only because Consul, Percona, and the OVN Southbound database rebuild from a surviving copy. Do not apply this workaround to any workload that holds the only copy of the data. If the surviving cluster members are not healthy (Consul below quorum, no Synced Percona donor, or the OVN Northbound database also broken), restore from backup or contact Platform9 Support instead.
Regenerate the Consul server volume
Recover Consul first: Because the affected Consul member is stuck in an Init:0/1 state with its volume locked by the host OS, temporarily scaling down the cluster releases this lock and allows us to safely delete the corrupted PVC. Re-scaling back to 3 replicas forces the array to provision a fresh, healthy LUN, which validates that the backend storage plane can successfully attach clean volumes before we attempt the higher-risk OVN Southbound regeneration.
NetApp Trident provisions a fresh, correctly sized LUN. The new pod joins the cluster and re-syncs state from the leader. Confirm the regenerated member returns to Running.
Regenerate the Percona member volume
When an affected Percona member is stuck in an Init:0/1 state with its volume locked or corrupted at the host layer, deleting the persistent volume claim (PVC) clears the broken hardware mapping and forces the Percona Operator to spin up a fresh, empty drive. A Percona XtraDB Cluster member safely rejoins empty by automatically copying the entire running database from a healthy, Synced donor node through a State Snapshot Transfer (SST)—provided that at least one of the other cluster survivors was verified as healthy during your initial diagnostics check.
The operator recreates the member, which automatically performs a State Snapshot Transfer (SST) from a Synced donor. Confirm the cluster returns to the full member count and reports ready:
Rebuild the OVN Southbound cluster
When the Southbound database is split-brain - with one member isolated in a new single-node cluster and the surviving members unable to elect a leader - the safest recovery is to clear all three Southbound members and let the cluster re-form empty. This is entirely safe because the Southbound database holds no unique data; the ovn-northd process will completely recompute the Southbound database from the Northbound database.
Do not scale the Southbound StatefulSet to a partial replica count to keep one member. kubectl scale sts ... --replicas=1 always retains ordinal 0, which may be the corrupted or isolated member, and the following volume deletion can then destroy the volume of the only healthy member. Because the Southbound database holds no unique data, clear all three members instead. This step requires a healthy Northbound database, confirmed in Diagnostics.
The rebuilt Southbound database starts empty and depends on ovn-northd to repopulate the Southbound database from the Northbound database. Confirm ovn-northd is running after the rebuild. Three Running pods serving an empty Southbound database appear healthy but leave the Networking Service broken.
Verify the recovered state
Recovery is confirmed when the Southbound cluster reports a single leader with three members, the Southbound flow count is large rather than near zero, and airctl status reports the region as Ready. Existing virtual machines continue forwarding network traffic uninterrupted during the Southbound rebuild, because packet forwarding runs on the hypervisors.
Additional Information
Regenerating the volumes restores service but does not prevent recurrence. The storage-side condition described in Resolution must be corrected by the storage team, or the corruption can return on the same node after the next storage event.
Last updated
