3 min read | by Jordi Prats
In the same way we can use git blame to identify who and when has modified a specific line, with kubectl blame we'll be able to do the same to Kubernetes objects
It is a krew plugin so installing it is as easy as follows:
$ kubectl krew install blame
Once installed we just need to specify the object we want to see:
$ kubectl blame hpa ampa-core apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: Go-http-client (Update 18 hours ago) annotations: kube-controller-manager (Update 18 hours ago) autoscaling.alpha.kubernetes.io/conditions: '[{"type":"AbleToScale","status":"True","lastTransitionTime":"2022-05-12T23:14:33Z","reason":"ScaleDownStabilized","message":"recent recommendations were higher than current one, applying the highest recent recommendation"},{"type":"ScalingActive","status":"True","lastTransitionTime":"2022-05-13T05:18:05Z","reason":"ValidMetricFound","message":"the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)"},{"type":"ScalingLimited","status":"False","lastTransitionTime":"2022-05-13T05:18:05Z","reason":"DesiredWithinRange","message":"the desired count is within the acceptable range"}]' kube-controller-manager (Update 18 hours ago) autoscaling.alpha.kubernetes.io/current-metrics: '[{"type":"Resource","resource":{"name":"cpu","currentAverageUtilization":2,"currentAverageValue":"22m"}}]' Go-http-client (Update 18 hours ago) helm.sh/hook: post-install,post-upgrade Go-http-client (Update 18 hours ago) helm.sh/hook-weight: "100" creationTimestamp: "2022-05-12T23:14:30Z" name: ampa-core namespace: pet2cattle resourceVersion: "138072472" uid: 4bc1d4b0-4e8d-4ecb-b7df-6951c7db6b04 spec: Go-http-client (Update 18 hours ago) maxReplicas: 2 Go-http-client (Update 18 hours ago) minReplicas: 2 scaleTargetRef: Go-http-client (Update 18 hours ago) apiVersion: apps/v1 Go-http-client (Update 18 hours ago) kind: Deployment Go-http-client (Update 18 hours ago) name: ampa-core Go-http-client (Update 18 hours ago) targetCPUUtilizationPercentage: 70 status: kube-controller-manager (Update 18 hours ago) currentCPUUtilizationPercentage: 2 kube-controller-manager (Update 18 hours ago) currentReplicas: 2 kube-controller-manager (Update 18 hours ago) desiredReplicas: 2
For example, if we edit the object with kubectl edit:
$ kubectl edit hpa ampa-core horizontalpodautoscaler.autoscaling/ampa-core edited
And repeat the kubectl krew command we'll be able to see the difference:
$ kubectl blame hpa ampa-core apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: Go-http-client (Update 18 hours ago) annotations: kube-controller-manager (Update 18 hours ago) autoscaling.alpha.kubernetes.io/conditions: '[{"type":"AbleToScale","status":"True","lastTransitionTime":"2022-05-12T23:14:33Z","reason":"ScaleDownStabilized","message":"recent recommendations were higher than current one, applying the highest recent recommendation"},{"type":"ScalingActive","status":"True","lastTransitionTime":"2022-05-13T05:18:05Z","reason":"ValidMetricFound","message":"the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)"},{"type":"ScalingLimited","status":"False","lastTransitionTime":"2022-05-13T05:18:05Z","reason":"DesiredWithinRange","message":"the desired count is within the acceptable range"}]' kube-controller-manager (Update 18 hours ago) autoscaling.alpha.kubernetes.io/current-metrics: '[{"type":"Resource","resource":{"name":"cpu","currentAverageUtilization":2,"currentAverageValue":"21m"}}]' Go-http-client (Update 18 hours ago) helm.sh/hook: post-install,post-upgrade Go-http-client (Update 18 hours ago) helm.sh/hook-weight: "100" creationTimestamp: "2022-05-12T23:14:30Z" name: ampa-core namespace: pet2cattle resourceVersion: "138072984" uid: 4bc1d4b0-4e8d-4ecb-b7df-6951c7db6b04 spec: Go-http-client (Update 18 hours ago) maxReplicas: 2 kubectl-edit (Update 5 seconds ago) minReplicas: 1 scaleTargetRef: Go-http-client (Update 18 hours ago) apiVersion: apps/v1 Go-http-client (Update 18 hours ago) kind: Deployment Go-http-client (Update 18 hours ago) name: ampa-core Go-http-client (Update 18 hours ago) targetCPUUtilizationPercentage: 70 status: kube-controller-manager (Update 18 hours ago) currentCPUUtilizationPercentage: 2 kube-controller-manager (Update 18 hours ago) currentReplicas: 2 kube-controller-manager (Update 18 hours ago) desiredReplicas: 2
It uses the .metadata.manageFields to highlight the changes:
$ kubectl get hpa spin-orca -o yaml apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: managedFields: - apiVersion: autoscaling/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:annotations: .: {} f:helm.sh/hook: {} f:helm.sh/hook-weight: {} f:spec: f:maxReplicas: {} f:scaleTargetRef: f:apiVersion: {} f:kind: {} f:name: {} f:targetCPUUtilizationPercentage: {} manager: Go-http-client operation: Update time: "2022-05-12T23:14:30Z" - apiVersion: autoscaling/v1 fieldsType: FieldsV1 fieldsV1: f:spec: f:minReplicas: {} manager: kubectl-edit operation: Update time: "2022-05-13T05:21:38Z" - apiVersion: autoscaling/v1 fieldsType: FieldsV1 fieldsV1: f:metadata: f:annotations: f:autoscaling.alpha.kubernetes.io/conditions: {} f:autoscaling.alpha.kubernetes.io/current-metrics: {} f:status: f:currentCPUUtilizationPercentage: {} f:currentReplicas: {} f:desiredReplicas: {} f:lastScaleTime: {} manager: kube-controller-manager operation: Update time: "2022-05-13T05:23:05Z" name: ampa-core namespace: pet2cattle resourceVersion: "138075242" uid: 4bc1d4b0-4e8d-4ecb-b7df-6951c7db6b04 (...)
Posted on 13/05/2022