Fix garage container command and drop postStart layout hook

The dxflrs/garage image ships as a single static binary with no
ENTRYPOINT and no shell, so `args: [server]` alone was exec'd as the
command (crash loop) and the shell-based postStart layout-bootstrap
hook could never run. Set command: [/garage] explicitly, and replace
the automated hook with documented one-time `kubectl exec` steps.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ZA4cJygj4VPCYVms4TDrH
This commit is contained in:
sha
2026-09-13 13:10:23 +03:00
co-authored by Claude Sonnet 5
parent 52783d47a8
commit 095860ccd0
3 changed files with 14 additions and 34 deletions
+10 -6
View File
@@ -1,16 +1,20 @@
Garage {{ .Chart.AppVersion }} has been deployed.
S3 API: http://{{ include "garage.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.service.s3ApiPort }}
S3 API: http://{{ include "garage.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.service.s3ApiPort }}
Admin API: http://{{ include "garage.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.service.adminPort }}
{{- if .Values.garage.web.enabled }}
Web: http://{{ include "garage.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.service.s3WebPort }}
Web: http://{{ include "garage.fullname" . }}.{{ .Release.Namespace }}.svc.cluster.local:{{ .Values.service.s3WebPort }}
{{- end }}
On first install, the pod's postStart hook assigns and applies a single-node
layout automatically. Check with:
kubectl -n {{ .Release.Namespace }} exec deploy/{{ include "garage.fullname" . }} -- /garage status
REQUIRED one-time setup (Garage does not accept S3/admin traffic until a
layout is assigned and applied):
Create a bucket and access key with:
kubectl -n {{ .Release.Namespace }} exec deploy/{{ include "garage.fullname" . }} -- /garage status
NODE_ID=$(kubectl -n {{ .Release.Namespace }} exec deploy/{{ include "garage.fullname" . }} -- /garage node id -q | cut -d@ -f1)
kubectl -n {{ .Release.Namespace }} exec deploy/{{ include "garage.fullname" . }} -- /garage layout assign -z {{ .Values.garage.zone }} -c {{ .Values.garage.capacity }} "$NODE_ID"
kubectl -n {{ .Release.Namespace }} exec deploy/{{ include "garage.fullname" . }} -- /garage layout apply --version 1
Then create a bucket and access key:
kubectl -n {{ .Release.Namespace }} exec deploy/{{ include "garage.fullname" . }} -- /garage bucket create my-bucket
kubectl -n {{ .Release.Namespace }} exec deploy/{{ include "garage.fullname" . }} -- /garage key create my-key
kubectl -n {{ .Release.Namespace }} exec deploy/{{ include "garage.fullname" . }} -- /garage bucket allow --read --write --key my-key my-bucket
+2 -22
View File
@@ -24,6 +24,8 @@ spec:
- name: garage
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
command:
- /garage
args:
- server
env:
@@ -51,28 +53,6 @@ spec:
mountPath: /var/lib/garage/data
- name: meta
mountPath: /var/lib/garage/meta
{{- if .Values.layoutJob.enabled }}
lifecycle:
postStart:
exec:
command:
- /bin/sh
- -c
- |
NODE_ID=""
for i in $(seq 1 60); do
NODE_ID=$(/garage node id -q 2>/dev/null | cut -d@ -f1)
[ -n "$NODE_ID" ] && break
sleep 2
done
[ -z "$NODE_ID" ] && exit 0
if /garage layout show 2>/dev/null | grep -q "$NODE_ID"; then
exit 0
fi
/garage layout assign -z {{ .Values.garage.zone }} -c {{ .Values.garage.capacity }} "$NODE_ID"
VERSION=$(/garage layout show 2>/dev/null | grep -o 'version [0-9]*' | tail -1 | awk '{print $2+1}')
/garage layout apply --version "${VERSION:-1}" || true
{{- end }}
readinessProbe:
tcpSocket:
port: s3-api