Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I update a Kubernetes autoscaler?

I have created a Kubernetes autoscaler, but I need to change its parameters. How do I update it?

I've tried the following, but it fails:

✗ kubectl autoscale -f docker/production/web-controller.yaml --min=2 --max=6
Error from server: horizontalpodautoscalers.extensions "web" already exists
like image 281
aknuds1 Avatar asked Sep 04 '25 16:09

aknuds1


2 Answers

You can always interactively edit the resources in your cluster. For your autoscale controller called web, you can edit it via:

kubectl edit hpa web

If you're looking for a more programmatic way to update your horizontal pod autoscaler, you would have better luck describing your autoscaler entity in a yaml file, as well. For example, here's a simple Replication Controller, paired with a Horizontal Pod Autoscale entity:

 apiVersion: v1
 kind: ReplicationController
 metadata:
   name: nginx
 spec:
   replicas: 2
   template:
     metadata:
       labels:
         run: nginx
     spec:
       containers:
       - name: nginx
         image: nginx
         ports:
         - containerPort: 80
 ---
 apiVersion: autoscaling/v1
 kind: HorizontalPodAutoscaler
 metadata:
   name: nginx
   namespace: default
 spec:
   maxReplicas: 3
   minReplicas: 2
   scaleTargetRef:
     apiVersion: v1
     kind: ReplicationController
     name: nginx

With those contents in a file called nginx.yaml, updating the autoscaler could be done via kubectl apply -f nginx.yaml.

like image 156
amcelwee Avatar answered Sep 07 '25 17:09

amcelwee


You can use the kubectl patch command as well, to see its current status

kubectl get hpa <autoscaler-name-here> -o json

An example output:

{
"apiVersion": "autoscaling/v1",
"kind": "HorizontalPodAutoscaler",
"metadata": {
    ...
    "name": "your-auto-scaler",
    "namespace": "your-namespace",
    ...
},
"spec": {
    "maxReplicas": 50,
    "minReplicas": 2,
    "scaleTargetRef": {
        "apiVersion": "extensions/v1beta1",
        "kind": "Deployment",
        "name": "your-deployment"
    },
    "targetCPUUtilizationPercentage": 40
},
"status": {
    "currentReplicas": 1,
    "desiredReplicas": 2,
    "lastScaleTime": "2017-12-13T16:23:41Z"
}
}

If you want to update the minimum number of replicas:

kubectl -n your-namespace patch hpa your-auto-scaler --patch '{"spec":{"minReplicas":1}}'

The same logic applies to other parameters found in the autoscaler configuration, change minReplicas to maxReplicas if you want to update the maximum number of allowed replicas.

like image 23
Andre Hahn Avatar answered Sep 07 '25 17:09

Andre Hahn