K8s HPA (horizontal pod autoscaling)

Hi all,

I am trying to implement HPA in K8s.

I have set hpa with

kubectl autoscale deployment lms --cpu-percent=80 --min=1 --max=10

But it doesn’t work:

% kubectl describe hpa -n capnet-prod
Name:                                                  lms
Namespace:                                             <my namespace>
Labels:                                                <none>
Annotations:                                           <none>
CreationTimestamp:                                     Fri, 08 Jul 2022 05:44:12 -0300
Reference:                                             Deployment/lms
Metrics:                                               ( current / target )
  resource cpu on pods  (as a percentage of request):  <unknown> / 80%
Min replicas:                                          1
Max replicas:                                          10
Deployment pods:                                       1 current / 0 desired
  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: failed to get cpu utilization: missing request for cpu

The reason seems to be that the pod specification does not include a request for cpu.

My questions are:

  • Is it possible to add a cpu request using a plugin? I don’t see a patch there to modify the deployment.
  • Which would be a good request for CPU? 500m sounds good?

If the answer to the first one is no, I would raise a PR with the following change to the lms deployment to something like:

apiVersion: apps/v1
kind: Deployment
  name: lms
    app.kubernetes.io/name: lms
        - name: lms
              memory: 2Gi
{% if LMS_CPU_REQUEST is defined %}
              cpu: {{ LMS_CPU_REQUEST }}
{% endif %}

Similarly it can be repeated for cms and the workers.

What do you think?

A PR that adds the patch k8s-override was merged recently. Now you can leverage the patching functionality of kustomize to modify your deployments.

The folks at OpenCraft are using it to implement HPA.


Thanks @MoisesGonzalezS for your tips!

Based on all this information, I’ve created a simple plugin tutor-contrib-hpa to implement HPA. It’s highly inspired in OpenCraft’s Grove, but limited to only implement HPA.


This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.