Ephemeral workspaces: remove PVC, use emptyDir

Workspaces are now fully immutable like GH Actions runners — no
persistent volume, no init container, no stale state between runs.
Fresh emptyDir on every workspace creation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Daniel Samson
2026-04-12 14:27:30 +01:00
co-authored by Claude Opus 4.6
parent 869d82998b
commit e801d96410
+1 -86
View File
@@ -76,27 +76,6 @@ data "coder_parameter" "memory" {
} }
} }
data "coder_parameter" "disk_size" {
name = "disk_size"
display_name = "Disk Size (GB)"
description = "Persistent home directory size"
type = "number"
default = "10"
mutable = false
option {
name = "5 GB"
value = "5"
}
option {
name = "10 GB"
value = "10"
}
option {
name = "20 GB"
value = "20"
}
}
# ─── Automation Parameters ─────────────────────────────────────────────────── # ─── Automation Parameters ───────────────────────────────────────────────────
@@ -375,33 +354,6 @@ resource "kubernetes_resource_quota_v1" "workspace" {
"limits.cpu" = "${tonumber(data.coder_parameter.cpu.value) * 1000}m" "limits.cpu" = "${tonumber(data.coder_parameter.cpu.value) * 1000}m"
"requests.memory" = "${tonumber(data.coder_parameter.memory.value) / 2}Mi" "requests.memory" = "${tonumber(data.coder_parameter.memory.value) / 2}Mi"
"limits.memory" = "${data.coder_parameter.memory.value}Mi" "limits.memory" = "${data.coder_parameter.memory.value}Mi"
"requests.storage" = "${data.coder_parameter.disk_size.value}Gi"
"persistentvolumeclaims" = "1"
}
}
}
# =============================================================================
# Storage
# =============================================================================
resource "kubernetes_persistent_volume_claim_v1" "home" {
metadata {
name = "home"
namespace = kubernetes_namespace_v1.workspace.metadata[0].name
labels = local.labels
}
wait_until_bound = false
spec {
access_modes = ["ReadWriteOnce"]
storage_class_name = "longhorn-backup"
resources {
requests = {
storage = "${data.coder_parameter.disk_size.value}Gi"
}
} }
} }
} }
@@ -491,8 +443,6 @@ resource "coder_agent" "main" {
# --- Clone repository --- # --- Clone repository ---
if [ -n "$REPO_CLONE_URL" ]; then if [ -n "$REPO_CLONE_URL" ]; then
# Always start fresh for automated tasks to avoid stale state
rm -rf ~/project
git clone "$REPO_CLONE_URL" ~/project git clone "$REPO_CLONE_URL" ~/project
cd ~/project cd ~/project
@@ -600,39 +550,6 @@ resource "kubernetes_deployment_v1" "workspace" {
name = kubernetes_secret_v1.registry.metadata[0].name name = kubernetes_secret_v1.registry.metadata[0].name
} }
init_container {
name = "fix-permissions"
image = "busybox:latest"
command = ["sh", "-c", <<-EOC
if [ ! -d /home/coder/project ]; then
mkdir -p /home/coder/project
fi
chown -R 1000:1000 /home/coder
EOC
]
volume_mount {
name = "home"
mount_path = "/home/coder"
}
resources {
requests = {
cpu = "5m"
memory = "8Mi"
}
limits = {
cpu = "50m"
memory = "32Mi"
}
}
security_context {
run_as_user = 0
}
}
container { container {
name = "coder-agent" name = "coder-agent"
image = "registry.samson.media/coder-workspace:latest" image = "registry.samson.media/coder-workspace:latest"
@@ -718,9 +635,7 @@ resource "kubernetes_deployment_v1" "workspace" {
volume { volume {
name = "home" name = "home"
persistent_volume_claim { empty_dir {}
claim_name = kubernetes_persistent_volume_claim_v1.home.metadata[0].name
}
} }
} }
} }