Production configuration
The default terraform.tfvars values are optimized for development and staging environments. Before deploying to production, override the settings below to ensure high availability, data safety, and security compliance.
Applying the changes
Script-based installation: After the bootstrap script generates the
terraform.tfvarsfiles, edit them before the script runstofu apply, or modify and re-apply individually using OpenTofu after installation.Component-based installation: Edit the relevant
terraform.tfvarsfor each module before runningtofu apply.
Storage redundancy
Modules: 00_backup_storage, 04_aks_addons
By default, the backup storage account uses Locally Redundant Storage (LRS), which stores data only within a single datacenter. When AKS nodes span multiple availability zones, an LRS-backed disk cannot be reattached to a node in a different zone during failover, causing pod scheduling to fail.
Recommendations:
- Use
ZRS(Zone-Redundant Storage) when nodes are spread across availability zones in the same region. - Use
GRS(Geo-Redundant Storage) if cross-region disaster recovery is required. - Use
Premium_ZRSas the storage class for Kubernetes persistent volumes.
In 00_backup_storage/terraform.tfvars:
storage_account_replication_type = "ZRS" # use "GRS" for cross-region redundancy
System node pool sizing
Module: 02_aks_cluster
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.
Recommendation: Use Standard_D4ds_v4 (4 vCPU / 16 GiB) or larger for production system node pools.
In 02_aks_cluster/terraform.tfvars, edit the following value:
system_node_pool_vm_size = "Standard_D4ds_v4" # or Standard_D8ds_v4 for heavier loads
Key Vault SKU
Module: 00_backup_storage
The default Key Vault SKU is standard, which uses software-protected keys. For organizations with compliance requirements (such as FIPS 140-2 Level 2 or Level 3), the premium SKU provides HSM-backed encryption keys.
Recommendation: Use premium when your security or compliance policy requires HSM-backed key protection.
In 00_backup_storage/terraform.tfvars:
key_vault_sku = "premium"
Note: Confirm with your compliance team whether HSM-backed keys are required before changing this setting. The
premiumSKU incurs additional Azure costs.
Availability zones
Modules: 02_aks_cluster, 03_node_pool
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 (module 02) and node_pool_zones (module 03) 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.
In both 02_aks_cluster/terraform.tfvars and 03_node_pool/terraform.tfvars, set matching values:
# 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
AKS cluster tier (sku_tier)
Module: 02_aks_cluster
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 |
Recommendation: 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:
sku_tier = "Standard"
Note:
StandardandPremiumtiers incur an additional hourly cost per cluster. See the AKS pricing page for current rates.
Storage account network access
Module: 00_backup_storage
The backup storage account is created with public network access enabled by default. In production, restrict access using your organization’s existing network controls.
Azure provides three options:
| Method | Isolation level | Typical use |
|---|---|---|
| Private Endpoints | Assigns the storage account a private IP inside your VNet. Removes it from public internet. | Recommended for most enterprise deployments. |
| VNet service endpoints | Routes traffic through the VNet without a private IP. | Lower cost alternative to Private Endpoints. |
| Azure Firewall / NSG | Network-layer traffic filtering. | Supplement to either option above. |
Apply the appropriate controls after deployment. The example below uses the service endpoint approach:
# Allow access from a specific VNet subnet
az storage account network-rule add \
--account-name <storage-account-name> \
--resource-group <resource-group> \
--vnet-name <vnet-name> \
--subnet <subnet-name>
# Deny all other public access
az storage account update \
--name <storage-account-name> \
--resource-group <resource-group> \
--default-action Deny
Note: Consult your organization’s security team to select the appropriate access control method before deploying to production.
| Setting | Default | Production recommendation | Module |
|---|---|---|---|
storage_account_replication_type | LRS | ZRS or GRS | 00_backup_storage |
system_node_pool_vm_size | Standard_D2ds_v4 | Standard_D4ds_v4 or larger | 02_aks_cluster |
key_vault_sku | standard | premium (if HSM required) | 00_backup_storage |
system_node_pool_zones | ["1","2","3"] | Verify per region/SKU; match node_pool_zones | 02_aks_cluster |
node_pool_zones | ["1","2","3"] | Must match system_node_pool_zones | 03_node_pool |
sku_tier | Free | Standard or Premium | 02_aks_cluster |
| Storage account network access | Public (default) | Private Endpoints, VNet service endpoints, or Firewall | Post-deploy |
Feedback
Was this page helpful?