如何用Kustomize补丁完成HPA版本升级及Metrics语法适配?
问题分析与解决方案
首先要明确一个关键差异:autoscaling/v1 的 HPA 不支持 metrics 数组结构,也无法配置内存指标,它仅能在 spec 中直接定义 targetCPUUtilizationPercentage 来指定 CPU 利用率阈值。如果需要保留内存指标,你不能使用 autoscaling/v1,应切换到 autoscaling/v2beta1 及以上版本(比如调整原有 v2beta2 的格式)。
下面分两种场景给出可行的 Kustomize 补丁方案:
场景1:切换至 autoscaling/v1(仅保留 CPU 指标)
需要完成三个核心操作:替换 API 版本、删除原 metrics 数组、添加 v1 格式的 CPU 阈值字段。
对应的补丁配置:
patches: - patch: |- - op: replace path: "/apiVersion" value: autoscaling/v1 - op: remove path: "/spec/metrics" - op: add path: "/spec/targetCPUUtilizationPercentage" value: 70 target: group: autoscaling version: v2beta2 kind: HorizontalPodAutoscaler
应用后生成的最终 HPA 配置:
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: labels: environment: production name: piebot namespace: piebot spec: maxReplicas: 3 minReplicas: 1 targetCPUUtilizationPercentage: 70 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: piebot
场景2:调整为 autoscaling/v2beta1 格式(保留 CPU+内存指标)
如果你的真实需求是把嵌套的 target 结构改成扁平化的 targetAverageUtilization(这是 v2beta1 的格式,而非 v1),可以用以下补丁:
patches: - patch: |- - op: replace path: "/apiVersion" value: autoscaling/v2beta1 # 处理CPU指标 - op: remove path: "/spec/metrics/0/resource/target" - op: add path: "/spec/metrics/0/resource/targetAverageUtilization" value: 70 # 处理内存指标 - op: remove path: "/spec/metrics/1/resource/target" - op: add path: "/spec/metrics/1/resource/targetAverageUtilization" value: 70 target: group: autoscaling version: v2beta2 kind: HorizontalPodAutoscaler
应用后生成的 metrics 片段会完全符合你期望的格式:
metrics: - resource: name: cpu targetAverageUtilization: 70 type: Resource - resource: name: memory targetAverageUtilization: 70 type: Resource
你之前的补丁无效的原因
- 错误地将 API 版本改回了 v2beta2,而非目标版本
- 没有删除原有的嵌套
target节点,直接添加新字段会导致结构冲突 - 混淆了 autoscaling/v1 和 v2beta1+ 的结构差异,v1 本身不支持
metrics字段
内容的提问来源于stack exchange,提问作者Vini
相关产品推荐
相关产品推荐

