{"id":49293,"date":"2025-05-05T15:26:56","date_gmt":"2025-05-05T15:26:56","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=49293"},"modified":"2025-07-12T05:54:57","modified_gmt":"2025-07-12T05:54:57","slug":"openshift-admin-how-to-add-node-to-the-cluster-in-openshift-aro","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/openshift-admin-how-to-add-node-to-the-cluster-in-openshift-aro\/","title":{"rendered":"Openshift Admin: How to add node to the cluster in openshift ARO"},"content":{"rendered":"\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h1 class=\"wp-block-heading\">New Method : How to Add Nodes to ARO (Worker Node Scaling)<\/h1>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">If you are using the <strong>latest ARO architecture<\/strong>, which now uses <strong>Azure Machine Pools<\/strong> (based on the OpenShift Cluster API) instead of classic VMSS.<\/h3>\n\n\n\n<p>This newer approach <strong>abstracts away VMSS management from the user<\/strong>, and ARO uses <strong>ARM-managed resources and custom Azure Resource Providers<\/strong> to provision nodes under the hood.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83d\udd0d So, where are your nodes coming from?<\/h2>\n\n\n\n<p>In the latest ARO versions:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Worker nodes are <strong>not shown as standalone VMSS<\/strong> in your Azure subscription.<\/li>\n\n\n\n<li>They are instead part of <strong>ARO-managed infrastructure<\/strong>, controlled by <strong>OpenShift Machine API<\/strong> and <strong>ARO Resource Provider<\/strong>.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\u2705 What You Can Do Instead<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd27 Use OpenShift <code>MachineSet<\/code> to Add\/Scale Nodes<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>List MachineSets<\/strong>: <code>oc get machinesets -n openshift-machine-api<\/code><\/li>\n\n\n\n<li><strong>Check your current node count<\/strong>: <code>oc get nodes<\/code><\/li>\n\n\n\n<li><strong>Scale a MachineSet<\/strong>:<br>Increase replicas of a MachineSet: <code>oc scale machineset &lt;machineset-name> -n openshift-machine-api --replicas=6<\/code><\/li>\n\n\n\n<li><strong>Verify nodes<\/strong>: <code>oc get nodes<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udee0 Example: Scaling Worker Nodes from 3 \u2192 6<\/h3>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># View existing MachineSets<\/span>\noc get machinesets -n openshift-machine-api\n\n<span class=\"hljs-comment\"># Example output:<\/span>\n<span class=\"hljs-comment\"># NAME                     DESIRED  CURRENT  READY<\/span>\n<span class=\"hljs-comment\"># aro-clustername-worker-&lt;zone&gt;   3        3       3<\/span>\n\n<span class=\"hljs-comment\"># Scale it<\/span>\noc scale machineset aro-clustername-worker-&lt;zone&gt; -n openshift-machine-api --replicas=<span class=\"hljs-number\">6<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>The MachineSet controller will provision new worker VMs via ARO\u2019s API integration and automatically register them to the cluster.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udded Where to See the Nodes in Azure?<\/h2>\n\n\n\n<p>Even though no <strong>VMSS is shown<\/strong>, you can:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to <strong>Azure \u2192 Resource Group<\/strong> (e.g., <code>MC_&lt;resource-group>_&lt;cluster-name>_&lt;region><\/code>)<\/li>\n\n\n\n<li>Filter for <strong>Virtual Machines<\/strong> \u2014 you&#8217;ll see VMs named like: <code>aro-&lt;clustername>-worker-&lt;zone>-&lt;random><\/code><\/li>\n<\/ul>\n\n\n\n<p>These are the actual worker VMs, but ARO manages their lifecycle \u2014 so <strong>do not modify them directly<\/strong>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Summary<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Task<\/th><th>Where to Do It<\/th><\/tr><\/thead><tbody><tr><td>Scale nodes<\/td><td><code>oc scale machineset<\/code><\/td><\/tr><tr><td>View nodes<\/td><td><code>oc get nodes<\/code><\/td><\/tr><tr><td>VM visibility<\/td><td>Azure Resource Group \u2192 Virtual Machines<\/td><\/tr><tr><td>Avoid touching<\/td><td>No manual VMSS or VM operations in Azure<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Old Method : How to Add Nodes to ARO (Worker Node Scaling)<\/h1>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udd0d Key Concept: ARO Cluster Node Scaling<\/h3>\n\n\n\n<p>ARO <strong>does not support self-managed scaling of worker nodes via the OpenShift UI or CLI directly<\/strong>. Instead, <strong>you must scale the cluster using Azure-native methods<\/strong>, because Microsoft fully manages the ARO control plane and infrastructure.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<p>ARO worker nodes run as Azure <strong>Virtual Machine Scale Sets (VMSS)<\/strong>. You <strong>scale the cluster by modifying the VMSS instance count<\/strong>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Option 1: Azure Portal (Easiest Way)<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Go to <a href=\"https:\/\/portal.azure.com\/\" target=\"_blank\" rel=\"noopener\">Azure Portal<\/a><\/li>\n\n\n\n<li>Navigate to your <strong>ARO Resource Group<\/strong> (usually named like <code>aro-&lt;clustername><\/code>).<\/li>\n\n\n\n<li>Find the <strong>VM Scale Set<\/strong> named something like <code>aro-&lt;clustername>-worker<\/code> or similar.<\/li>\n\n\n\n<li>Click the <strong>&#8220;Instance count&#8221;<\/strong> setting.<\/li>\n\n\n\n<li>Increase the number of instances (nodes).<\/li>\n\n\n\n<li>Click <strong>&#8220;Save&#8221;<\/strong>.<\/li>\n<\/ol>\n\n\n\n<p>\ud83d\udca1 OpenShift will automatically recognize and schedule pods on the new nodes.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Option 2: Azure CLI<\/h3>\n\n\n\n<p>You can scale using <code>az vmss<\/code> commands:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># Get the VMSS name<\/span>\naz vmss <span class=\"hljs-keyword\">list<\/span> --resource-group aro-&lt;your-rg-name&gt; --query <span class=\"hljs-string\">\"&#91;].name\"<\/span>\n\n<span class=\"hljs-comment\"># Scale to desired count (example: 6 nodes)<\/span>\naz vmss scale \\\n  --resource-group aro-&lt;your-rg-name&gt; \\\n  --name &lt;vmss-name&gt; \\\n  --<span class=\"hljs-keyword\">new<\/span>-capacity <span class=\"hljs-number\">6<\/span>\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\ud83d\udccc Option 3: Terraform (Infrastructure-as-Code)<\/h3>\n\n\n\n<p>If you&#8217;re managing ARO via Terraform, adjust your VMSS configuration:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">resource <span class=\"hljs-string\">\"azurerm_linux_virtual_machine_scale_set\"<\/span> <span class=\"hljs-string\">\"aro_worker\"<\/span> {\n  name                = <span class=\"hljs-string\">\"aro-worker\"<\/span>\n  resource_group_name = azurerm_resource_group.aro.name\n  location            = azurerm_resource_group.aro.location\n\n  <span class=\"hljs-comment\"># Change this to scale<\/span>\n  instances           = <span class=\"hljs-number\">6<\/span>\n  ...\n}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">\u26a0\ufe0f Important Notes<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You <strong>cannot add nodes via OpenShift Web Console or CLI<\/strong> like traditional OpenShift clusters.<\/li>\n\n\n\n<li>ARO does <strong>not allow you to provision control plane (master) nodes or custom node pools<\/strong> \u2014 Microsoft manages them.<\/li>\n\n\n\n<li>If you want different <strong>node types (e.g., GPU, FPGAs, spot VMs)<\/strong>, you must use <strong>MachineSets<\/strong> bound to specific VMSS configurations \u2014 but this is an advanced and Azure-integrated setup.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">\ud83e\udde0 Tips<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For <strong>autoscaling<\/strong>, you can enable <strong>VMSS autoscaling<\/strong> (via Azure Monitor) for dynamic scale-out.<\/li>\n\n\n\n<li>Use <code>oc get nodes<\/code> to verify new nodes are ready and <code>oc adm top nodes<\/code> to monitor resource usage.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>New Method : How to Add Nodes to ARO (Worker Node Scaling) If you are using the latest ARO architecture, which now uses Azure Machine Pools (based on the OpenShift&#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[5153],"tags":[],"class_list":["post-49293","post","type-post","status-publish","format-standard","hentry","category-openshift"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49293","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=49293"}],"version-history":[{"count":5,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49293\/revisions"}],"predecessor-version":[{"id":49391,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/49293\/revisions\/49391"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=49293"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=49293"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=49293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}