forked from mirrors/fleetlock
Longhorn-aware drain deadlocks: node stuck cordoned, never reboots #1
Loading…
Add table
Add a link
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?
Image:
krautit/fleetlock:0.4.0-longhorn-aware-drain2Symptom: A node granted a reboot lease gets stuck cordoned/drained indefinitely, retrying every ~5 min without ever rebooting.
Root cause: The reboot flow checks Longhorn volume health after cordoning and draining the node:
node not ready to reboot, longhorn volume <pvc> is degraded.Observed stuck for 1h40m+, retrying every ~5 min, until manually uncordoned.
Evidence (repeats identically every ~5 min from 06:08 UTC 2026-08-23):
Suggested fix: Check Longhorn volume health before cordoning/draining, not after. If volumes hosted on this node are healthy pre-drain, the health check should either be skipped post-drain (since cordoning inherently removes a replica target) or should tolerate "degraded solely due to this node's own cordon" as an acceptable state, rather than blocking forever.
Workaround applied: manually ran
kubectl uncordon <node>to let Longhorn rebuild the missing replica, which let the next fleetlock retry pass the health check.Update: pulled the full 24h log history from SigNoz. Confirms this consumed the entire night's reboot window on
junta.kubo— no other node had a pending update to compare against.Exact stuck error message (repeated verbatim every ~5 min from 02:16:37 UTC to 07:48:52 UTC, 65 times):
Timeline for
junta.kubo:pid-kellner-id-cnpg-2,pid-kraut-id-cnpg-3,immich-cnpg-1), plus a wider wait for 13 pods total initially.kubectl uncordon junta.kubo), breaking the loop.So the node never got its pending OS update applied last night — the drain succeeded, but the post-drain Longhorn health check deadlocked against itself for the rest of the window.