skills/k8s-dev-deploy/SKILL.md
Build, push, and deploy Kurtosis dev images to a Kubernetes cluster without creating a release. Rebuilds engine, core, and files-artifacts-expander as multi-arch Docker images with a unique tag, pushes to the logged-in user's Docker Hub, and restarts the engine. Use when testing local code changes on a k8s cluster.
npx skillsauth add kurtosis-tech/kurtosis k8s-dev-deployInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Build and deploy Kurtosis from source to a Kubernetes cluster for testing without making a release.
Three container images must be built and pushed:
engine — from engine/server/Dockerfilecore (APIC) — from core/server/Dockerfilefiles-artifacts-expander — from core/files_artifacts_expander/DockerfileThe CLI binary is also rebuilt locally.
All images share the same tag, which is set in kurtosis_version/kurtosis_version.go as KurtosisVersion. This version is compiled into the engine binary and used at runtime to pull the core and files-artifacts-expander images.
DOCKER_USER=$(docker info 2>/dev/null | grep Username | awk '{print $2}')
TAG="$(git rev-parse --short HEAD)-$(date +%s)"
Edit these three constants to replace kurtosistech with $DOCKER_USER:
| File | Constant | Default Value |
|------|----------|--------------|
| engine/launcher/engine_server_launcher/engine_server_launcher.go | containerImage | kurtosistech/engine |
| core/launcher/api_container_launcher/api_container_launcher.go | containerImage | kurtosistech/core |
| core/server/api_container/server/startosis_engine/kurtosis_types/service_config/service_config.go | filesArtifactsExpanderImage | kurtosistech/files-artifacts-expander |
Edit kurtosis_version/kurtosis_version.go and set KurtosisVersion to the generated $TAG.
IMPORTANT: Always use a unique tag (include a timestamp) to avoid Kubernetes node image caching issues. Nodes with imagePullPolicy: IfNotPresent won't re-pull an image with the same tag.
# Engine
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o engine/server/build/kurtosis-engine.arm64 engine/server/engine/main.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o engine/server/build/kurtosis-engine.amd64 engine/server/engine/main.go
# Core (APIC)
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o core/server/build/api-container.arm64 core/server/api_container/main.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o core/server/build/api-container.amd64 core/server/api_container/main.go
# Files Artifacts Expander
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -o core/files_artifacts_expander/build/files-artifacts-expander.arm64 core/files_artifacts_expander/main.go
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o core/files_artifacts_expander/build/files-artifacts-expander.amd64 core/files_artifacts_expander/main.go
# CLI (local use)
go build -o /tmp/kurtosis ./cli/cli/
Ensure a buildx builder exists (create with docker buildx create --name kurtosis-builder --use if needed).
docker buildx build --platform linux/amd64,linux/arm64 --builder kurtosis-builder --no-cache -t $DOCKER_USER/engine:$TAG --push engine/server/
docker buildx build --platform linux/amd64,linux/arm64 --builder kurtosis-builder --no-cache -t $DOCKER_USER/core:$TAG --push core/server/
docker buildx build --platform linux/amd64,linux/arm64 --builder kurtosis-builder --no-cache -t $DOCKER_USER/files-artifacts-expander:$TAG --push core/files_artifacts_expander/
IMPORTANT: Always use --no-cache to prevent buildx from caching old binaries.
/tmp/kurtosis engine stop
# Clean any leftover namespaces
kubectl get ns | grep kurtosis | awk '{print $1}' | xargs -r kubectl delete ns
/tmp/kurtosis engine start
/tmp/kurtosis gateway &
/tmp/kurtosis run github.com/ethpandaops/ethereum-package
/tmp/kurtosis clean -a
When making further code changes, repeat from step 3 with a new unique tag each time. Never reuse a tag — k8s nodes cache images and won't pull updates under the same tag.
kubectl get pods -A | grep kurtosis.development
Develop and debug Kurtosis Starlark packages. Create packages from scratch, understand the plan-based execution model, use print() debugging, handle future references, and test packages locally. Use when writing or troubleshooting .star files.
data-ai
Manage services in Kurtosis enclaves. Add, inspect, stop, start, remove, update services. View logs, shell into containers, and execute commands. Use when you need to interact with running services.
content-media
Run Starlark scripts and packages with kurtosis run. Covers all flags including dry-run, args-file, parallel execution, image download modes, verbosity levels, and production mode. Use when executing Kurtosis packages locally or from GitHub.
testing
Manage Kurtosis Portal for remote context access. Start, stop, and check status of the Portal daemon that enables communication with remote Kurtosis servers. Use when working with remote Kurtosis contexts.