feat(woodpecker): drop the sqlite PVC, StatefulSet->Deployment (#295, #324) #357

Merged
k.renner merged 1 commits from claude-bot/woodpecker-drop-pvc into master 2026-07-22 14:11:38 +00:00
Member

Stage 3 of 3 — the finale. Removes the data-woodpecker-server-0 PVC, which is what finally closes #295 and #324.

Context

The migration is complete and verified (#355 stood up wp-pg; #356 cut the server over to postgres):

  • pgloader load: 2,061,733 rows, 0 errors; all 18 tables parity-matched; booleans + sequences correct.
  • Server healthy on postgres; Flux reconciled cleanly to it.
  • End-to-end test passed: a live pipeline (vsftpd #5) dispatched from postgres → agent built → result written back.

woodpecker-server is now genuinely stateless.

This PR

  • StatefulSet → Deployment (strategy: Recreate — never two servers on one DB during a roll).
  • Remove volumeClaimTemplates + the /var/lib/woodpecker mount.
  • Agent reaches the server via the standalone woodpecker Service (label selector), so a Deployment pod is reachable unchanged.

Why it fixes #295/#324

Until the PVC is gone, Velero's apps-daily keeps trying to CSI-snapshot that error-flagged ext4 and failing (structure needs cleaning). Removing it stops the failing backup entirely — no fragile sqlite to snapshot.

Cutover on merge (I'll drive it)

Flux prunes the StatefulSet (PVC retention is Retain, so the PVC survives the prune) and creates the Deployment. To avoid a brief two-servers overlap I'll scale the STS to 0 first, then reconcile, then delete the orphaned data-woodpecker-server-0 PVC and confirm woodpecker is healthy on the new Deployment. Rollback stops being trivial after the PVC delete — but the migration is fully verified.

Closes #295
Closes #324

🤖 Generated with Claude Code

**Stage 3 of 3 — the finale.** Removes the `data-woodpecker-server-0` PVC, which is what finally **closes #295 and #324**. ## Context The migration is complete and verified (#355 stood up `wp-pg`; #356 cut the server over to postgres): - pgloader load: 2,061,733 rows, 0 errors; all 18 tables parity-matched; booleans + sequences correct. - Server healthy on postgres; Flux reconciled cleanly to it. - **End-to-end test passed**: a live pipeline (`vsftpd` #5) dispatched from postgres → agent built → result written back. woodpecker-server is now genuinely stateless. ## This PR - `StatefulSet` → `Deployment` (`strategy: Recreate` — never two servers on one DB during a roll). - Remove `volumeClaimTemplates` + the `/var/lib/woodpecker` mount. - Agent reaches the server via the standalone `woodpecker` Service (label selector), so a Deployment pod is reachable unchanged. ## Why it fixes #295/#324 Until the PVC is gone, Velero's `apps-daily` keeps trying to CSI-snapshot that error-flagged ext4 and failing (`structure needs cleaning`). Removing it stops the failing backup entirely — no fragile sqlite to snapshot. ## Cutover on merge (I'll drive it) Flux prunes the StatefulSet (PVC retention is `Retain`, so the PVC survives the prune) and creates the Deployment. To avoid a brief two-servers overlap I'll scale the STS to 0 first, then reconcile, then **delete the orphaned `data-woodpecker-server-0` PVC** and confirm woodpecker is healthy on the new Deployment. Rollback stops being trivial after the PVC delete — but the migration is fully verified. Closes #295 Closes #324 🤖 Generated with [Claude Code](https://claude.com/claude-code)
claude-bot added 1 commit 2026-07-22 14:10:44 +00:00
Stage 3/3, the finale of the sqlite->CNPG migration. woodpecker-server is now
stateless (DB in wp-pg Postgres, verified end-to-end incl. a live pipeline run),
so convert the StatefulSet to a Deployment and remove the volumeClaimTemplates +
/var/lib/woodpecker mount. strategy: Recreate keeps a single control-plane
instance (no two servers on one DB during a roll).

This deletes the last use of the data-woodpecker-server-0 PVC, whose ext4
CSI-snapshot backup failed permanently ("structure needs cleaning"). Once the
PVC itself is removed, Velero's apps-daily stops trying to snapshot it —
resolving #295 and #324. The agent reaches the server via the standalone
`woodpecker` Service (label selector), so a Deployment pod is reachable
unchanged.

Closes #295
Closes #324

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
k.renner merged commit 52a36336f1 into master 2026-07-22 14:11:38 +00:00
Sign in to join this conversation.