How can additional disks be added to AKS nodes via azure template?

12/6/2018

When launching an AKS cluster, my nodes each have a main disk at /dev/sdb and a smaller temporary disk at /dev/sda. How can I attach an additional unformatted disk that will show up as /dev/sdc to each AKS node in my template. My current template is below:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "resourceGroupName": {
      "type": "string",
      "metadata": {
        "description": "The resource group name."
      }
    },
    "subscriptionId": {
      "type": "string",
      "metadata": {
        "description": "The subscription id."
      }
    },
    "region": {
      "type": "string",
      "metadata": {
        "description": "The region of AKS resource."
      }
    },
    "gbPerNode": {
      "type": "int",
      "defaultValue": 20,
      "metadata": {
        "description": "Disk size (in GB) to provision for each of the agent pool nodes. This value ranges from 0 to 1023. Specifying 0 will apply the default disk size for that agentVMSize."
      },
      "minValue": 1,
      "maxValue": 1023
    },
    "numNodes": {
      "type": "int",
      "defaultValue": 3,
      "metadata": {
        "description": "The number of agent nodes for the cluster."
      },
      "minValue": 1,
      "maxValue": 50
    },
    "machineType": {
      "type": "string",
      "defaultValue": "Standard_D2_v2",
      "metadata": {
        "description": "The size of the Virtual Machine."
      }
    },
    "servicePrincipalClientId": {
      "metadata": {
        "description": "Client ID (used by cloudprovider)"
      },
      "type": "securestring"
    },
    "servicePrincipalClientSecret": {
      "metadata": {
        "description": "The Service Principal Client Secret."
      },
      "type": "securestring"
    },
    "osType": {
      "type": "string",
      "defaultValue": "Linux",
      "allowedValues": [
        "Linux"
      ],
      "metadata": {
        "description": "The type of operating system."
      }
    },
    "kubernetesVersion": {
      "type": "string",
      "defaultValue": "1.11.4",
      "metadata": {
        "description": "The version of Kubernetes."
      }
    },
    "maxPods": {
      "type": "int",
      "defaultValue": 30,
      "metadata": {
        "description": "Maximum number of pods that can run on a node."
      }
    }
  },
  "variables": {
    "deploymentEventTopic": "deploymenteventtopic",
    "resourceGroupName": "[parameters('resourceGroupName')]",
    "omswsName": "[concat('omsws-', parameters('resourceGroupName'))]",
    "clustername": "cluster"
  },
  "resources": [
    {
      "apiVersion": "2018-03-31",
      "type": "Microsoft.ContainerService/managedClusters",
      "location": "[parameters('region')]",
      "name": "[variables('clustername')]",
      "properties": {
        "kubernetesVersion": "[parameters('kubernetesVersion')]",
        "enableRBAC": true,
        "dnsPrefix": "clust",
        "addonProfiles": {
          "httpApplicationRouting": {
            "enabled": true
          },
          "omsagent": {
            "enabled": false
          }
        },
        "agentPoolProfiles": [
          {
            "name": "agentpool",
            "osDiskSizeGB": "[parameters('gbPerNode')]",
            "count": "[parameters('numNodes')]",
            "vmSize": "[parameters('machineType')]",
            "osType": "[parameters('osType')]",
            "storageProfile": "ManagedDisks"
          }
        ],
        "servicePrincipalProfile": {
          "ClientId": "[parameters('servicePrincipalClientId')]",
          "Secret": "[parameters('servicePrincipalClientSecret')]"
        },
        "networkProfile": {
          "networkPlugin": "kubenet"
        }
      }
    }
  ]
}
-- ilooner
azure
azure-aks
azure-kubernetes
kubernetes

2 Answers

12/6/2018

Unfortunately, it seems you cannot add disks to AKS nodes in the template. Take a look at all the properties in the template of AKS, there are no properties to do that.

If you really want to add disks to the nodes, maybe you can manually attach the disks to the VM in the AKS cluster. See attach a data disk to a Linux VM. Actually, the nodes in the cluster are the Azure VMs. So you can do things like what you do in the Azure VM.

But in my opinion, it's better to change a bigger size for the nodes when you create the AKS cluster if you want more disk space. See the properties about osDiskSizeGB and vmSize in the template. And you can add persist volumes to the Pod as you want. See Manually create and use a volume with Azure disks in Azure Kubernetes Service (AKS), I think it's more flexible and efficient to use the disk in this way.

-- Charles Xu
Source: StackOverflow

12/6/2018

This is what the template is supposed to look like for nodes with more disks:

{
    "name": "nodepool1",
    "count": 3,
    "vmSize": "Standard_B2ms",
    "osType": "Linux",
    "osDiskSizeGB": 64,
    "diskSizesGB": [
        10,
        10,
        10,
        10
    ]
}

unfortunately, despite this being a valid resource definition for AKS - it doesnt work yet, but at least when it starts to work, you will just use this snippet ;)

-- 4c74356b41
Source: StackOverflow