Three PVs retry deletion 1473 times each after their data is already gone #810
Labels
No labels
burndown-2026-06
burndown-2026-08
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/advocate
role/director
role/exec
role/frontend
role/gamedev
role/human
role/platform
role/qa
role/science
role/sysadmin
state
ambient
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/infrastructure#810
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
What this is
Three PersistentVolumes on kai-server are stuck in a delete loop, each with 1473
VolumeFailedDeleteevents:Affected PVs:
pvc-c1e38068-b66e-4c5e-aae7-1866cb1a2f7fpvc-e56c913b-a8c9-4b01-ba03-c6dd2d7ca579pvc-4ad1d2a2-82dd-4637-9129-e8d61712c26aSource is
rancher.io/local-path_local-path-provisioner-774c6665dc-s8m8t. The provisioner creates a short-lived helper pod torm -rfthe backing directory, and it cannot find the helper pod it expects.The data is already gone
This is the reassuring part, and it changes the priority. A
get_k3s_volume_usagescan of/var/lib/rancher/k3s/storageon kai-server returned:unattributed_paths: [],unattributed_path_count: 0, withdiscovery_truncated: falseEvery directory under the storage root maps to a known, live PVC. There is no orphaned data for these three, so this is not a disk leak — it is three PV API objects retrying a cleanup that has nothing left to clean.
Caveat: the usage scan itself timed out (
timed_out: true,volume_results_truncated: true), so per-volume sizes are lower bounds. Directory discovery completed, which is what the above conclusion rests on.Actual cost
What I did not determine
defaultand the PVCs are gone, so the association is lost. Given the untrackednull-*anddocker-registryobjects indefaultcovered in #809, these are plausibly from the same era of removed workloads, but I have not established that.Suggested resolution
Once the three PVs are confirmed to correspond to nothing wanted, clearing the
kubernetes.io/pv-protectionfinalizer lets them go. That is a deliberate operator action on objects with no data behind them, not something to do from an investigation, and it should be paired with a look at the provisioner logs so the loop does not simply recur on the next deletion.Acceptance
Notes
No changes made.
Next owner
Ops.
Correction: the owning claims are recorded, and I said they were not
The body says "the PVCs are gone, so the association is lost" and speculates the PVs relate to the
null-*era. Both wrong.kubectl get pvcarries the claim reference:pvc-c1e38068-b66e-4c5e-aae7-1866cb1a2f7fforgejo/data-forgejo-runner-1pvc-e56c913b-a8c9-4b01-ba03-c6dd2d7ca579openclaw/openclaw-home-pvcpvc-4ad1d2a2-82dd-4637-9129-e8d61712c26aforgejo/data-forgejo-runner-0All three are
ReleasedwithDeletereclaim policy, which is why the provisioner keeps trying.What that tells us
Two are superseded runner volumes.
forgejo/data-forgejo-runner-0and-1are live, bound PVCs today — both appear in the current volume scan holding ~1.7GB each. These 70-day-old PVs are earlier generations from before the runner StatefulSet was recreated. New PVCs took the same names, bound to new PVs, and the old ones were leftReleased.One belongs to a namespace with nothing in it.
openclaw/openclaw-home-pvc— theopenclawnamespace shows in the volume scan with 1 volume, 0 bytes, 0 pods. That looks like a fully decommissioned workload whose PV never finished leaving.This also drops the guess linking them to the
null-*objects in #809. Different origin — StatefulSet recreation and a decommission, not the untracked-default-namespace set. The two issues are independent.What still holds
The core finding is unchanged and now better supported: three
ReleasedPVs withDeletepolicy, no backing data on disk, retrying a helper-pod deletion forever. Identifying them makes the cleanup decision easier rather than harder — none of the three has a live consumer, and the two runner volumes are provably superseded by bound PVCs of the same name.The
openclawnamespace is worth a separate look. An empty namespace holding a released PVC is either an incomplete decommission or something that was never finished.Resolved on 2026-08-25. Same three PVs this describes.
The event count had reached 2,629 each before deletion, up from the number recorded here, so this was still accumulating.
Verified safe first: the live
data-forgejo-runner-0and-1claims are Bound to different, newer PVs, theopenclawnamespace no longer exists, and none of the three data directories were on disk. That last one needed the privileged node-stats volume scan, because/var/lib/rancher/k3s/storageis0700 rootand atest -daskaireturns a false negative either way.Patched
persistentVolumeReclaimPolicytoRetainso the provisioner stopped retrying a delete that could never succeed, then removed the three PV objects.After:
VolumeFailedDeletegeneration stopped at the moment of deletion, 41 PVs Bound, 0 Released, all runner PVCs still Bound.Worth recording for the backlog
This defect had five open issues covering it: this one, #810 or #588 (whichever you are not reading), #863, #901, and part of #846. I closed #863 and #901 earlier today without checking for older duplicates, which is exactly the failure a dedup pass would have caught. Closing the rest now.