kubernetes - 为什么 k8s 部署 hpa 不计算 istio/sidecar 的 cpu 请求
问题描述
我为我的部署/应用程序设置了 hpa,例如 CPU 80%。
我的应用部署有两个容器,一个是用于流量的应用,另一个是自动注入的 istio-proxy。
当我在运行流量期间获得 hpa 时,我发现 hpa 结果出乎意料。
istio-proxy 的 cpu 请求是 2G。app的cpu请求是4G。istio-proxy 消耗的 cpu 为 1G。app消耗的cpu是4G。
所以,我预计这个吊舱(包括 2 个容器)的 hpa 是 (1+2)/(2+4) = 50%。
但实际结果接近 (1+2)/4 = 75%。
似乎 istio-proxy 的 cpu 请求被排除在计算 hpa 的 cpu 利用率之外。
据我所知,k8s 从部署中获取 cpu 请求,但实际上对于这个 sidecar 自动注入案例,部署 yaml 没有任何 istio-proxy 容器信息。
我想这就是排除 istio-proxy 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 利用率为 pod 中所有容器的总 cpu 使用率除以总请求数
推荐阅读
- blazor-webassembly - 找不到 BlazorWebAssembly JS 文件。这通常表示打包错误
- sql - BigQuery - 连接谓词中的表不受支持的子查询
- python - 如何在 C++ proejct 中嵌入二进制化的 python 包
- postgresql - 错误:(repmgr)服务器处于待机模式,无法注册为主服务器
- reactjs - Storybook:如何测试基于路线的动画?
- frontend - 试图分叉 pancakeswap 前端彩票页面。获取多路通话卡盘失败
- android - 颤振 apk 问题
- docker - 在 gitlab 管道中运行 oracle 映像
- javascript - 如何使用javascript链接html文件夹
- discord.js - 使用 discord.js v12 接收消息时尝试将消息发送到多个通道