apiVersion: apps/v1 kind: StatefulSet metadata: name: claudebox namespace: rdev labels: app.kubernetes.io/name: claudebox app.kubernetes.io/part-of: rdev spec: serviceName: claudebox replicas: 1 selector: matchLabels: app: claudebox template: metadata: labels: app: claudebox app.kubernetes.io/name: claudebox app.kubernetes.io/part-of: rdev spec: containers: - name: claudebox image: ghcr.io/orchard9/rdev-claudebox:v0.3.0 imagePullPolicy: Always resources: requests: cpu: "500m" memory: "1Gi" limits: cpu: "2" memory: "4Gi" volumeMounts: # Workspace for projects - name: workspace mountPath: /workspace # Claude config directory (persistent for auth) - name: claude-config mountPath: /root/.claude # Simple liveness check - container is running livenessProbe: exec: command: - cat - /healthcheck.sh initialDelaySeconds: 5 periodSeconds: 60 # Readiness - claude CLI is available readinessProbe: exec: command: - claude - --version initialDelaySeconds: 10 periodSeconds: 30 timeoutSeconds: 10 volumes: - name: workspace persistentVolumeClaim: claimName: claudebox-workspace - name: claude-config persistentVolumeClaim: claimName: claudebox-claude-config # Pull from GitHub Container Registry imagePullSecrets: - name: ghcr-secret --- # Headless service for StatefulSet apiVersion: v1 kind: Service metadata: name: claudebox namespace: rdev labels: app.kubernetes.io/name: claudebox app.kubernetes.io/part-of: rdev spec: clusterIP: None selector: app: claudebox ports: - port: 8080 name: http