Partager via


Démarrage rapide : configurer la sauvegarde archivée d’un cluster Azure Kubernetes Service (AKS) à l’aide d’Azure Bicep

Ce guide de démarrage rapide explique comment configurer la sauvegarde archivée d’un cluster Azure Kubernetes Service (AKS) à l’aide d’Azure Bicep.

Sauvegarde Azure pour AKS est un service de sauvegarde cloud natif, prêt pour l’entreprise et centré sur les applications, qui vous permet de configurer rapidement la sauvegarde pour les clusters AKS.Sauvegarde Azure vous permet de sauvegarder vos clusters AKS à l’aide de plusieurs options, telles que le portail Azure, PowerShell, CLI, Azure Resource Manager, Bicep, etc. Ce guide de démarrage rapide explique comment sauvegarder un cluster AKS avec un fichier Bicep et Azure PowerShell. Pour plus d’informations sur le développement de fichiers Bicep, consultez la documentation Bicep.

Bicep est un langage permettant de déployer de manière déclarative des ressources Azure. Vous pouvez utiliser Bicep au lieu de JSON pour développer vos modèles Azure Resource Manager (modèles ARM). La syntaxe Bicep réduit la complexité et améliore l’expérience de développement. Bicep est une abstraction transparente sur un JSON de modèle ARM qui fournit toutes les fonctionnalités de modèle JSON. Pendant le déploiement, l’interface de ligne de commande Bicep convertit un fichier Bicep en un JSON de modèle ARM. Un fichier Bicep déclare les ressources Azure et les propriétés de ressources, sans écrire de séquence de commandes de programmation pour créer des ressources.

Les types de ressources, les versions d’API et les propriétés qui sont valides dans un modèle ARM sont également valides dans un fichier Bicep.

Prérequis

Pour configurer votre environnement pour le développement Bicep, consultez Installer les outils bicep.

Notes

Installez le dernier module Azure PowerShell et l’interface CLI de Bicep, comme décrit dans cet article.

Vérifier le modèle

Ce modèle vous permet de configurer la sauvegarde d’un cluster AKS. Dans ce modèle, nous créons un coffre de sauvegarde avec une stratégie de sauvegarde pour le cluster AKS avec une planification de quatre heures et une durée de rétention de sept jours.

@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

Déployer le modèle

Pour déployer ce modèle, stockez-le dans GitHub ou votre emplacement préféré, puis collez le script PowerShell suivant dans la fenêtre de l’interpréteur de commandes. Pour coller le code, cliquez avec le bouton droit sur la fenêtre de l’interpréteur de commandes, puis sélectionnez Coller.

$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 

Étapes suivantes