无法定位GKE集群中已弃用autoscaling/v2beta2 API的调用来源
排查GKE集群中autoscaling/v2beta2 API调用来源(未直接使用但收到弃用通知)
问题描述
我管理着Google Cloud上的GKE集群(当前版本1.25,计划升级至1.26),收到通知称集群正在使用已弃用的autoscaling/v2beta2 API(路径/apis/autoscaling/v2beta2/horizontalpodautoscalers),UserAgent为v2.6.0,调用次数达27000。但我已完成以下排查步骤却未找到调用来源:
- 检查所有命名空间的HPA资源,确认仅存在
autoscaling/v2版本的ingress-nginx-controllerHPA - 通过GCP日志资源管理器和gcloud CLI查询审计日志,未找到该API的调用记录
- 更新了所有第三方工具(包括NGINX Ingress Controller的Helm Chart)
- 直接调用该API路径未返回任何结果
排查方向
1. 检查NGINX Ingress Controller的内部组件
你的HPA是autoscaling/v2版本,但NGINX Ingress Controller的某些内部组件(比如metrics采集器或自动扩缩容逻辑)可能仍在调用旧API:
- 查看Ingress Controller Pod的日志,搜索关键词定位调用痕迹:
kubectl logs -n <ingress-namespace> -l app.kubernetes.io/name=ingress-nginx --all-containers | grep "autoscaling/v2beta2" - 确认Ingress Controller的镜像版本:UserAgent显示为v2.6.0,需对应检查该版本是否残留了v2beta2 API的调用逻辑(部分旧分支版本可能未完全适配新API)。
2. 排查集群内监控/运维工具
部分监控组件(如Prometheus Adapter、自定义metrics服务)或运维脚本可能在后台调用旧API:
- 搜索集群中带有
v2.6.0标识的Pod:kubectl get pods --all-namespaces -o json | jq '.items[] | select(.spec.containers[].env[]? | .value | contains("v2.6.0")) | .metadata.namespace + "/" + .metadata.name' - 检查自定义metrics服务(如kube-state-metrics)的配置,确认其查询HPA时使用的API版本。
3. 检查GKE托管组件的隐藏调用
GKE的部分托管附加组件(如云监控集成、托管日志服务)可能在后台调用旧API,且未被标准审计日志捕获:
- 查看GCP控制台Kubernetes Engine > 集群 > 附加组件页面,确认所有托管组件为最新版本
- 使用更宽泛的日志过滤器,针对API路径进行查询:
gcloud logging read 'resource.type="k8s_cluster" AND requestURI:"/apis/autoscaling/v2beta2/horizontalpodautoscalers"' --limit 100 --format json
4. 排查本地/CI/CD工具的遗留调用
本地kubectl客户端或CI/CD管道中的旧版本工具可能默认使用v2beta2 API:
- 检查本地kubectl版本:
kubectl version --client - 验证CI/CD流程中使用的kubectl镜像/工具版本,v1.23及以下版本的kubectl操作HPA时会默认调用v2beta2 API。
5. 启用更详细的审计日志
若当前审计日志无记录,可能是审计策略未覆盖相关API:
- 进入GCP控制台Kubernetes Engine > 集群 > 目标集群 > 编辑
- 在审计日志部分,勾选
autoscalingAPI组的日志记录 - 保存配置后等待生效,再重新查询日志
内容的提问来源于stack exchange,提问作者Tim Arns
相关产品推荐
相关产品推荐

