|
| 1 | +--- |
| 2 | +title: Quickstart - Configure backup for an Azure Kubernetes Service (AKS) cluster using Azure Backup via Azure Resource Manager |
| 3 | +description: Learn how to quickly configure backup for a Kubernetes cluster using Azure Resource Manager. |
| 4 | +ms.service: azure-backup |
| 5 | +ms.topic: quickstart |
| 6 | +ms.date: 05/31/2024 |
| 7 | +ms.custom: devx-track-terraform, devx-track-extended-azdevcli |
| 8 | +ms.reviewer: rajats |
| 9 | +ms.author: v-abhmallick |
| 10 | +author: AbhishekMallick-MS |
| 11 | +--- |
| 12 | + |
| 13 | +# Quickstart: Configure backup for an Azure Kubernetes Service (AKS) cluster using Azure Resource Manager |
| 14 | + |
| 15 | +This quickstart describes how to configure backup for an Azure Kubernetes Service (AKS) cluster using Azure Resource Manager. |
| 16 | + |
| 17 | +Azure Backup for AKS is a cloud-native, enterprise-ready, application-centric backup service that lets you quickly configure backup for AKS clusters.[Azure Backup](backup-azure-mysql-flexible-server-about.md) allows you to back up your AKS clusters using multiple options - such as Azure portal, PowerShell, CLI, Azure Resource Manager, Bicep, and so on. This quickstart describes how to back up an AKS clusters with an Azure Resource Manager template and Azure PowerShell. For more information on developing ARM templates, see the [Azure Resource Manager documentation](../azure-resource-manager/index.yml) |
| 18 | + |
| 19 | +[!INCLUDE [About Azure Resource Manager](~/reusable-content/ce-skilling/azure/includes/resource-manager-quickstart-introduction.md)] |
| 20 | + |
| 21 | +## Prerequisites |
| 22 | + |
| 23 | +To set up your environment for Bicep development, see [Install Bicep tools](../azure-resource-manager/bicep/install.md). |
| 24 | + |
| 25 | +>[!Note] |
| 26 | +>Install the latest [Azure PowerShell module](/powershell/azure/new-azureps-module-az) and the Bicep CLI as detailed in article. |
| 27 | +
|
| 28 | +## Review the template |
| 29 | + |
| 30 | +This template enables you to configure backup for an AKS cluster. In this template, we create a backup vault with a backup policy for the AKS cluster with a *four hourly* schedule and a *seven day* retention duration. |
| 31 | + |
| 32 | +```JSON |
| 33 | +{ |
| 34 | + "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#", |
| 35 | + "contentVersion": "1.0.0.0", |
| 36 | + "parameters": { |
| 37 | + "resourceGroupName": { "type": "string" }, |
| 38 | + "resourceGroupLocation": { "type": "string" }, |
| 39 | + "backupResourceGroupName": { "type": "string" }, |
| 40 | + "backupResourceGroupLocation": { "type": "string" }, |
| 41 | + "aksClusterName": { "type": "string" }, |
| 42 | + "dnsPrefix": { "type": "string" }, |
| 43 | + "nodeCount": { "type": "int" }, |
| 44 | + "backupVaultName": { "type": "string" }, |
| 45 | + "datastoreType": { "type": "string" }, |
| 46 | + "redundancy": { "type": "string" }, |
| 47 | + "backupPolicyName": { "type": "string" }, |
| 48 | + "backupExtensionName": { "type": "string" }, |
| 49 | + "backupExtensionType": { "type": "string" }, |
| 50 | + "storageAccountName": { "type": "string" } |
| 51 | + }, |
| 52 | + "variables": { |
| 53 | + "backupContainerName": "tfbackup" |
| 54 | + }, |
| 55 | + "resources": [ |
| 56 | + { |
| 57 | + "type": "Microsoft.Resources/resourceGroups", |
| 58 | + "apiVersion": "2021-04-01", |
| 59 | + "location": "[parameters('resourceGroupLocation')]", |
| 60 | + "name": "[parameters('resourceGroupName')]" |
| 61 | + }, |
| 62 | + { |
| 63 | + "type": "Microsoft.Resources/resourceGroups", |
| 64 | + "apiVersion": "2021-04-01", |
| 65 | + "location": "[parameters('backupResourceGroupLocation')]", |
| 66 | + "name": "[parameters('backupResourceGroupName')]" |
| 67 | + }, |
| 68 | + { |
| 69 | + "type": "Microsoft.ContainerService/managedClusters", |
| 70 | + "apiVersion": "2023-05-01", |
| 71 | + "location": "[parameters('resourceGroupLocation')]", |
| 72 | + "name": "[parameters('aksClusterName')]", |
| 73 | + "properties": { |
| 74 | + "dnsPrefix": "[parameters('dnsPrefix')]", |
| 75 | + "agentPoolProfiles": [ |
| 76 | + { |
| 77 | + "name": "agentpool", |
| 78 | + "count": "[parameters('nodeCount')]", |
| 79 | + "vmSize": "Standard_D2_v2", |
| 80 | + "type": "VirtualMachineScaleSets", |
| 81 | + "mode": "System" |
| 82 | + } |
| 83 | + ], |
| 84 | + "identity": { |
| 85 | + "type": "SystemAssigned" |
| 86 | + }, |
| 87 | + "networkProfile": { |
| 88 | + "networkPlugin": "kubenet", |
| 89 | + "loadBalancerSku": "standard" |
| 90 | + } |
| 91 | + }, |
| 92 | + "dependsOn": [ |
| 93 | + "[resourceId('Microsoft.Resources/resourceGroups', parameters('resourceGroupName'))]", |
| 94 | + "[resourceId('Microsoft.Resources/resourceGroups', parameters('backupResourceGroupName'))]" |
| 95 | + ] |
| 96 | + }, |
| 97 | + { |
| 98 | + "type": "Microsoft.DataProtection/backupVaults", |
| 99 | + "apiVersion": "2023-01-01", |
| 100 | + "location": "[parameters('resourceGroupLocation')]", |
| 101 | + "name": "[parameters('backupVaultName')]", |
| 102 | + "identity": { |
| 103 | + "type": "SystemAssigned" |
| 104 | + }, |
| 105 | + "properties": { |
| 106 | + "dataStoreType": "[parameters('datastoreType')]", |
| 107 | + "redundancy": "[parameters('redundancy')]" |
| 108 | + }, |
| 109 | + "dependsOn": [ |
| 110 | + "[resourceId('Microsoft.ContainerService/managedClusters', parameters('aksClusterName'))]" |
| 111 | + ] |
| 112 | + }, |
| 113 | + { |
| 114 | + "type": "Microsoft.DataProtection/backupVaults/backupPolicies", |
| 115 | + "apiVersion": "2023-01-01", |
| 116 | + "name": "[concat(parameters('backupVaultName'), '/', parameters('backupPolicyName'))]", |
| 117 | + "properties": { |
| 118 | + "backupRepeatingTimeIntervals": ["R/2024-04-14T06:33:16+00:00/PT4H"], |
| 119 | + "defaultRetentionRule": { |
| 120 | + "lifeCycle": { |
| 121 | + "duration": "P7D", |
| 122 | + "dataStoreType": "OperationalStore" |
| 123 | + } |
| 124 | + } |
| 125 | + }, |
| 126 | + "dependsOn": [ |
| 127 | + "[resourceId('Microsoft.DataProtection/backupVaults', parameters('backupVaultName'))]" |
| 128 | + ] |
| 129 | + }, |
| 130 | + { |
| 131 | + "type": "Microsoft.Storage/storageAccounts", |
| 132 | + "apiVersion": "2022-05-01", |
| 133 | + "location": "[parameters('backupResourceGroupLocation')]", |
| 134 | + "name": "[parameters('storageAccountName')]", |
| 135 | + "sku": { |
| 136 | + "name": "Standard_LRS" |
| 137 | + }, |
| 138 | + "kind": "StorageV2", |
| 139 | + "dependsOn": [ |
| 140 | + "[resourceId('Microsoft.ContainerService/managedClusters', parameters('aksClusterName'))]" |
| 141 | + ] |
| 142 | + }, |
| 143 | + { |
| 144 | + "type": "Microsoft.Storage/storageAccounts/blobServices/containers", |
| 145 | + "apiVersion": "2021-04-01", |
| 146 | + "name": "[concat(parameters('storageAccountName'), '/default/', variables('backupContainerName'))]", |
| 147 | + "properties": { |
| 148 | + "publicAccess": "None" |
| 149 | + }, |
| 150 | + "dependsOn": [ |
| 151 | + "[resourceId('Microsoft.Storage/storageAccounts', parameters('storageAccountName'))]" |
| 152 | + ] |
| 153 | + }, |
| 154 | + { |
| 155 | + "type": "Microsoft.KubernetesConfiguration/extensions", |
| 156 | + "apiVersion": "2023-05-01", |
| 157 | + "name": "[concat(parameters('aksClusterName'), '/', parameters('backupExtensionName'))]", |
| 158 | + "properties": { |
| 159 | + "extensionType": "[parameters('backupExtensionType')]", |
| 160 | + "configurationSettings": { |
| 161 | + "configuration.backupStorageLocation.bucket": "[variables('backupContainerName')]", |
| 162 | + "configuration.backupStorageLocation.config.storageAccount": "[parameters('storageAccountName')]", |
| 163 | + "configuration.backupStorageLocation.config.resourceGroup": "[parameters('backupResourceGroupName')]", |
| 164 | + "configuration.backupStorageLocation.config.subscriptionId": "[subscription().subscriptionId]", |
| 165 | + "credentials.tenantId": "[subscription().tenantId]" |
| 166 | + } |
| 167 | + }, |
| 168 | + "dependsOn": [ |
| 169 | + "[resourceId('Microsoft.Storage/storageAccounts/blobServices/containers', parameters('storageAccountName'), 'default', variables('backupContainerName'))]" |
| 170 | + ] |
| 171 | + } |
| 172 | + ], |
| 173 | + "outputs": { |
| 174 | + "aksClusterId": { |
| 175 | + "type": "string", |
| 176 | + "value": "[resourceId('Microsoft.ContainerService/managedClusters', parameters('aksClusterName'))]" |
| 177 | + }, |
| 178 | + "backupVaultId": { |
| 179 | + "type": "string", |
| 180 | + "value": "[resourceId('Microsoft.DataProtection/backupVaults', parameters('backupVaultName'))]" |
| 181 | + } |
| 182 | + } |
| 183 | +} |
| 184 | +``` |
| 185 | + |
| 186 | +## Deploy the template |
| 187 | + |
| 188 | +To deploy the template, store the template in a GitHub repository and then paste the following PowerShell script into the shell window. |
| 189 | + |
| 190 | +```azurepowershell-interactive |
| 191 | +$projectName = Read-Host -Prompt "Enter a project name (limited to eight characters) that is used to generate Azure resource names" |
| 192 | +$location = Read-Host -Prompt "Enter the location (for example, centralus)" |
| 193 | +
|
| 194 | +$resourceGroupName = "${projectName}rg" |
| 195 | +$templateUri = "https//templateuri" |
| 196 | +
|
| 197 | +New-AzResourceGroup -Name $resourceGroupName -Location $location |
| 198 | +New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -projectName |
| 199 | +``` |
| 200 | + |
| 201 | +## Next steps |
| 202 | + |
| 203 | +- [Restore Azure Kubernetes Service cluster using PowerShell](azure-kubernetes-service-cluster-restore-using-powershell.md) |
| 204 | +- [Manage Azure Kubernetes Service cluster backups](azure-kubernetes-service-cluster-manage-backups.md) |
| 205 | +- [About Azure Kubernetes Service cluster backup](azure-kubernetes-service-cluster-backup-concept.md) |
0 commit comments