You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

autoscaling/v2beta2 HPA与apiregistration.k8s.io/v1 APIService搭配时无法获取自定义指标问题排查

问题分析与解决思路

从你描述的现象来看:手动请求自定义指标完全正常,但HPA却无法获取指标,且问题是在将APIService升级到v1版本后出现的,大概率是APIService v1版本的配置细节或HPA的指标引用规范发生了严格化变化,以下是几个针对性的排查和解决步骤:

1. 补充HPA中对象引用的namespace字段

你的HPA配置里,object.describedObject没有指定namespace字段:

describedObject:
  kind: Service
  name: services-metrics-service

虽然HPA默认会使用自身所在的namespace,但APIService v1版本对自定义指标API的调用规范更严格,可能要求明确指定对象的命名空间。尝试补充namespace字段:

describedObject:
  kind: Service
  name: services-metrics-service
  namespace: test

更新HPA后观察是否恢复正常。

2. 修正自定义指标返回的apiVersion格式

从你手动请求的结果来看,返回的describedObject.apiVersion是"/v1",这不符合Kubernetes API规范:

"describedObject": {
  "kind": "Service",
  "namespace": "test",
  "name": "services-metrics-service",
  "apiVersion": "/v1"  // 此处格式错误
}

Service属于core API组,正确的apiVersion应该是"v1"。APIService v1beta1可能对这种不规范格式有兼容,但v1版本的API校验更严格,直接导致HPA无法解析返回结果。

你需要修改自定义指标暴露服务的代码,将apiVersion修正为"v1",重新部署后再测试HPA。

3. 检查APIService的状态与优先级配置

先确认APIService是否处于正常就绪状态:

kubectl get apiservice v1.custom.metrics.k8s.io -o yaml

查看status.conditions中type: Ready对应的status是否为True。如果状态异常,检查对应的metrics服务Pod是否正常运行、端口是否可达。

另外,检查优先级配置:

  • spec.groupPriorityMinimum设为1000是合理的(自定义指标组优先级通常高于内置组)
  • spec.versionPriority设为5时,要确保没有残留的v1beta1版本APIService(如果有,会导致版本优先级冲突)

如果存在旧的v1beta1 APIService,执行删除操作:

kubectl delete apiservice v1beta1.custom.metrics.k8s.io

4. 排查HPA控制器的自定义指标API访问权限

手动请求正常不代表HPA控制器有对应的访问权限。检查HPA控制器所在的ServiceAccount(通常在kube-system命名空间下的horizontal-pod-autoscaler)是否有权限访问custom.metrics.k8s.io API组:

kubectl auth can-i get services.custom.metrics.k8s.io --as=system:serviceaccount:kube-system:horizontal-pod-autoscaler -n test

如果返回no,需要创建对应的RBAC规则:

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: hpa-custom-metrics-reader
rules:
- apiGroups: ["custom.metrics.k8s.io"]
  resources: ["services/*"]
  verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: hpa-custom-metrics-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: hpa-custom-metrics-reader
subjects:
- kind: ServiceAccount
  name: horizontal-pod-autoscaler
  namespace: kube-system

应用配置后等待RBAC权限生效,或重启HPA控制器。


内容的提问来源于stack exchange,提问作者Urko Lekuona

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 06:48:11