new HPA API version: autoscaling/v2

kubernetes HPA external metrics v2

2 min read | by Jordi Prats

Since Kubernetes v1.23 we can now switch to autoscaling/v2, it provides a nicer way of setting the metrics it's going to use to autoscale replicas: External metrics becomes a first-class citizen

With the previous API version (autoscaling/v1) there wasn't a direct way of configuring external metrics since it's attributes were just intended for the CPU/memory use case:

apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata:  name: demo-targetCPUUtilizationPercentage spec:  maxReplicas: 1  minReplicas: 2  scaleTargetRef:  apiVersion: apps/v1  kind: Deployment  name: demo-autoscale  targetCPUUtilizationPercentage: 50 

With the introduction of autoscaling/v2beta1 we could configure external metrics (Prometheus, Datadog): It was using annotations to be able to keep using the autoscaling/v1 for persistence

With the introduction of autoscaling/v2 we have the spec.metrics attribute that allows us to use metrics from different sources to configure it. We can adapt the previous example (autoscaling/v1) to use the new API version as follows:

apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata:  name: demo-targetCPUUtilizationPercentage spec:  maxReplicas: 1  minReplicas: 2  scaleTargetRef:  apiVersion: apps/v1  kind: Deployment  name: demo-autoscale  metrics:  - resource:  name: cpu  target:  averageUtilization: 80  type: Utilization  type: Resource 

If we need use an external metric, we can set it in a similar way we configure the CPU and memory metrics:

apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata:  name: demo-externalmetrics spec:  minReplicas: 2  maxReplicas: 22  scaleTargetRef:  apiVersion: apps/v1  kind: Deployment  name: demo-autoscale  metrics:  - type: External  external:  metric:  name: kubernetes.kubelet.cpu.usage  selector:  matchLabels:  cluster_name: example  target:  averageValue: "50"  type: AverageValue 

Posted on 22/06/2022

Categories