Companion Tools
KSail manages cluster provisioning and GitOps bootstrapping. Inner-loop tools like Tilt, Skaffold, and mirrord handle the build-watch-deploy cycle or live traffic mirroring. They are complementary—not competing—layers that work together seamlessly.
| Layer | Responsibility | Tool |
|---|---|---|
| Cluster lifecycle | Create, configure, and delete clusters | KSail |
| GitOps bootstrap | Install Flux/ArgoCD, push manifests | KSail |
| Build & deploy loop | Watch files, rebuild images, hot-reload | Tilt or Skaffold |
| Live traffic mirroring | Mirror pod traffic to a local process | mirrord |
KSail + Tilt
Section titled “KSail + Tilt”Tilt watches your source files, rebuilds container images, and applies updated manifests to a running cluster. KSail creates and configures that cluster.
Workflow
Section titled “Workflow”-
Create the cluster with KSail
Terminal window ksail cluster init --name dev --distribution K3s --cni Ciliumksail cluster create -
Write a
Tiltfilethat targets the KSail-managed kubeconfig context.KSail sets the kubeconfig context automatically after
ksail cluster create. The context name depends on the distribution:Distribution Context name Vanilla (Kind) kind-<name>K3s (K3d) k3d-<name>Talos admin@<name>VCluster vcluster-docker_<name># Tiltfileallow_k8s_contexts("k3d-dev")docker_build("my-app", ".")k8s_yaml("k8s/deployment.yaml")k8s_resource("my-app", port_forwards="8080:80") -
Start Tilt
Terminal window tilt upTilt connects to the KSail-managed cluster, rebuilds the image on every file save, and applies the updated manifest.
-
Tear down
Terminal window tilt downksail cluster delete
-
Run
ksail cluster infoto confirm the cluster is healthy before starting Tilt. -
If you use a local registry (
--local-registry localhost:5050), configure Tilt to push there:# Tiltfiledefault_registry("localhost:5050")
KSail + Skaffold
Section titled “KSail + Skaffold”Skaffold automates the build-tag-deploy pipeline. KSail provides the cluster; Skaffold handles the rest.
Workflow
Section titled “Workflow”-
Create the cluster with KSail
Terminal window ksail cluster init --name dev --distribution Vanilla --cni Ciliumksail cluster create -
Create
skaffold.yamlpointing at the KSail cluster context.skaffold.yaml apiVersion: skaffold/v4beta11kind: Configmetadata:name: my-appbuild:artifacts:- image: my-appmanifests:rawYaml:- k8s/deployment.yamldeploy:kubeContext: kind-devkubectl: {} -
Run Skaffold in dev mode
Terminal window skaffold devSkaffold watches for file changes, rebuilds the image, and redeploys to the KSail-managed cluster.
-
Tear down
Terminal window # Ctrl+C to stop Skaffold (it cleans up deployed resources)ksail cluster delete
-
Use
skaffold dev --port-forwardfor automatic port forwarding. -
If you enabled a local registry in KSail, point Skaffold at it:
# skaffold.yaml (build section)build:local:push: trueartifacts:- image: localhost:5050/my-app
KSail + mirrord
Section titled “KSail + mirrord”mirrord lets you run a local process as if it were inside the cluster by mirroring or stealing traffic from a remote pod. KSail sets up the cluster; mirrord connects your local process to it.
Workflow
Section titled “Workflow”-
Create a cluster and deploy your application
Terminal window ksail cluster init --name dev --distribution K3s --cni Ciliumksail cluster create# Deploy your workloadkubectl create deployment my-app --image=my-app:latestkubectl expose deployment my-app --port=80 -
Create a mirrord config (optional—mirrord works without one).
{"target": {"path": "deployment/my-app","namespace": "default"},"feature": {"network": {"incoming": "mirror"},"fs": "read"}}Save this as
.mirrord/mirrord.jsonin your project root. -
Run your process through mirrord
Terminal window mirrord exec --config .mirrord/mirrord.json -- ./my-appYour local process receives traffic destined for
deployment/my-appinside the KSail-managed cluster, while reading remote files and environment variables from the pod. -
Tear down
Terminal window # Stop the mirrord session (Ctrl+C)ksail cluster delete
- mirrord also integrates as a VS Code and JetBrains plugin—no CLI needed.
- Use
"incoming": "steal"instead of"mirror"to redirect all traffic to your local process rather than duplicating it.
Combining Multiple Tools
Section titled “Combining Multiple Tools”You can layer these tools together. For example, use Tilt for the build-deploy loop and mirrord for a specific service you want to debug locally:
# Terminal 1 — cluster + Tiltksail cluster createtilt up
# Terminal 2 — mirrord for live debuggingmirrord exec --target deployment/my-app -- dlv debug ./cmd/serverNext Steps
Section titled “Next Steps”- Use Cases — Workflows for learning, development, and CI/CD
- Features — KSail capabilities including GitOps, secrets, and AI chat
- Configuration — Complete configuration reference