Companion Tools
KSail manages cluster provisioning and GitOps bootstrapping. Inner-loop tools handle the build-watch-deploy cycle, hot-reload, or localāremote traffic bridging. They are complementaryānot competingālayers.
ksail workload watch monitors your workload source directory and auto-applies changes. It scopes the apply to the nearest directory containing a kustomization file (kustomization.yaml, kustomization.yml, or Kustomization), falling back to kubectl apply -f <dir> --recursive when no kustomization boundary is found. The watch path is resolved from --path if set, otherwise from spec.workload.sourceDirectory in ksail.yaml, falling back to k8s/. All companion tools work alongside itāthey operate at different layers and donāt conflict.
| Layer | Responsibility | Tool |
|---|---|---|
| Cluster lifecycle | Create, configure, and delete clusters | KSail |
| GitOps bootstrap | Install Flux/ArgoCD, push manifests | KSail |
| Manifest watch & apply | Watch files, auto-apply Kustomize layers | KSail (ksail workload watch) |
| Build & deploy loop | Watch files, rebuild images, hot-reload | Tilt, Skaffold, or DevSpace |
| Localāremote bridging | Bridge local processes to in-cluster pods | Telepresence or 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.
-
Write a
Tiltfilethat targets the KSail-managed kubeconfig context.# 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 upWhen done, tear down with:
Terminal window tilt downksail cluster delete
KSail + DevSpace
Section titled āKSail + DevSpaceāDevSpace provides hot-reload for interpreted languages (Python, Node.js, Ruby) by syncing file changes directly into running containers without image rebuilds.
-
Initialize DevSpace in your project directory.
Terminal window devspace initThis creates a
devspace.yaml. Pass the KSail context via--kube-context(see the context name table above).devspace.yaml version: v2beta1name: my-appdev:my-app:imageSelector: my-appsync:- path: ./src:/app/srcterminal: {}ports:- port: "8080:80" -
Start DevSpace dev mode:
Terminal window devspace dev --kube-context <your-context>When done, tear down with:
Terminal window devspace purgeksail cluster delete
KSail + Telepresence
Section titled āKSail + TelepresenceāTelepresence bridges your local machine to the cluster network, letting you run a service locally while it receives traffic from in-cluster pods. This is useful for debugging services without image rebuilds.
-
Deploy your application
Terminal window kubectl --context <your-context> create deployment my-app --image=nginx:latestkubectl --context <your-context> expose deployment my-app --port=80 -
Connect Telepresence and intercept traffic:
Terminal window telepresence connect --context <your-context>telepresence intercept my-app --port 8080:80Traffic destined for
my-appis now routed tolocalhost:8080. Run your local service on that port:Terminal window # Run your service locally ā it receives cluster trafficgo run ./cmd/server --port 8080When done, tear down with:
Terminal window telepresence leave my-app || truetelepresence quit || trueksail cluster delete
KSail + Skaffold
Section titled āKSail + SkaffoldāSkaffold automates the build-tag-deploy pipeline. KSail provides the cluster; Skaffold handles the rest.
-
Create
skaffold.yamlpointing at the KSail cluster context (replace<your-context>with the value from the table above).skaffold.yaml apiVersion: skaffold/v4beta11kind: Configmetadata:name: my-appbuild:artifacts:- image: my-appmanifests:rawYaml:- k8s/deployment.yamldeploy:kubeContext: <your-context>kubectl: {} -
Run Skaffold in dev mode:
Terminal window skaffold devWhen done: Ctrl+C (also cleans up deployed resources), then
ksail cluster delete.
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.
See the KSail + mirrord guide for full setup instructions, mirror vs. steal mode comparison, IDE integration, and usage tips.