Skip to content

Unmanaged (kubeconfig-only) Clusters

KSail can see and operate on any cluster in your kubeconfig, even one it did not provision — a managed cloud cluster (EKS/GKE/AKS), a kubeadm cluster, or a colleague’s cluster shared with you. These appear as unmanaged clusters: KSail surfaces them clearly marked, never hidden and never shown as a normal managed cluster, and refuses ksail-only lifecycle actions on them with a documented message instead of failing silently.

ksail cluster list includes kubeconfig contexts KSail did not provision, each shown with an explicit unmanaged marker:

Terminal window
ksail cluster list

Unmanaged clusters appear with blank distribution and provider columns (there is no KSail spec to read) and a STATUS of Unmanaged. Discovery reads your default kubeconfig (~/.kube/config), so a context kept only in a non-default KUBECONFIG path may not be listed.

Much of KSail’s read/operate surface is client-go-backed, so it works against the selected kubeconfig context — managed or not. Switch to the unmanaged cluster first, then use it like any other:

Terminal window
ksail cluster switch my-eks-prod # switch the active kubeconfig context
ksail cluster connect # open k9s against the selected context
ksail cluster info --name my-eks-prod # endpoint + kubeconfig access for a named cluster
ksail cluster diagnose --name my-eks-prod # diagnoses the ACTIVE context; --name only labels the report
ksail cluster backup ./snapshot # snapshot Kubernetes resources over the API server
ksail cluster restore ./snapshot # restore them

Within the ksail workload group, the commands that work against any selected unmanaged context are the API-backed ones: the kubectl-style wrappers (get, logs, apply, exec, describe, wait, forward, …) plus watch, edit, validate, scan, and debug. Helm-based workload install works too — all resolve the kubeconfig and need no KSail metadata. (Backup and restore are ksail cluster subcommands, shown above, not workload ones.)

Anything that needs KSail-managed provisioning or a spec.cluster.* configuration is clearly refused on an unmanaged cluster — never a silent no-op or a stack trace:

Terminal window
ksail cluster delete --name my-eks-prod
# Error: "my-eks-prod" is an unmanaged cluster: cluster is not managed by ksail;
# read-only operations (list, resource browsing, logs, exec) still work

The refusal covers the lifecycle operations KSail cannot drive without a provider:

  • Lifecycledelete, update, start, stop are refused with the unmanaged message (no provider/distribution to act on). create is not a selected-context action — it provisions from ksail.yaml, so it is unaffected by this guard.
  • Component installation — CNI, CSI, metrics-server, GitOps/Flux, policy engine (all driven from spec.cluster.*).
  • GitOps reconciliationworkload reconcile targets GitOps-managed workloads and needs a Flux/GitOps-configured cluster, not just a kubeconfig.
Capability Managed cluster Unmanaged (kubeconfig-only) cluster
List / switch / connect ✅ (marked unmanaged)
Info ✅ with a resolvable --name
Diagnose ⚠️ diagnoses the active context — switch first (#6117)
workload API-backed (get, logs, exec, apply, watch, forward, install, …)
workload network / images / push ⚠️ also need a local ksail.yaml
workload export / import ✅ (Docker) ⛔ Docker-backed nodes only
cluster backup / cluster restore
Web UI / desktop resource browsing ⛔ listed only; operations are CLI-only (#6116)
Delete / update / start / stop ⛔ refused with a documented message
Component install (CNI, CSI, GitOps, policy) ⛔ requires spec.cluster.*
GitOps reconcile ⛔ requires a GitOps-configured cluster
Distribution / provider reported blank (no KSail spec)