From 8db06a32ec3492fa6360a73f2b5e91815286389d Mon Sep 17 00:00:00 2001 From: jordan Date: Sat, 31 Jan 2026 01:15:17 -0700 Subject: [PATCH] chore: Remove obsolete dedicated claudebox pods The shared worker pool (claudebox-0) now handles all project builds with dynamic git cloning. The dedicated per-project pods were stuck in Init state and are no longer needed. Removed: - claudebox-aeries StatefulSet and PVC - claudebox-pantheon StatefulSet and PVC - Associated secrets and configmaps (deleted from cluster) Co-Authored-By: Claude Opus 4.5 --- deployments/k8s/base/claudebox-aeries.yaml | 162 ------------------- deployments/k8s/base/claudebox-pantheon.yaml | 162 ------------------- deployments/k8s/base/kustomization.yaml | 13 +- deployments/k8s/base/pvc-aeries.yaml | 19 --- deployments/k8s/base/pvc-pantheon.yaml | 19 --- 5 files changed, 3 insertions(+), 372 deletions(-) delete mode 100644 deployments/k8s/base/claudebox-aeries.yaml delete mode 100644 deployments/k8s/base/claudebox-pantheon.yaml delete mode 100644 deployments/k8s/base/pvc-aeries.yaml delete mode 100644 deployments/k8s/base/pvc-pantheon.yaml diff --git a/deployments/k8s/base/claudebox-aeries.yaml b/deployments/k8s/base/claudebox-aeries.yaml deleted file mode 100644 index ea0bc05..0000000 --- a/deployments/k8s/base/claudebox-aeries.yaml +++ /dev/null @@ -1,162 +0,0 @@ -# claudebox-aeries - Claude Code pod for the Aeries project -# v0.6 - Shared credentials, project-specific commands/skills/agents in workspace - -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: claudebox-aeries - namespace: rdev - labels: - app.kubernetes.io/name: claudebox-aeries - app.kubernetes.io/part-of: rdev - rdev.orchard9.ai/project: aeries -spec: - serviceName: claudebox-aeries - replicas: 1 - selector: - matchLabels: - app: claudebox-aeries - template: - metadata: - labels: - app: claudebox-aeries - app.kubernetes.io/name: claudebox-aeries - app.kubernetes.io/part-of: rdev - rdev.orchard9.ai/project: aeries - spec: - # Init container clones repo if workspace is empty - initContainers: - - name: git-clone - image: ghcr.io/orchard9/rdev-claudebox:v0.3.0 - command: - - /bin/bash - - -c - - | - set -e - - # Setup SSH for GitHub - mkdir -p /root/.ssh - cp /ssh-keys/id_ed25519 /root/.ssh/id_ed25519 - chmod 600 /root/.ssh/id_ed25519 - cp /ssh-keys/known_hosts /root/.ssh/known_hosts - chmod 644 /root/.ssh/known_hosts - - # Clone or fetch - if [ ! -d /workspace/.git ]; then - echo "Cloning aeries repository..." - # Remove any existing files (e.g., lost+found from filesystem) - rm -rf /workspace/* /workspace/.[!.]* 2>/dev/null || true - git clone git@github.com:orchard9/aeries.git /workspace - echo "Clone complete." - else - echo "Repository exists, fetching latest..." - cd /workspace - git fetch origin - echo "Fetch complete." - fi - - # Show status - cd /workspace - git log -1 --oneline - volumeMounts: - - name: workspace - mountPath: /workspace - - name: ssh-keys - mountPath: /ssh-keys - readOnly: true - - 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 with cloned repo - - name: workspace - mountPath: /workspace - - # Claude config directory (persistent for auth) - - name: claude-config - mountPath: /root/.claude - - # SSH keys for git operations - - name: ssh-keys - mountPath: /root/.ssh - readOnly: true - - # Project-specific CLAUDE.md - - name: project-config - mountPath: /workspace/CLAUDE.md - subPath: CLAUDE.md - - # 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-aeries-workspace - - - name: claude-config - persistentVolumeClaim: - claimName: claudebox-shared-claude-config - - - name: ssh-keys - secret: - secretName: github-deploy-key-aeries - defaultMode: 0600 - items: - - key: id_ed25519 - path: id_ed25519 - - key: known_hosts - path: known_hosts - - - name: project-config - configMap: - name: claudebox-aeries-config - - # Pull from GitHub Container Registry - imagePullSecrets: - - name: ghcr-secret ---- -# Headless service for StatefulSet -apiVersion: v1 -kind: Service -metadata: - name: claudebox-aeries - namespace: rdev - labels: - app.kubernetes.io/name: claudebox-aeries - app.kubernetes.io/part-of: rdev - rdev.orchard9.ai/project: aeries -spec: - clusterIP: None - selector: - app: claudebox-aeries - ports: - - port: 8080 - name: http diff --git a/deployments/k8s/base/claudebox-pantheon.yaml b/deployments/k8s/base/claudebox-pantheon.yaml deleted file mode 100644 index 8287c2f..0000000 --- a/deployments/k8s/base/claudebox-pantheon.yaml +++ /dev/null @@ -1,162 +0,0 @@ -# claudebox-pantheon - Claude Code pod for the Pantheon project -# v0.6 - Shared credentials, project-specific commands/skills/agents in workspace - -apiVersion: apps/v1 -kind: StatefulSet -metadata: - name: claudebox-pantheon - namespace: rdev - labels: - app.kubernetes.io/name: claudebox-pantheon - app.kubernetes.io/part-of: rdev - rdev.orchard9.ai/project: pantheon -spec: - serviceName: claudebox-pantheon - replicas: 1 - selector: - matchLabels: - app: claudebox-pantheon - template: - metadata: - labels: - app: claudebox-pantheon - app.kubernetes.io/name: claudebox-pantheon - app.kubernetes.io/part-of: rdev - rdev.orchard9.ai/project: pantheon - spec: - # Init container clones repo if workspace is empty - initContainers: - - name: git-clone - image: ghcr.io/orchard9/rdev-claudebox:v0.3.0 - command: - - /bin/bash - - -c - - | - set -e - - # Setup SSH for GitHub - mkdir -p /root/.ssh - cp /ssh-keys/id_ed25519 /root/.ssh/id_ed25519 - chmod 600 /root/.ssh/id_ed25519 - cp /ssh-keys/known_hosts /root/.ssh/known_hosts - chmod 644 /root/.ssh/known_hosts - - # Clone or fetch - if [ ! -d /workspace/.git ]; then - echo "Cloning pantheon repository..." - # Remove any existing files (e.g., lost+found from filesystem) - rm -rf /workspace/* /workspace/.[!.]* 2>/dev/null || true - git clone git@github.com:orchard9/pantheon.git /workspace - echo "Clone complete." - else - echo "Repository exists, fetching latest..." - cd /workspace - git fetch origin - echo "Fetch complete." - fi - - # Show status - cd /workspace - git log -1 --oneline - volumeMounts: - - name: workspace - mountPath: /workspace - - name: ssh-keys - mountPath: /ssh-keys - readOnly: true - - 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 with cloned repo - - name: workspace - mountPath: /workspace - - # Claude config directory (persistent for auth) - - name: claude-config - mountPath: /root/.claude - - # SSH keys for git operations - - name: ssh-keys - mountPath: /root/.ssh - readOnly: true - - # Project-specific CLAUDE.md - - name: project-config - mountPath: /workspace/CLAUDE.md - subPath: CLAUDE.md - - # 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-pantheon-workspace - - - name: claude-config - persistentVolumeClaim: - claimName: claudebox-shared-claude-config - - - name: ssh-keys - secret: - secretName: github-deploy-key-pantheon - defaultMode: 0600 - items: - - key: id_ed25519 - path: id_ed25519 - - key: known_hosts - path: known_hosts - - - name: project-config - configMap: - name: claudebox-pantheon-config - - # Pull from GitHub Container Registry - imagePullSecrets: - - name: ghcr-secret ---- -# Headless service for StatefulSet -apiVersion: v1 -kind: Service -metadata: - name: claudebox-pantheon - namespace: rdev - labels: - app.kubernetes.io/name: claudebox-pantheon - app.kubernetes.io/part-of: rdev - rdev.orchard9.ai/project: pantheon -spec: - clusterIP: None - selector: - app: claudebox-pantheon - ports: - - port: 8080 - name: http diff --git a/deployments/k8s/base/kustomization.yaml b/deployments/k8s/base/kustomization.yaml index d578264..c8c4471 100644 --- a/deployments/k8s/base/kustomization.yaml +++ b/deployments/k8s/base/kustomization.yaml @@ -6,23 +6,16 @@ namespace: rdev resources: - namespace.yaml - # v0.1 - Generic claudebox (for testing/dev) + # Shared worker claudebox (runs all project builds) - pvc.yaml - - claudebox.yaml - - # v0.2 - Project-specific claudeboxes - - pvc-pantheon.yaml - - pvc-aeries.yaml - - # v0.6 - Shared Claude credentials (auth only) - pvc-shared-claude.yaml + - claudebox.yaml - configmaps.yaml + # NOTE: secrets.yaml and credentials.yaml contain real keys and are gitignored. # Copy from *.example files and fill in real values before deploying. - secrets.yaml # from secrets.yaml.example - credentials.yaml # from credentials.yaml.example - - claudebox-pantheon.yaml - - claudebox-aeries.yaml # v0.4+ - API Server (RBAC now included in rdev-api.yaml) - rdev-api.yaml diff --git a/deployments/k8s/base/pvc-aeries.yaml b/deployments/k8s/base/pvc-aeries.yaml deleted file mode 100644 index 381dda8..0000000 --- a/deployments/k8s/base/pvc-aeries.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# PVCs for claudebox-aeries -# v0.6 - Workspace only (claude-config is now shared) - -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: claudebox-aeries-workspace - namespace: rdev - labels: - app.kubernetes.io/name: claudebox-aeries - app.kubernetes.io/part-of: rdev - rdev.orchard9.ai/project: aeries -spec: - accessModes: - - ReadWriteOnce - storageClassName: longhorn - resources: - requests: - storage: 5Gi diff --git a/deployments/k8s/base/pvc-pantheon.yaml b/deployments/k8s/base/pvc-pantheon.yaml deleted file mode 100644 index 96cf5e8..0000000 --- a/deployments/k8s/base/pvc-pantheon.yaml +++ /dev/null @@ -1,19 +0,0 @@ -# PVCs for claudebox-pantheon -# v0.6 - Workspace only (claude-config is now shared) - -apiVersion: v1 -kind: PersistentVolumeClaim -metadata: - name: claudebox-pantheon-workspace - namespace: rdev - labels: - app.kubernetes.io/name: claudebox-pantheon - app.kubernetes.io/part-of: rdev - rdev.orchard9.ai/project: pantheon -spec: - accessModes: - - ReadWriteOnce - storageClassName: longhorn - resources: - requests: - storage: 5Gi