bin he
bin he

Reputation: 1

why k8s deployment hpa doesn't calculate istio/sidecar 's cpu request

i set hpa for my deployment/app, for example, CPU 80%.

my app deployment has two containers, one is app for traffic, the other is automatically injected istio-proxy.

when i get hpa during running traffic, i found something unexpected for the hpa result.

the cpu request of istio-proxy is 2G. the cpu request of app is 4G. the cpu consumed of istio-proxy is 1G. the cpu consumed of app is 4G.

so, i expected the hpa of this pod (including 2 containers) is (1+2)/(2+4) = 50%.

but the actual result is close to (1+2)/4 = 75%.

it seems the istio-proxy's cpu request is excluded from calculating cpu utilization of hpa.

as i know, k8s get cpu requests from deployment, but actually for this sidecar auto injection case, the deployment yaml doesn't have any istio-proxy container information.

i guess that's why the istio-proxy cpu request is excluded. but is that the expected behavior or a bug ?

Upvotes: 0

Views: 791

Answers (1)

I think as of 1.19, the hpa works on an average value of all containers in the pods. The exact logic is here : https://github.com/kubernetes/kubernetes/blob/v1.9.0/pkg/controller/podautoscaler/metrics/utilization.go#L49

currentUtilization = int32((metricsTotal * 100) / requestsTotal)

As per the above logic HPA is calculating pod cpu utilization as total cpu usage of all containers in pod divided by total request

Upvotes: 0

Related Questions