GKE Autopilot自定义指标HPA不生效问题排查求助
我配置的基于自定义指标的HPA在标准GKE集群中可正常运行,但在GKE Autopilot集群中失效。我通过custom-metrics-stackdriver-adapter实现了基于未确认PubSub消息数量的HPA。
两类集群在空闲状态下均能维持与minReplicas对应的节点数,但仅标准GKE集群能在流量到来时将Pod数扩容至maxReplica。
两类集群的唯一差异是创建方式:
- 标准GKE创建命令:
gcloud container clusters create $CLUSTER_NAME \ --region=$REGION \ --project=$PROJECT_ID
- Autopilot GKE创建命令:
gcloud container clusters create-auto $CLUSTER_NAME \ --region=$REGION \ --project=$PROJECT_ID
疑问:是否因autoscaling/v2beta2与Autopilot不兼容?是否应改用autoscaling/v2?还有哪些可能原因?
1. API版本兼容性问题
autoscaling/v2beta2已被官方标记为废弃,GKE Autopilot对废弃beta API的支持有限,建议直接切换到autoscaling/v2稳定版API。Autopilot集群优先适配稳定版API规范,废弃的beta版本可能存在解析逻辑不兼容的情况,导致HPA控制器无法正确识别自定义指标并触发扩容。
2. 自定义指标适配器的权限问题
Autopilot集群有严格的默认权限管控,custom-metrics-stackdriver-adapter需要的监控权限可能未被正确配置:
- 检查adapter关联的服务账号是否拥有
monitoring.metricDescriptors.list、monitoring.timeSeries.list等Stackdriver监控数据读取权限 - 验证PubSub的未确认消息指标已成功导出到Stackdriver,且adapter能够正常抓取到该指标数据(可通过
kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1"命令验证指标是否存在)
3. Autopilot的Pod资源约束
Autopilot会自动管理Pod的资源请求与限制,若Pod资源配置不符合Autopilot的默认规则,可能导致扩容被限制:
- 确认HPA关联的Deployment/StatefulSet中,Pod的CPU请求不低于0.25核、内存请求不低于0.5Gi(Autopilot的最小资源要求)
- 检查集群的项目级资源配额(如CPU、内存配额)是否足够支撑Pod扩容,Autopilot自动扩缩容节点仍受项目配额限制
4. HPA指标配置细节问题
Autopilot对HPA的指标配置有更严格的规范要求:
- 确保HPA的
metrics字段中,external类型指标的metricName和selector完全匹配Stackdriver中的指标标识(包括标签过滤规则) - 检查HPA的
behavior扩缩容策略配置,Autopilot可能会覆盖部分自定义扩缩容参数,需确保配置与Autopilot的默认策略兼容
5. 适配器版本兼容性
确认custom-metrics-stackdriver-adapter使用的是适配GKE Autopilot的最新版本,旧版本的适配器可能不支持Autopilot环境中的API接口或环境变量变化,导致指标抓取失败。
内容的提问来源于stack exchange,提问作者Mauro Gentile

