Repository navigation
Compare
Sextant compares an object with another one — in another cluster, another namespace or under another name — with its last-applied configuration, or with its Helm release's manifest, and compares two namespaces as a whole. Comparing is read-only: nothing is changed, and a cluster that is not connected is connected only when you click Connect.
Contents: Compare with… · What is left out · Ignored paths · Drift from last-applied and from Helm · Secrets · Compare namespaces · Limits
Compare with… is in the actions of every object (the row's ⋮, the details, the command palette). Choose what to compare with:
- Another object: pick the Cluster, Namespace and Name; names of that kind are suggested as you type (Matching objects). A cluster that is not connected shows Not connected and a Connect button.
-
Its last-applied configuration: the
kubectl.kubernetes.io/last-applied-configurationannotation, offered only when the object has one (it was created or changed withkubectl apply). -
Its Helm release manifest: offered only for an object of a Helm release (it carries
meta.helm.sh/release-nameandmeta.helm.sh/release-namespace).
Press Compare. The result is a side-by-side view with the number of fields that differ and a list of them; No differences. when there are none.
Typical uses: staging against production (payments in staging and in prod), two replicas of a configuration in different namespaces, or "what did someone change by hand?".
So that the comparison shows what you care about, these are never compared:
-
status; - what the API server writes:
managedFields,uid,resourceVersion,generation,creationTimestamp,selfLink, the namespace, owner references'uid; - generated names (a name from
generateNameis compared as its prefix); - controller labels such as
pod-template-hash,controller-revision-hash,controller-uid,job-name; - the annotations
kubectl.kubernetes.io/last-applied-configurationanddeployment.kubernetes.io/revision; - a Secret's values (see Secrets).
Hide defaults (off by default) also leaves out fields the API server fills in when a manifest does not set them (for example imagePullPolicy, terminationMessagePath, a Deployment's revisionHistoryLimit) while they still hold the default value, and assigned cluster IPs.
Under every result, Ignored paths of : lists the paths left out of every comparison of that kind; type one and press Ignore, or remove one. A path starts with / and names keys separated by /; * stands for any key or list item:
| Path | Leaves out |
|---|---|
/spec/replicas |
The replica count (scaled by an HPA) |
/metadata/labels/team |
One label |
/metadata/annotations/* |
All annotations |
/spec/template/spec/containers/*/image |
The image of every container |
The paths are saved in the settings (compare.ignorePaths in settings.json, per kind), at most 50 per kind.
Against a last-applied configuration or a Helm manifest, Sextant shows drift: the fields the desired side sets that the live object has otherwise. Fields the API server or a controller added (defaults, assigned values) are not drift. "The live object has every field of the last-applied configuration unchanged" means no drift.
For a Helm release, Check all of Helm release compares every object of the latest readable revision's manifest with its live copy: In sync, N differences, Missing (the object does not exist in the cluster) or Cannot be read; Details shows the fields. Documents of the manifest that cannot be read are counted and not compared.
Secret values are compared inside Sextant's backend by their SHA-256 hashes. The window receives only the key names and, per key, Same value, Different value, Only on the left or Only on the right — neither the values nor their hashes. A value is read into the window only when you click Show values on a key of a live Secret, the same way the Secret's details show one value.
A Secret compared with its last-applied configuration, and a Secret in a Helm manifest, are compared the same way.
Cluster → Compare namespaces compares two sides, each a cluster and a namespace (Left and Right), kind by kind. Choose the Kinds (Deployments, StatefulSets, DaemonSets, Services, ConfigMaps, Secrets, Ingresses, HorizontalPodAutoscalers, PodDisruptionBudgets, CronJobs, ServiceAccounts, Roles and RoleBindings; all ticked by default) and compare.
Objects are matched by kind and name into Only on the left, Only on the right, Different and Same (hidden unless you show it); click an object to see its differences. Secrets whose values differ count as Different even when everything else is the same. A kind that cannot be listed on one side is reported and the others are still compared.
The comparison is a snapshot taken when you press the button; it does not follow later changes.
- At most 500 objects of a kind per side and 40 kinds in one namespace comparison; the rest are not compared, and the page says so.
- At most 500 Secrets per namespace for the value comparison, and 300 objects of a Helm release.
- Only kinds that live in a namespace; cluster-wide kinds are compared object by object with Compare with….
- AI agents (MCP server) and extensions cannot use any of it.
Sextant is licensed under MIT or Apache-2.0. Found a mistake in this wiki? Open an issue.
Sextant
- Home
- Installation
- Getting started
- Using Sextant
- YAML editor
- Terminal
- Views and workspaces
- Kubeconfig management
- All clusters
- Safe apply (Preview changes)
- Upgrade readiness
- Security posture
- Storage
- Right-sizing
- Cost
- Resource map
- Change timeline
- Cleanup
- Autoscaling
- Connectivity
- Compare and drift
- RBAC: who can do what
- cert-manager and certificates
- Problems and notifications
- Gateway API
- Service mesh
- Installing Flux and Argo CD
- MCP server
- Extensions
- Writing extensions
- Large clusters
- Accessibility
- Settings
- Troubleshooting
For contributors