Sdílet prostřednictvím


Rychlý start: Konfigurace trezorového zálohování pro cluster Azure Kubernetes Service (AKS) pomocí Azure Bicep

Tento rychlý start popisuje, jak nakonfigurovat trezorované zálohování pro cluster Azure Kubernetes Service (AKS) pomocí Azure Bicep.

Azure Backup pro AKS je cloudová služba zálohování zaměřená na podnikovou aplikaci, která umožňuje rychle nakonfigurovat zálohování pro clustery AKS.Azure Backup umožňuje zálohovat clustery AKS pomocí několika možností, jako je Azure Portal, PowerShell, CLI, Azure Resource Manager, Bicep atd. Tento rychlý start popisuje, jak zálohovat clustery AKS pomocí souboru Bicep a Azure PowerShellu. Další informace o vývoji souborů Bicep najdete v dokumentaci k Bicep.

Bicep je jazyk pro deklarativní nasazování prostředků Azure. K vývoji šablon Azure Resource Manageru (šablon ARM) můžete použít Bicep místo JSON. Syntaxe Bicep snižuje složitost a zlepšuje vývojové prostředí. Bicep je transparentní abstrakce oproti formátu JSON šablony ARM, která poskytuje všechny možnosti šablony JSON. Během nasazování převede nástroj příkazového řádku Bicep soubor Bicep na JSON šablony ARM. Soubor Bicep uvádí prostředky a vlastnosti prostředků Azure bez zápisu posloupnosti programovacích příkazů pro vytváření prostředků.

Typy prostředků, verze rozhraní API a vlastnosti platné v šabloně ARM jsou také platné v souboru Bicep.

Požadavky

Pokud chcete nastavit prostředí pro vývoj Bicep, podívejte se na Instalace nástrojů Bicep.

Poznámka:

Nainstalujte nejnovější modul Azure PowerShellu a rozhraní příkazového řádku Bicep, jak je podrobně popsáno v článku.

Kontrola šablony

Tato šablona umožňuje nakonfigurovat zálohování clusteru AKS. V této šabloně vytvoříme trezor záloh se zásadami zálohování pro cluster AKS se čtyřmi hodinovými plány a sedmidenní dobou uchovávání.

@description('Location for the resource group')
param resourceGroupLocation string
@description('Name of the resource group for AKS and Backup Vault')
param resourceGroupName string
@description('Name of the resource group for storage account and snapshots')
param backupResourceGroupName string
@description('Location for the backup resource group')
param backupResourceGroupLocation string
@description('AKS Cluster name')
param aksClusterName string
@description('DNS prefix for AKS')
param dnsPrefix string
@description('Node count for the AKS Cluster')
param nodeCount int
@description('Name of the Backup Vault')
param backupVaultName string
@description('Datastore type for the Backup Vault')
param datastoreType string
@description('Redundancy type for the Backup Vault')
param redundancy string
@description('Backup policy name')
param backupPolicyName string
@description('Name of the Backup Extension')
param backupExtensionName string
@description('Type of Backup Extension')
param backupExtensionType string
@description('Name of the Storage Account')
param storageAccountName string

var backupContainerName = 'tfbackup'

resource rg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
  location: resourceGroupLocation
  name: resourceGroupName
}

resource backupRg 'Microsoft.Resources/resourceGroups@2021-04-01' = {
  location: backupResourceGroupLocation
  name: backupResourceGroupName
}

resource aksCluster 'Microsoft.ContainerService/managedClusters@2023-05-01' = {
  location: resourceGroupLocation
  name: aksClusterName
  properties: {
    dnsPrefix: dnsPrefix
    agentPoolProfiles: [
      {
        name: 'agentpool'
        count: nodeCount
        vmSize: 'Standard_D2_v2'
        type: 'VirtualMachineScaleSets'
        mode: 'System'
      }
    ]
    identity: {
      type: 'SystemAssigned'
    }
    networkProfile: {
      networkPlugin: 'kubenet'
      loadBalancerSku: 'standard'
    }
  }
  dependsOn: [
    rg
    backupRg
  ]
}

resource backupVault 'Microsoft.DataProtection/backupVaults@2023-01-01' = {
  location: resourceGroupLocation
  name: backupVaultName
  identity: {
    type: 'SystemAssigned'
  }
  properties: {
    dataStoreType: datastoreType
    redundancy: redundancy
  }
  dependsOn: [
    aksCluster
  ]
}

resource backupPolicy 'Microsoft.DataProtection/backupVaults/backupPolicies@2023-01-01' = {
  name: '${backupVaultName}/${backupPolicyName}'
  properties: {
    backupRepeatingTimeIntervals: ['R/2024-04-14T06:33:16+00:00/PT4H']
    defaultRetentionRule: {
      lifeCycle: {
        duration: 'P7D'
        dataStoreType: 'OperationalStore'
      }
    }
  }
  dependsOn: [
    backupVault
  ]
}

resource storageAccount 'Microsoft.Storage/storageAccounts@2022-05-01' = {
  location: backupResourceGroupLocation
  name: storageAccountName
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  dependsOn: [
    aksCluster
  ]
}

resource backupContainer 'Microsoft.Storage/storageAccounts/blobServices/containers@2021-04-01' = {
  name: '${storageAccount.name}/default/${backupContainerName}'
  properties: {
    publicAccess: 'None'
  }
  dependsOn: [
    storageAccount
  ]
}

resource backupExtension 'Microsoft.KubernetesConfiguration/extensions@2023-05-01' = {
  name: '${aksClusterName}/${backupExtensionName}'
  properties: {
    extensionType: backupExtensionType
    configurationSettings: {
      'configuration.backupStorageLocation.bucket': backupContainerName
      'configuration.backupStorageLocation.config.storageAccount': storageAccountName
      'configuration.backupStorageLocation.config.resourceGroup': backupResourceGroupName
      'configuration.backupStorageLocation.config.subscriptionId': subscription().subscriptionId
      'credentials.tenantId': subscription().tenantId
    }
  }
  dependsOn: [
    backupContainer
  ]
}

output aksClusterId string = aksCluster.id
output backupVaultId string = backupVault.id

Nasazení šablony

Pokud chcete tuto šablonu nasadit, uložte ji do GitHubu nebo do preferovaného umístění a pak do okna prostředí vložte následující skript PowerShellu. Kód vložíte tak, že kliknete pravým tlačítkem myši na okno prostředí a pak vyberete Vložit.

$projectName = Read-Host -Prompt "Enter a project name (limited to eight characters) that is used to generate Azure resource names"
$location = Read-Host -Prompt "Enter the location (for example, centralus)"

$resourceGroupName = "${projectName}rg"
$templateUri = "templateURI"

New-AzResourceGroup -Name $resourceGroupName -Location $location
New-AzResourceGroupDeployment -ResourceGroupName $resourceGroupName -TemplateUri $templateUri -projectName $projectName 

Další kroky