Skip to content

Updating Worker Node VM Sizes in Azure Red Hat OpenShift (ARO)

This guide explains how to change the VM sizes (SKUs) for worker and infrastructure nodes in an ARO cluster.

WARNING

Master nodes cannot be changed after cluster creation. Only worker nodes and infrastructure nodes can be modified.

Prerequisites

  • Access to the ARO cluster with cluster-admin privileges
  • The oc CLI tool installed and configured
  • Knowledge of the desired target VM SKU size
  • Check the Azure VM SKU support matrix to ensure your target SKU is supported

Update Worker Node VM Size

1. Switch to the machine API namespace

bash
oc project openshift-machine-api

2. List and identify the machineset to modify

View all available machinesets:

bash
oc get machineset

Example output:

NAME                                      DESIRED   CURRENT   READY   AVAILABLE   AGE
aro-cluster-worker-westeurope1            3         3         3       3           30d
aro-cluster-worker-westeurope2            3         3         3       3           30d

3. Edit the machineset configuration

Edit the specific machineset you want to modify:

bash
oc edit machineset <machineset-name>

Locate the vmSize field and change it to your desired SKU. For example:

Before:

yaml
spec:
  template:
    spec:
      providerSpec:
        value:
          vmSize: Standard_D4s_v3

After:

yaml
spec:
  template:
    spec:
      providerSpec:
        value:
          vmSize: Standard_D8s_v5

Save and exit the editor.

4. Update existing nodes (one at a time)

For each node in the machineset, perform the following steps:

4.1 Cordon the node

Prevent new pods from being scheduled on the node:

bash
oc adm cordon <nodename>

4.2 Drain the node

Migrate workloads to other nodes:

bash
oc adm drain <nodename> --delete-emptydir-data --ignore-daemonsets

Note: This command may take several minutes depending on the number of pods running on the node.

4.3 Delete the node

bash
oc delete node <nodename>

4.4 Delete the machine (optional)

The machine will be automatically deleted, but you can manually trigger it:

bash
oc delete machine <machine-name>

Tip: To find the machine name for a specific node:

bash
oc get machines -o wide

5. Verify new node creation

After deleting the old machine, the cluster will automatically detect that the machineset replica count is not met and create a new machine with the updated VM size.

Monitor the machine creation:

bash
oc get machines -w

Verify the new node joins the cluster:

bash
oc get nodes

Check that the new node is ready:

bash
oc get nodes -l node-role.kubernetes.io/worker

6. Repeat for remaining nodes

Repeat steps 4.1 through 5 for each remaining node in the machineset to complete the migration.

Troubleshooting

Check machineset status:

bash
oc get machineset <machineset-name> -o yaml

View machine events:

bash
oc describe machine <machine-name>

Check machine controller logs:

bash
oc logs -n openshift-machine-api deployment/machine-api-controllers -c machine-controller

Documentation

For further details, refer to the official documentation: