Chapter 25. Pod Autoscaling | Developer Guide | OpenShift Container Platform | 3.11 (2025)

25.1.Overview

A horizontal pod autoscaler, defined by a HorizontalPodAutoscaler object, specifies how the system should automatically increase or decrease the scale of a replication controller or deployment configuration, based on metrics collected from the pods that belong to that replication controller or deployment configuration.

25.2.Requirements for Using Horizontal Pod Autoscalers

To use horizontal pod autoscalers, you need to install the OpenShift Container Platform metrics server:

Copy to ClipboardToggle word wrap
$ ansible-playbook \/usr/share/ansible/openshift-ansible/playbooks/metrics-server/config.yml \-e openshift_metrics_server_install=true

You can verify that the server was installed correctly by running:

Copy to ClipboardToggle word wrap
$ oc adm top node$ oc adm top pod

For additional information on these commands, see Viewing Nodes and Viewing Pods.

25.3.Supported Metrics

The following metrics are supported by horizontal pod autoscalers:

Table25.1.Metrics
MetricDescriptionAPI version

CPU utilization

Percentage of the requested CPU

autoscaling/v1, autoscaling/v2beta1

Memory utilization

Percentage of the requested memory.

autoscaling/v2beta1

25.4.Autoscaling

You can create a horizontal pod autoscaler to specify the minimum and maximum number of pods you want to run, as well as the CPU utilization or memory utilization your pods should target.

After a horizontal pod autoscaler is created, it begins attempting to query Heapster for metrics on the pods. It may take one to two minutes before Heapster obtains the initial metrics.

After metrics are available in Heapster, the horizontal pod autoscaler computes the ratio of the current metric utilization with the desired metric utilization, and scales up or down accordingly. The scaling occurs at a regular interval, but it might take one to two minutes before metrics make their way into Heapster.

For replication controllers, this scaling corresponds directly to the replicas of the replication controller. For deployment configurations, scaling corresponds directly to the replica count of the deployment configuration. Note that autoscaling applies only to the latest deployment in the Complete phase.

OpenShift Container Platform automatically accounts for resources and prevents unnecessary autoscaling during resource spikes, such as during start up. Pods in the unready state have 0 CPU usage when scaling up and the autoscaler ignores the pods when scaling down. Pods without known metrics have 0% CPU usage when scaling up and 100% CPU when scaling down. This allows for more stability during the HPA decision. To use this feature, you must configure readiness checks to determine if a new pod is ready for use.

25.4.1.Autoscaling for CPU Utilization

When autoscaling for CPU utilization, you can use the oc autoscale command and specify the maximum number of pods you want to run at any given time and the average CPU utilization your pods should target. You can optionally specify the minimum number of pods, otherwise pods are given default values from the OpenShift Container Platform server.

For example:

Copy to ClipboardToggle word wrap
$ oc autoscale dc/frontend --max 10 --cpu-percent=80deploymentconfig "frontend" autoscaled

The example command creates a horizontal pod autoscaler for an existing DeploymentConfig with the following definition:

Horizontal Pod Autoscaler Object Definition

Copy to ClipboardToggle word wrap
apiVersion: autoscaling/v1kind: HorizontalPodAutoscalermetadata: name: frontend 
1
spec: scaleTargetRef: apiVersion: apps.openshift.io/v1 
2
 kind: DeploymentConfig 
3
 name: frontend 
4
 subresource: scale minReplicas: 1 
5
 maxReplicas: 10 
6
 targetCPUUtilizationPercentage: 80 
7
1

The name of this horizontal pod autoscaler object.

2

The API version of the object to scale:

  • For a ReplicationController, use v1,
  • For a DeploymentConfig, use apps.openshift.io/v1.
3

The kind of object to scale, either ReplicationController or DeploymentConfig.

4

The name of an existing object you want to scale.

5

The minimum number of replicas when scaling down. The default is 1.

6

The maximum number of replicas when scaling up.

7

The percentage of the requested CPU that each pod should ideally be using.

Alternatively, the oc autoscale command creates a horizontal pod autoscaler with the following definition when using the v2beta1 version of the horizontal pod autoscaler:

Copy to ClipboardToggle word wrap
apiVersion: autoscaling/v2beta1kind: HorizontalPodAutoscalermetadata: name: hpa-resource-metrics-cpu 
1
spec: scaleTargetRef: apiVersion: v1 
2
 kind: ReplicationController 
3
 name: hello-hpa-cpu 
4
 minReplicas: 1 
5
 maxReplicas: 10 
6
 metrics: - type: Resource resource: name: cpu targetAverageUtilization: 50 
7
1

The name of this horizontal pod autoscaler object.

2

The API version of the object to scale:

  • For a ReplicationController, use v1,
  • For a DeploymentConfig, use apps.openshift.io/v1.
3

The kind of object to scale, either ReplicationController or DeploymentConfig.

4

The name of an existing object you want to scale.

5

The minimum number of replicas when scaling down. The default is 1.

6

The maximum number of replicas when scaling up.

7

The average percentage of the requested CPU that each pod should be using.

25.4.2.Autoscaling for Memory Utilization

Unlike CPU-based autoscaling, memory-based autoscaling requires specifying the autoscaler using YAML instead of using the oc autoscale command. Optionally, you can specify the minimum number of pods and the average memory utilization your pods should target as well, otherwise those are given default values from the OpenShift Container Platform server.

Important

Autoscaling for Memory Utilization is a Technology Preview feature. Technology Preview features are not supported with Red Hat production service level agreements (SLAs), might not be functionally complete, and Red Hat does not recommend to use them for production. These features provide early access to upcoming product features, enabling customers to test functionality and provide feedback during the development process.

For more information on Red Hat Technology Preview features support scope, see https://access.redhat.com/support/offerings/techpreview/.

Note

Memory-based autoscaling is only available with the v2beta1 version of the autoscaling API.

To use memory-based autoscaling:

  1. Enable memory-based autoscaling:

    1. Add the following to your cluster’s master-config.yaml file:

      Copy to ClipboardToggle word wrap
      ...apiServerArguments: runtime-config: - apis/autoscaling/v2beta1=true...
    2. Restart the OpenShift Container Platform services:

      Copy to ClipboardToggle word wrap
      $ master-restart api$ master-restart controllers
  2. If necessary, get the name of the object you want to scale:

    Copy to ClipboardToggle word wrap
    $ oc get dcNAME REVISION DESIRED CURRENT TRIGGERED BYfrontend 1 5 0 config
  3. Place the following in a file, such as hpa.yaml:

    Copy to ClipboardToggle word wrap
    apiVersion: autoscaling/v2beta1kind: HorizontalPodAutoscalermetadata: name: hpa-resource-metrics-memory 
    1
    spec: scaleTargetRef: apiVersion: apps.openshift.io/v1 
    2
     kind: DeploymentConfig 
    3
     name: frontend 
    4
     minReplicas: 2 
    5
     maxReplicas: 10 
    6
     metrics: - type: Resource resource: name: memory targetAverageUtilization: 50 
    7
    1

    The name of this horizontal pod autoscaler object.

    2

    The API version of the object to scale:

    • For a ReplicationController, use v1,
    • For a DeploymentConfig, use apps.openshift.io/v1.
    3

    The kind of object to scale, either ReplicationController or DeploymentConfig.

    4

    The name of an existing object you want to scale.

    5

    The minimum number of replicas when scaling down. The default is 1.

    6

    The maximum number of replicas when scaling up.

    7

    The average percentage of the requested memory that each pod should be using.

  4. Then, create the autoscaler from the above file:

    Copy to ClipboardToggle word wrap
    $ oc create -f hpa.yaml

Important

For memory-based autoscaling to work, memory usage must increase and decrease proportionally to the replica count. On average:

  • An increase in replica count must lead to an overall decrease in memory (working set) usage per-pod.
  • A decrease in replica count must lead to an overall increase in per-pod memory usage.

Use the OpenShift web console to check the memory behavior of your application and ensure that your application meets these requirements before using memory-based autoscaling.

25.5.Viewing a Horizontal Pod Autoscaler

To view the status of a horizontal pod autoscaler:

  • Use the oc get command to view information on the CPU utilization and pod limits:

    Copy to ClipboardToggle word wrap
    $ oc get hpa/hpa-resource-metrics-cpuNAME REFERENCE TARGET CURRENT MINPODS MAXPODS AGEhpa-resource-metrics-cpu DeploymentConfig/default/frontend/scale 80% 79% 1 10 8d

    The output includes the following:

    • Target. The targeted average CPU utilization across all pods controlled by the deployment configuration.
    • Current. The current CPU utilization across all pods controlled by the deployment configuration.
    • Minpods/Maxpods. The minimum and maximum number of replicas that can be set by the autoscaler.
  • Use the oc describe command for detailed information on the horizontal pod autoscaler object.

    Copy to ClipboardToggle word wrap
    $ oc describe hpa/hpa-resource-metrics-cpuName: hpa-resource-metrics-cpuNamespace: defaultLabels: <none>CreationTimestamp: Mon, 26 Oct 2015 21:13:47 -0400Reference: DeploymentConfig/default/frontend/scaleTarget CPU utilization: 80% 
    1
    Current CPU utilization: 79% 
    2
    Min replicas: 1 
    3
    Max replicas: 4 
    4
    ReplicationController pods: 1 current / 1 desiredConditions: 
    5
     Type Status Reason Message ---- ------ ------ ------- AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_requests ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable rangeEvents:
    1

    The average percentage of the requested memory that each pod should be using.

    2

    The current CPU utilization across all pods controlled by the deployment configuration.

    3

    The minimum number of replicas to scale down to.

    4

    The maximum number of replicas to scale up to.

    5

    If the object used the v2alpha1 API, status conditions are displayed.

