From a93818146a9c690eebf4d5638def9d4e97d358c8 Mon Sep 17 00:00:00 2001 From: Nik Afiq Date: Thu, 23 Jul 2026 19:15:54 +0900 Subject: [PATCH] fix: qbittorrent/jdownloader crash-loop from today's rollout Both Deployments' rolling update briefly ran an old+new pod pair on the same node (node-role: storage), sharing the same config storage (qbittorrent's PVC, jdownloader's hostPath) -- both apps are effectively singletons that lock their config directory, so the new instance conflicted with the still-running old one: - qbittorrent: hit a known qbittorrent:5.2.0 image bug (linuxserver/ docker-qbittorrent#432) where a stale WebUI lockfile prevents the server from ever binding its port while a second instance is present -- surfaced as the new pod's readiness probe getting "connection refused" indefinitely. On top of that, my livenessProbe (30s/30s) was killing the container (exitCode 137) before qbittorrent had any chance to come up at all. Dropped the livenessProbe (readiness alone can never kill a container, only mark it not-ready) and loosened the readinessProbe timing. - jdownloader: the new pod's app process detected the old instance's lock in the shared /data/jdownloader hostPath and exited cleanly (exitCode 0) rather than run a duplicate copy -- nothing to do with probe timing. Both Deployments now use `strategy: Recreate` instead of the RollingUpdate default, so any future rollout fully stops the old pod before starting the new one -- this is the actual fix (matches the pattern immich.yaml already used). Applying this will briefly restart both currently-running pods to verify it. Co-Authored-By: Claude Sonnet 5 --- manifests/media/jdownloader.yaml | 2 ++ manifests/media/qbittorrent.yaml | 13 +++++-------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/manifests/media/jdownloader.yaml b/manifests/media/jdownloader.yaml index 5612597..652545b 100644 --- a/manifests/media/jdownloader.yaml +++ b/manifests/media/jdownloader.yaml @@ -8,6 +8,8 @@ metadata: namespace: downloads spec: replicas: 1 + strategy: + type: Recreate selector: matchLabels: app: jdownloader diff --git a/manifests/media/qbittorrent.yaml b/manifests/media/qbittorrent.yaml index a4662ff..192a098 100644 --- a/manifests/media/qbittorrent.yaml +++ b/manifests/media/qbittorrent.yaml @@ -28,6 +28,8 @@ metadata: namespace: downloads spec: replicas: 1 + strategy: + type: Recreate selector: matchLabels: app: qbittorrent @@ -107,14 +109,9 @@ spec: httpGet: path: / port: 8080 - initialDelaySeconds: 15 - periodSeconds: 15 - livenessProbe: - httpGet: - path: / - port: 8080 - initialDelaySeconds: 30 - periodSeconds: 30 + initialDelaySeconds: 60 + periodSeconds: 20 + failureThreshold: 5 resources: requests: cpu: 50m