Annotate each line in the given resource's YAML with information from the managedFields to show who last modified the field.
As long as the field .metadata.manageFields of the resource is set properly, this command
is able to display the manager of each field.
kubectl-blame can work in two ways:
- Directly from the cluster — fetch and blame resources in one step:
kubectl blame deployments my-app - From piped input — use
kubectl get(or any command that outputs YAML/JSON) and pipe the result:This also works with Kubernetes List objects (e.g.,kubectl get deployments -o yaml | kubectl blamekind: List), so you can pipe the output ofkubectl getwhich wraps multiple resources in a List.
| Distribution | Command / Link |
|---|---|
| Krew | kubectl krew install blame |
| Pre-built binaries for macOS, Linux | GitHub releases |
# Blame pod 'foo' in default namespace
kubectl blame pods foo
# Blame deployment 'foo' and 'bar' in 'ns1' namespace
kubectl blame -n ns1 deploy foo bar
# Blame deployment 'bar' in 'ns1' namespace and hide the update time
kubectl blame -n ns1 --time none deploy bar
# Blame resources in file 'pod.yaml'(will access remote server)
kubectl blame -f pod.yaml
# Blame deployment saved in local file 'deployment.yaml'(will NOT access remote server)
kubectl blame -i deployment.yaml
# Or pipe from stdin (auto-detected)
cat deployment.yaml | kubectl blame
| flag | default | description |
|---|---|---|
--time |
relative |
Time format. One of: full, relative, none. |
--color |
auto |
Color output. One of: auto, always, never. |
--filename, -f |
Filename identifying the resource to get from a server. | |
--input, -i |
auto |
Read object from the given file. When set to auto, automatically read from stdin if piped. Use - to force reading from stdin. |