25.5.1.Viewing Horizontal Pod Autoscaler Status Conditions

You can use the status conditions set to determine whether or not the horizontal pod autoscaler is able to scale and whether or not it is currently restricted in any way.

Note

The horizontal pod autoscaler status conditions are available with the v2beta1 version of the autoscaling API.

The following status conditions are set:

  • AbleToScale indicates whether the horizontal pod autoscaler is able to fetch and update scales, and whether any backoff conditions are preventing scaling.

    • A True condition indicates scaling is allowed.
    • A False condition indicates scaling is not allowed for the reason specified.
  • ScalingActive indicates whether the horizontal pod autoscaler is enabled (the replica count of the target is not zero) and is able to calculate desired scales.

    • A True condition indicates metrics is working properly.
    • A False condition generally indicates a problem with fetching metrics.
  • ScalingLimited indicates that autoscaling is not allowed because a maximum or minimum replica count was reached.

    • A True condition indicates that you need to raise or lower the minimum or maximum replica count in order to scale.
    • A False condition indicates that the requested scaling is allowed.

To see the conditions affecting a horizontal pod autoscaler, use oc describe hpa. Conditions appear in the status.conditions field:

Copy to ClipboardToggle word wrap
$ oc describe hpa cm-testName: cm-testNamespace: promLabels: <none>Annotations: <none>CreationTimestamp: Fri, 16 Jun 2017 18:09:22 +0000Reference: ReplicationController/cm-testMetrics: ( current / target ) "http_requests" on pods: 66m / 500mMin replicas: 1Max replicas: 4ReplicationController pods: 1 current / 1 desiredConditions: 
1
 Type Status Reason Message ---- ------ ------ ------- AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_request ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable rangeEvents:
1

The horizontal pod autoscaler status messages.

  • The AbleToScale condition indicates whether HPA is able to fetch and update scales, as well as whether any backoff-related conditions would prevent scaling.
  • The ScalingActive condition indicates whether the HPA is enabled (for example, the replica count of the target is not zero) and is able to calculate desired scales. A`False` status generally indicates problems with fetching metrics.
  • The ScalingLimited condition indicates that the desired scale was capped by the maximum or minimum of the horizontal pod autoscaler. A True status generally indicates that you might need to raise or lower the minimum or maximum replica count constraints on your horizontal pod autoscaler.

The following is an example of a pod that is unable to scale:

Copy to ClipboardToggle word wrap
Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale False FailedGetScale the HPA controller was unable to get the target's current scale: replicationcontrollers/scale.extensions "hello-hpa-cpu" not found

The following is an example of a pod that could not obtain the needed metrics for scaling:

Copy to ClipboardToggle word wrap
Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale ScalingActive False FailedGetResourceMetric the HPA was unable to compute the replica count: unable to get metrics for resource cpu: no metrics returned from heapster

The following is an example of a pod where the requested autoscaling was less than the required minimums:

Copy to ClipboardToggle word wrap
Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True ReadyForNewScale the last scale time was sufficiently old as to warrant a new scale ScalingActive True ValidMetricFound the HPA was able to successfully calculate a replica count from pods metric http_request ScalingLimited False DesiredWithinRange the desired replica count is within the acceptable rangeEvents:
Chapter 25. Pod Autoscaling | Developer Guide | OpenShift Container Platform | 3.11 (2025)
Top Articles
Latest Posts
Recommended Articles
Article information

Author: Mr. See Jast

Last Updated:

Views: 6268

Rating: 4.4 / 5 (55 voted)

Reviews: 94% of readers found this page helpful

Author information

Name: Mr. See Jast

Birthday: 1999-07-30

Address: 8409 Megan Mountain, New Mathew, MT 44997-8193

Phone: +5023589614038

Job: Chief Executive

Hobby: Leather crafting, Flag Football, Candle making, Flying, Poi, Gunsmithing, Swimming

Introduction: My name is Mr. See Jast, I am a open, jolly, gorgeous, courageous, inexpensive, friendly, homely person who loves writing and wants to share my knowledge and understanding with you.