Prerequisites
Microsoft Azure Resource Providers
The following Microsoft Azure resource providers are registered.
Microsoft.ContainerServiceMicrosoft.NetworkMicrosoft.ComputeMicrosoft.StorageMicrosoft.KeyVaultMicrosoft.ManagedIdentity
Permissions to deploy AKS
Update the following custom role permissions.
Before you begin
- Identify the resource group where the AKS cluster will be created.
- Ensure that a custom role is already created in the subscription or resource group.
- Complete this configuration before starting the AKS installation process.
To update the permission for the custom role, perform the following steps:
Navigate to the required resource group in the Azure portal.
Open Access control (IAM) for the selected resource group.
Locate the existing custom role.
Select the custom role and click Edit.
Select JSON and click Edit.
Update the role by adding the following permissions:
{
"id": "/subscriptions/<SUBSCRIPTION-ID>/providers/Microsoft.Authorization/roleDefinitions/<ROLE-DEFINITION-ID>",
"properties": {
"roleName": "<ROLE-NAME>",
"description": "",
"assignableScopes": [
"/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RG-Name>"
],
"permissions": [
{
"Actions": [
"Microsoft.Authorization/roleAssignments/read",
"Microsoft.Authorization/roleAssignments/write",
"Microsoft.Authorization/roleDefinitions/read",
"Microsoft.Authorization/roleDefinitions/write",
"Microsoft.ContainerService/managedClusters/read",
"Microsoft.ContainerService/managedClusters/write",
"Microsoft.KeyVault/vaults/read",
"Microsoft.KeyVault/vaults/write",
"Microsoft.ManagedIdentity/userAssignedIdentities/assign/action",
"Microsoft.ManagedIdentity/userAssignedIdentities/read",
"Microsoft.Network/virtualNetworks/read",
"Microsoft.Network/virtualNetworks/subnets/join/action",
"Microsoft.Network/virtualNetworks/subnets/read",
"Microsoft.Resources/subscriptions/resourceGroups/read",
"Microsoft.Storage/locations/checknameavailability/read",
"Microsoft.Storage/storageAccounts/blobServices/containers/read",
"Microsoft.Storage/storageAccounts/blobServices/containers/write",
"Microsoft.Storage/storageAccounts/blobServices/read",
"Microsoft.Storage/storageAccounts/blobServices/write",
"Microsoft.Storage/storageAccounts/fileServices/read",
"Microsoft.Storage/storageAccounts/fileServices/write",
"Microsoft.Storage/storageAccounts/listKeys/action",
"Microsoft.Storage/storageAccounts/read",
"Microsoft.Storage/storageAccounts/write",
"Microsoft.Network/privateDnsZones/read",
"Microsoft.Network/privateDnsZones/A/read",
"Microsoft.Network/privateDnsZones/A/write",
"Microsoft.Network/privateDnsZones/write",
"Microsoft.Network/privateDnsZones/join/action",
"Microsoft.Network/privateDnsZones/virtualNetworkLinks/read",
"Microsoft.Network/privateDnsZones/virtualNetworkLinks/write",
"Microsoft.ContainerService/managedClusters/listClusterUserCredential/action",
"Microsoft.ContainerService/managedClusters/agentPools/read",
"Microsoft.ContainerService/managedClusters/agentPools/write",
"Microsoft.ManagedIdentity/userAssignedIdentities/federatedIdentityCredentials/write",
"Microsoft.KeyVault/vaults/read"
],
"notActions": [],
"dataActions": [],
"notDataActions": []
}
]
}
}
- Click Save after updating the permissions.
- Click Review + update to finalise the changes.
Jump Box or Local Machine
A jump box serves as a secure, controlled access point for executing installation commands and managing cluster resources. It ensures that all operations originate from a trusted environment with direct network access to the PPC cluster, avoiding connectivity issues that may arise from local machines with restricted network paths or inconsistent tooling.
Use a dedicated Debian or Red Hat jump box created in Microsoft Azure. Do not use a jump box hosted on any other cloud.
The jump box must be provisioned in the same Azure region where the PPC cluster will be deployed to ensure proper connectivity and access to regional resources.
For example, if the PPC cluster is deployed in
eastus, the jump box must also be created ineastus. Placing the jump box in a different region, such aswesteurope, may result in network access failures or latency issues when connecting to cluster endpoints.
Microsoft Azure Region
For automated installation
Identify the Azure region where the cluster is to be deployed.
The deployment region is automatically detected from the resource group’s location during the bootstrap process. Ensure that the resource group is created in the intended deployment region before running the installer.
All resources must be in the same region.For more information about Microsoft Azure resources, refer to Microsoft Azure Resource IDs from Infrastructure Team.
For component-based installation
Identify the Azure region where the cluster is to be deployed.
Region must be specified as azure_location in the terraform.tfvars file during the 00_backup_storage and 02_aks_cluster stages.
All resources must be in the same region.For more information about Microsoft Azure resources, refer to Microsoft Azure Resource IDs from Infrastructure Team.
Microsoft Azure Resource IDs from Infrastructure Team
Deployment Resource Group
Before proceeding with the installation, identify the Azure Resource Group where the cluster is to be deployed.
- For automated deployment, the value of this resource group name must be specified during the input prompt while running the
./bootstrap.shscript. - For component-based deployment, the value of this resource group name must be specified in the
resource_group_namefield in theterraform.tfvarsfiles, wherever required.
The following resources are provisioned within the resource group specified during deployment.
| Stage | Resources Created |
|---|---|
| 00_Backup Storage | Storage Account, Key Vault, Key Vault Key, Blob Container |
| 01_Identity | RBAC Role Assignments (references existing UAMIs; no new resources created) |
| 02_AKS Cluster | AKS Cluster, Federated Credentials |
| 03_Node Pool | AKS User Node Pool |
| 04_AKS Addons | Storage Classes, Cluster Add-ons |
| 05_Helm Releases | Kubernetes Namespaces, Secrets, Helm Charts |
Pre-existing Resources
The following resources must be provisioned by the IT team before installation.
They can reside in any resource group in the same region. The installer references each resource by its entire Azure resource ID.
Ensure the deploying identity, such as, service principal or managed identity, has the appropriate permissions on these resources.
| Resource | Description | Variable in terraform.tfvars | Example Resource ID |
|---|---|---|---|
| AKS User-Assigned Managed Identity | Identity used by the AKS cluster to interact with Azure resources such as Private DNS Zones and Virtual Networks. | uami_id | /subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/id-aks-applianceframeworkMust have Private DNS Zone and VNet custom role permissions. For more information, refer to AKS User-Assigned Managed Identity Permissions. |
| Velero User-Assigned Managed Identity | Identity used by Velero to access Azure Blob Storage for cluster backup and restore operations. | velero_uami_id | /subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/id-aks-velero |
| OpenSearch User-Assigned Managed Identity | Identity used by OpenSearch to access required Azure resources for log storage and indexing. | opensearch_uami_id | /subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/id-aks-opensearch |
| Virtual Network / Subnet | The subnet within an existing Virtual Network where all AKS cluster nodes are placed. | subnet_id | /subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Network/virtualNetworks/<vnet>/subnets/<subnet> |
| Private DNS Zone | The pre-existing private DNS zone used for resolving internal AKS API server endpoints within the Virtual Network. | private_dns_zone_id | /subscriptions/<sub>/resourceGroups/<rg>/providers/Microsoft.Network/privateDnsZones/privatelink.eastus.azmk8s.io |
AKS User-Assigned Managed Identity Permissions
The AKS User-Assigned Managed Identity (id-aks-applianceframework) must be granted a custom role with the following permissions on the resource group containing the Private DNS Zone and Virtual Network. These permissions enable AKS to manage private DNS records and join virtual networks during cluster operations.
To configure User-Assigned Managed Identity with a custom Azure role containing the permissions required for AKS deployment and management operations within the specified resource group, perform the following steps:
1. Creating a Custom Role
- In the Azure portal, navigate to Resource Groups.
- Select the resource group that contains the AKS resources.
- Open Access Control (IAM).
- Select Add > Add custom role.
- Provide a name and description for the custom role.
- Select JSON and add the following permissions.
{
"Name": "<ROLE-NAME>",
"Description": "",
"AssignableScopes": [
"/subscriptions/<SUBSCRIPTION-ID>/resourceGroups/<RESOURCE-GROUP>"
],
"Actions": [
"Microsoft.Network/privateDnsZones/read",
"Microsoft.Network/privateDnsZones/A/read",
"Microsoft.Network/privateDnsZones/A/write",
"Microsoft.Network/privateDnsZones/A/delete",
"Microsoft.Network/privateDnsZones/virtualNetworkLinks/read",
"Microsoft.Network/privateDnsZones/virtualNetworkLinks/write",
"Microsoft.Network/privateDnsZones/virtualNetworkLinks/delete",
"Microsoft.Network/virtualNetworks/subnets/read",
"Microsoft.Network/virtualNetworks/subnets/join/action",
"Microsoft.Network/privateDnsZones/write",
"Microsoft.Network/virtualNetworks/join/action"
],
"NotActions": [],
"DataActions": [],
"NotDataActions": []
}
- Review the permissions and create the custom role.
Note: These permissions are required when using a private AKS cluster with a pre-existing Private DNS Zone (private_dns_zone_id). Without them, cluster provisioning and DNS resolution will fail.
2. Assigning the custom role to the Managed Identity
On the Azure portal, navigate to Managed Identities.
Select Create.
Specify the following:
- Subscription
- Resource group
- Managed identity name
- Region
Select Review + Create and then Create.
Wait for the User-Assigned Managed Identity (UAMI) to be provisioned.
Open the newly created User-Assigned Managed Identity.
Select Azure role assignments.
Select Add role assignment.
Set the scope to the target resource group.
Select the custom role created in the previous section.
Assign the role to the User-Assigned Managed Identity.
Verify that the role assignment appears under the managed identity’s role assignments.
Zone Requirements
The cluster requires a minimum of two availability zones for high availability. Three-zone cluster deployments are supported and recommended for production.
| No. of Zones | Supported | Notes |
|---|---|---|
| 1 | No | Installation fails. |
| 2 | Yes | Minimum requirement for High Availability. |
| 3 | Yes | Recommended for production environments. |
Ensure the following requirements are met before deploying:
| Requirement | Detail |
|---|---|
| Region support | The target Azure region must support availability zones. |
| VM SKU availability | The chosen VM size must be available in all the specified zones. |
Modules: 02_aks_cluster, 03_node_pool
Note: The bootstrap script does not prompt for zone selection, it uses the default three zone configuration.
The default zone configuration is ["1", "2", "3"]. Not all Azure regions support three availability zones, and not all VM SKUs are available in every zone. Using a zone that does not support your VM SKU causes cluster creation to fail.
Important:
system_node_pool_zones(module02) andnode_pool_zones(module03) must use the same set of zones. If the zones differ, disks provisioned in one zone cannot be attached to nodes rescheduled into another zone.
Before deploying, verify zone and VM SKU availability:
# List availability zones for your region
az account list-locations \
--query "[?name=='<region>'].{Region:name, Zones:availabilityZoneMappings}" \
-o table
# Check which zones support your VM SKU
az vm list-skus \
--location <region> \
--size Standard_D4ds_v4 \
--query "[].{Name:name, Zones:locationInfo[0].zones}" \
-o table
Replace <region> with your Azure region, for example eastus.
If zone adjustment is required, navigate to iac/azure/cluster/modules and set matching values in both terraform.tfvars files:
# 02_aks_cluster/terraform.tfvars
system_node_pool_zones = ["1", "2"] # adjust to the zones your region supports
# 03_node_pool/terraform.tfvars
node_pool_zones = ["1", "2"] # must match system_node_pool_zones exactly
For more information on editing the 02_aks_cluster, and 03_node_pool modules, refer to Manual component-based installation.
System node pool sizing
The step [1b] Select Node Architecture in the bootstrap script prompts to select the node architecture interactively during deployment.
The default system node pool VM size (Standard_D2ds_v4, 2 vCPU / 8 GiB RAM) can become resource-constrained under production load when Karpenter, CoreDNS, and CSI drivers run concurrently on the same node. Use the following or larger for production system node pools.
amd64 (x86-64)
| Node Pool | VM Size | vCPUs | Memory |
|---|---|---|---|
| System | Standard_D2as_v5 | 2 | 8 GB |
| User | Standard_D8as_v5 | 8 | 32 GB |
arm64
| Node Pool | VM Size | vCPUs | Memory |
|---|---|---|---|
| System | Standard_D2ps_v5 | 2 | 8 GB |
| User | Standard_D8ps_v5 | 8 | 32 GB |
In 02_aks_cluster/terraform.tfvars, edit the following value:
system_node_pool_vm_size = "Standard_D4ds_v5" # or Standard_D8ds_v4 for heavier loads
For more information on editing the 02_aks_cluster module, refer to Manual component-based installation.
AKS cluster tier
The sku_tier setting controls the AKS API server uptime SLA, available node capacity, and supported features.
| Tier | Uptime SLA | Notes |
|---|---|---|
Free | No SLA | Suitable for development and testing only |
Standard | 99.9% (99.95% with Availability Zones) | Recommended for production |
Premium | 99.9% (99.95% with Availability Zones) + LTS | Required if long-term support is needed |
Set sku_tier = "Standard" for all production deployments. Use "Premium" if your organization requires long-term support (LTS) guarantees.
In 02_aks_cluster/terraform.tfvars, edit the following value:
sku_tier = "Standard"
For more information on editing the 02_aks_cluster module, refer to Manual component-based installation.
Feedback
Was this page helpful?