我为我的部署/应用程序设置了hpa,例如CPU 80%。
我的应用程序部署有两个容器,一个是用于流量的应用程序,另一个是自动注入的istio-proxy。
当我在交通运行中得到hpa时,我发现hpa的结果有些出乎意料。
istio-proxy的cpu请求为2G。应用程序的cpu请求为4G。istio-proxy消耗的cpu为1G。应用程序消耗的cpu为4G。
因此,我预计这个吊舱(包括2个容器(的hpa为(1+2(/(2+4(=50%。
但实际结果接近(1+2(/4=75%。
看来istio代理的cpu请求被排除在计算hpa的cpu利用率之外。
正如我所知,k8s从部署中获取cpu请求,但实际上对于这个sidecar自动注入案例,部署yaml没有任何istio-proxy容器信息。
我想这就是为什么istio代理cpu请求被排除在外的原因。但这是预期的行为还是错误?
我认为截至1.19,hpa对pod中所有容器的平均值有效。确切的逻辑如下:https://github.com/kubernetes/kubernetes/blob/v1.9.0/pkg/controller/podautoscaler/metrics/utilization.go#L49
currentUtilization = int32((metricsTotal * 100) / requestsTotal)
根据上述逻辑,HPA计算pod中所有容器的总cpu使用率除以总请求