kwhy explains why a Kubernetes object keeps changing.
It is designed for incident response in controller-heavy clusters where manual child edits keep getting overwritten.
curl -L https://raw.githubusercontent.com/fizz/kwhy/main/kwhy -o /usr/local/bin/kwhy
chmod +x /usr/local/bin/kwhy
# First run (real-world Kubeflow case)
kwhy explain deployment ml-pipeline-ui-artifact -n admin --context mlinfra-prod- Owner chain (lineage)
- Write managers (
managedFields) - Likely reconcilers (annotation/manager heuristics)
- Desired-state inputs (ConfigMap/Secret refs)
- Manual edit revert risk
- Basic RBAC sanity (
kubectl auth can-i)
curl -L https://raw.githubusercontent.com/fizz/kwhy/main/kwhy -o /usr/local/bin/kwhy
chmod +x /usr/local/bin/kwhykubectljq- access to target cluster/context
kwhy explain deployment ml-pipeline-ui-artifact -n admin --context mlinfra-prod
kwhy explain deploy ml-pipeline-ui -n kubeflow --context mlinfra-prod --format jsonOwner ChainWrite ManagersLikely ReconcilersDesired-State InputsRevert RiskRBAC SanityActions
See examples/incident-kubeflow-ml-pipeline-ui-artifact.txt.
kwhy is heuristic by design. Kubernetes has no universal “single reconciler of record” field.
Use it as a fast narrowing tool, then validate with controller-specific context.
MIT