For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

Sample Output
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, provisioner csi.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.

Sample Output
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

1

List the stuck pods and the node those pods share

2

Read the mount failure reported by the kubelet

3

Confirm the corruption at the host kernel layer

4

Map the failing device to the persistent volume claim

5

Confirm the filesystem is not repairable

For a geometry mismatch, e2fsck aborts rather than risk writing past the end of the device. Run the check with -n (answers no to all prompts) so the check stays read-only. This output is the evidence for the storage team.

6

Check the OVN Southbound cluster for a split-brain

Query the Southbound cluster status. A split-brain shows one member reporting a different Cluster ID at Term 1 with only that member in the server list, while the other members sit at a much higher term and cannot elect a leader.

7

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 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 dmesg output showing the geometry mismatch and directory-checksum errors

  • The e2fsck abort output showing the filesystem-size versus device-size mismatch

  • The 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.

1

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.

2

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:

3

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.

4

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