Skip to content

Cluster autoscaling

Documentation: Applying autoscaling to an OpenShift Container Platform cluster

MachineAutoscaler resource definition

oc apply -f - <<EOF
apiVersion: "autoscaling.openshift.io/v1beta1"
kind: "MachineAutoscaler"
metadata:
  name: "vmw-mbqt7-worker"
  namespace: "openshift-machine-api"
spec:
  minReplicas: 3
  maxReplicas: 6
  scaleTargetRef:
    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    name: vmw-mbqt7-worker
EOF

ClusterAutoscaler resource definition

oc apply -f - <<EOF
apiVersion: "autoscaling.openshift.io/v1"
kind: "ClusterAutoscaler"
metadata:
  name: "default"
spec:
  podPriorityThreshold: -10
  resourceLimits:
    maxNodesTotal: 10
    cores:
      min: 8
      max: 128
    memory:
      min: 4
      max: 256
  scaleDown:
    enabled: true
    delayAfterAdd: 10m
    delayAfterDelete: 5m
    delayAfterFailure: 30s
    unneededTime: 60s
EOF

Start resources

oc new-project nginx
oc new-app nginx-example -p NGINX_VERSION=1.20-ubi8

$ oc get deploymentconfig
NAME            REVISION   DESIRED   CURRENT   TRIGGERED BY
nginx-example   0          1         0         config,image(nginx-example:latest)


$ oc patch dc/nginx-example \
    --type='json' \
    --patch='[
        {"op": "replace", "path": "/spec/template/spec/containers/0/resources", "value": {"limits":{"memory":"1Gi","cpu": 1},"requests":{"memory":"1Gi","cpu": 1}}}
    ]'

$ oc get nodes
NAME                     STATUS   ROLES    AGE   VERSION
vmw-mbqt7-master-0       Ready    master   25d   v1.19.0+9f84db3
vmw-mbqt7-master-1       Ready    master   25d   v1.19.0+9f84db3
vmw-mbqt7-master-2       Ready    master   25d   v1.19.0+9f84db3
vmw-mbqt7-worker-dsstf   Ready    worker   25d   v1.19.0+9f84db3
vmw-mbqt7-worker-plvzh   Ready    worker   25d   v1.19.0+9f84db3
vmw-mbqt7-worker-s8p6t   Ready    worker   25d   v1.19.0+9f84db3
$ oc get machines -n openshift-machine-api
NAME                     PHASE     TYPE   REGION   ZONE   AGE
vmw-mbqt7-master-0       Running                          25d
vmw-mbqt7-master-1       Running                          25d
vmw-mbqt7-master-2       Running                          25d
vmw-mbqt7-worker-dsstf   Running                          25d
vmw-mbqt7-worker-plvzh   Running                          25d
vmw-mbqt7-worker-s8p6t   Running                          25d

$ oc scale dc/nginx-example --replicas=100
deploymentconfig.apps.openshift.io/nginx-example scaled

# After a while:

$ oc get nodes
NAME                     STATUS   ROLES    AGE   VERSION
vmw-mbqt7-master-0       Ready    master   25d   v1.19.0+9f84db3
vmw-mbqt7-master-1       Ready    master   25d   v1.19.0+9f84db3
vmw-mbqt7-master-2       Ready    master   25d   v1.19.0+9f84db3
vmw-mbqt7-worker-dsstf   Ready    worker   25d   v1.19.0+9f84db3
vmw-mbqt7-worker-plvzh   Ready    worker   25d   v1.19.0+9f84db3
vmw-mbqt7-worker-s8p6t   Ready    worker   25d   v1.19.0+9f84db3
$ oc get machines
NAME                     PHASE          TYPE   REGION   ZONE   AGE
vmw-mbqt7-master-0       Running                               25d
vmw-mbqt7-master-1       Running                               25d
vmw-mbqt7-master-2       Running                               25d
vmw-mbqt7-worker-2sgmh   Provisioning                          21s
vmw-mbqt7-worker-dsstf   Running                               25d
vmw-mbqt7-worker-plvzh   Running                               25d
vmw-mbqt7-worker-s6cr2   Provisioning                          21s
vmw-mbqt7-worker-s8p6t   Running                               25d
vmw-mbqt7-worker-tmx82   Provisioning                          21s
$ oc get pods -n nginx | wc -l
     104


# Some coffees later:

$ oc get machines,nodes,machineset
NAME                                                  PHASE     TYPE   REGION   ZONE   AGE
machine.machine.openshift.io/vmw-mbqt7-master-0       Running                          25d
machine.machine.openshift.io/vmw-mbqt7-master-1       Running                          25d
machine.machine.openshift.io/vmw-mbqt7-master-2       Running                          25d
machine.machine.openshift.io/vmw-mbqt7-worker-dsstf   Running                          25d
machine.machine.openshift.io/vmw-mbqt7-worker-plvzh   Running                          25d
machine.machine.openshift.io/vmw-mbqt7-worker-s8p6t   Running                          25d
machine.machine.openshift.io/vmw-mbqt7-worker-sxr6m   Running                          8m42s
machine.machine.openshift.io/vmw-mbqt7-worker-t7tk8   Running                          8m43s
machine.machine.openshift.io/vmw-mbqt7-worker-xj65l   Running                          8m50s

NAME                          STATUS   ROLES    AGE    VERSION
node/vmw-mbqt7-master-0       Ready    master   25d    v1.19.0+9f84db3
node/vmw-mbqt7-master-1       Ready    master   25d    v1.19.0+9f84db3
node/vmw-mbqt7-master-2       Ready    master   25d    v1.19.0+9f84db3
node/vmw-mbqt7-worker-dsstf   Ready    worker   25d    v1.19.0+9f84db3
node/vmw-mbqt7-worker-plvzh   Ready    worker   25d    v1.19.0+9f84db3
node/vmw-mbqt7-worker-s8p6t   Ready    worker   25d    v1.19.0+9f84db3
node/vmw-mbqt7-worker-sxr6m   Ready    worker   102s   v1.19.0+9f84db3
node/vmw-mbqt7-worker-t7tk8   Ready    worker   94s    v1.19.0+9f84db3
node/vmw-mbqt7-worker-xj65l   Ready    worker   85s    v1.19.0+9f84db3

NAME                                               DESIRED   CURRENT   READY   AVAILABLE   AGE
machineset.machine.openshift.io/vmw-mbqt7-worker   6         6         6       6           25d

2022-06-14 2020-12-08 Contributors: Robert Bohne