Skip to content

Commit 3dfac9d

Browse files
authored
Merge pull request #361 from Basekick-Labs/fix/helm-recreate-strategy
fix(helm): default deployment strategy to Recreate for RWO volume compatibility
2 parents b128e93 + c06d799 commit 3dfac9d

3 files changed

Lines changed: 35 additions & 0 deletions

File tree

RELEASE_NOTES_2026.04.1.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,3 +338,23 @@ Fixed a TOCTOU (time-of-check/time-of-use) race in the initial admin token creat
338338
### Token Expiration Display Fix
339339

340340
Fixed non-expiring admin tokens incorrectly showing as "Expired" in the UI. The `TokenInfo.ExpiresAt` field used Go's `time.Time` zero value (`0001-01-01T00:00:00Z`) for tokens without expiration, which was serialized to JSON and interpreted as an expired date. Changed `ExpiresAt` from `time.Time` to `*time.Time` so non-expiring tokens serialize as `null` and are correctly displayed as "Never expires".
341+
342+
## Helm Chart
343+
344+
### Deployment Strategy Defaults to Recreate
345+
346+
Changed the default Kubernetes deployment update strategy from `RollingUpdate` (Kubernetes default) to `Recreate`. With a single replica and a `ReadWriteOnce` PVC, `RollingUpdate` deadlocks: the new pod cannot attach the volume until the old pod terminates, but the rollout waits for the new pod to be healthy first.
347+
348+
`Recreate` terminates the old pod first, then starts the new one, avoiding the deadlock entirely.
349+
350+
The strategy is configurable via `values.yaml`:
351+
352+
```yaml
353+
updateStrategy:
354+
type: Recreate # default; change to RollingUpdate for shared object storage deployments
355+
# rollingUpdate:
356+
# maxSurge: 1
357+
# maxUnavailable: 0
358+
```
359+
360+
Users on shared object storage (S3/Azure/MinIO) with Arc Enterprise clustering can override to `RollingUpdate` and tune `maxSurge`/`maxUnavailable` as needed.

helm/arc/templates/deployment.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ spec:
88
{{- if not .Values.autoscaling.enabled }}
99
replicas: {{ .Values.replicaCount }}
1010
{{- end }}
11+
strategy:
12+
{{- toYaml .Values.updateStrategy | nindent 4 }}
1113
selector:
1214
matchLabels:
1315
{{- include "arc.selectorLabels" . | nindent 6 }}

helm/arc/values.yaml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,19 @@
22

33
replicaCount: 1
44

5+
# Update strategy for the Deployment. Defaults to Recreate because Arc uses a
6+
# ReadWriteOnce PVC — RollingUpdate deadlocks when replicaCount=1: the new pod
7+
# can't attach the volume until the old pod terminates, but RollingUpdate waits
8+
# for the new pod to be ready first.
9+
# Switch to RollingUpdate only when using shared object storage (s3/azure/minio)
10+
# with Arc Enterprise clustering (e.g. multiple stateless reader replicas).
11+
updateStrategy:
12+
type: Recreate
13+
# For RollingUpdate, tune these to control availability during rollout:
14+
# rollingUpdate:
15+
# maxSurge: 1
16+
# maxUnavailable: 0
17+
518
image:
619
repository: ghcr.io/basekick-labs/arc-go
720
pullPolicy: IfNotPresent

0 commit comments

Comments
 (0)