You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
rename to vsphere-passthrough-node-controller + add crash-fence controller (#7)
* feat: optional crash-fence controller (out-of-service taint on host crash)
Adds fence.py — a second, optional Deployment (fence.enabled, off by
default) sharing this image and reusing the vCenter client + node↔VM map.
Automates non-graceful node shutdown for passthrough-GPU workers that
vSphere HA can't restart elsewhere during a host crash: applies the
node.kubernetes.io/out-of-service taint to a node confirmed dead by BOTH
k8s (NotReady) and vCenter (VM connectionState disconnected/inaccessible/
orphaned), sustained graceSeconds, so RWO volumes force-detach and pods
reschedule; removes it on recovery (connected + Ready).
Disjoint from the maintenance controller (clean power-off stays
'connected', only a crash goes 'disconnected') — no coordination needed.
Taint/un-taint only; power-on stays with vSphere HA. Own SA +
least-privilege ClusterRole (nodes only) + kill switch + dryRun.
test_fence.py covers the two-gate guard, grace hold, no-double-apply,
un-fence on recovery, and the partition/notfound guards (8/8).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* refactor: rename to vsphere-passthrough-node-controller
The product now covers two passthrough-node host-lifecycle concerns —
planned maintenance and (new) crash fencing — so "maintenance-controller"
no longer fits. Renames repo/image/chart/templates/helpers/docs to
vsphere-passthrough-node-controller (image + chart at
ghcr.io/varashi/[charts/]vsphere-passthrough-node-controller).
GitHub repo renamed (redirects cover old git/web refs). The internal
maintenance-state annotation domain (vsphere-maintenance.boeye.net/*) is
left unchanged — it's controller state, not user-facing, and no nodes
carry it currently.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* ci: fix ruff format + hadolint DL3021
ruff format controller.py (line-length wrapping); Dockerfile COPY
multi-arg destination must end with / (DL3021).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
* fix: address CodeRabbit review on #7
- controller.py: match out-of-service taint by full (key,value,effect)
identity, not key-only, so a same-key taint with a different
value/effect isn't mistaken for ours on fence/un-fence
- chart fence.yaml: drop redundant `and` in SA conditional; remove
`update` verb from fence ClusterRole (patch suffices for taint ops)
- CHANGELOG: add 0.5.0/0.4.4 link defs, advance Unreleased baseline
- README: bump chart examples 0.4.3 -> 0.5.0; note fence.py in layout
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
---------
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
LABEL org.opencontainers.image.description="Kubernetes controller that automates ESXi maintenance mode for worker nodes with PCI passthrough (GPU or otherwise)."
0 commit comments