VS Code in the browser, and the homelab's workbench: the IDE at code.kellyferrone.com, with the whole cluster one terminal away. Agent sessions run here too, so this pod is where most of the homelab gets built.
kubectl build, plan and up
work from any terminal./projects is NFS, so a pod restart never touches your checkouts./claude is NFS too, shared with the claude runner: the same memory,
settings and sessions in the IDE and in CI.build, pinned to nucster.
| Component | Adds |
|---|---|
components/config | the 1Password Connect token, rendered from an ExternalSecret |
components/env | environment from codeserver.env and an ExternalSecret, Claude and VS Code telemetry included |
components/hooks | an init script and a post-start hook |
components/projects | /projects, NFS from puffer |
components/volume | the codeserver-state volume |
components/claude | /claude, NFS shared with the claude runner |
components/service-account | the codeserver service account, bound to cluster-admin |
components/ingress | the Ingress and its certificate |
components/ssh | an ssh config (off) |
One codeserver-state claim carries everything that has to survive a pod restart, mounted twice
by subpath:
| subPath | mount path | holds |
|---|---|---|
data | /home/coder/.local/share/code-server | extensions, editor settings, workspace state |
config | /home/coder/.config | XDG_CONFIG_HOME — gh, op, gcloud, codex, claude |
The init container creates the subdirs and links kustomize back to /kubed/kustomize, where the
exec plugins are baked into the image. /kubed itself stays ephemeral.
dashboard/ is the Codeserver dashboard in Grafana, as source: one file per panel, built into a GrafanaManifest and deployed on its own.
kubectl up dashboard
Install an extension from a vsix with:
code-server --install-extension /path/to/your-extension.vsix
The LDAP explorer:
curl -LO https://github.com/fengtan/ldap-explorer/releases/download/1.5.2/ldap-explorer-1.5.2.vsix
PromQL highlighting (not on Open VSX, so straight from the marketplace CDN):
curl -LO https://ventura.gallerycdn.vsassets.io/extensions/ventura/prom/1.3.3/1706942171176/Microsoft.VisualStudio.Services.VSIXPackage
mv Microsoft.VisualStudio.Services.VSIXPackage ventura.prom-1.3.3.vsix
kubectl build .
kubectl plan .
kubectl up .
Or run the 🔍 Plan and 🚀 Deploy workflows.
kubed/codeserver is built here, from the Dockerfile: upstream
codercom/code-server plus the kubed toolchain. Two kubed images are copy-only dependencies —
kubed/devcontainers for the shared install scripts and kubed/krm for kubectl, its plugins,
helm and yq — pinned beside the base so Dependabot bumps all three.
docker compose up --build # http://localhost:8088
📸 Image Builder pushes :main on every merge. 🧬 Publish Version cuts a release: it pins
newTag in kustomization.yaml to the new version, tags it, and pushes
kubed/codeserver:vX.Y.Z. Run it with push=false first.
| What | Pin | Latest from |
|---|---|---|
| code-server | FROM codercom/code-server in Dockerfile | code-server releases |
| Toolchain | FROM kubed/krm in Dockerfile | kubed-io/krm |
| Install scripts | FROM kubed/devcontainers in Dockerfile | kubed-io/devcontainers |
| Deployed image | newTag in kustomization.yaml | written by 🧬 Publish Version |
An upgrade replaces the pod the agent usually runs in: expect the session to drop, and check the
CLI tools under /kubed/bin afterwards.
Content type
Image
Digest
sha256:a412067e3…
Size
516.5 MB
Last updated
about 16 hours ago
docker pull kubed/codeserver