Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze quickstart wordt beschreven hoe u een gekluisde back-up configureert voor een AKS-cluster (Azure Kubernetes Service) met behulp van Terraform.
Azure Backup voor AKS is een cloudeigen, bedrijfsklare, toepassingsgerichte back-upservice waarmee u snel back-ups voor AKS-clusters kunt configureren.
Notitie
Stappen in dit artikel over het implementeren van een cluster en het beveiligen met AKS Backup zijn alleen bedoeld voor evaluatiedoeleinden.
Voordat u een cluster implementeert dat gereed is voor productie en geavanceerde back-upinstellingen gebruikt, raden we u aan vertrouwd te raken met de referentiearchitectuur van de basislijn om na te gaan hoe het overeenkomt met uw bedrijfsvereisten.
Prerequisites
Dingen die u moet controleren voordat u een AKS-back-up configureert:
In deze snelstart wordt ervan uitgegaan dat u een basisbegrip hebt van Kubernetes-concepten. Zie voor meer informatie [Kubernetes-kernconcepten voor Azure Kubernetes Service (AKS)][kubernetes-concepts].
U hebt een Azure-account met een actief abonnement nodig. Als u nog geen account hebt, maakt u gratis een account.
Installeer en configureer Terraform.
Notitie
Zorg ervoor dat de Gebruikte Terraform-versie 3.99 of hoger is
Maak een willekeurige waarde voor de naam van de Azure-resourcegroep met behulp van random_pet.
Maak een Azure-resourcegroep met behulp van azurerm_resource_group.
Toegang tot de configuratie van de AzureRM-provider om de Azure-object-id op te halen met behulp van
azurerm_client_config.Een Kubernetes-cluster maken met behulp van
azurerm_kubernetes_cluster.Maak een AzAPI-resource met behulp van
azapi_resource.Maak een opslagaccount met behulp van
azurerm_storage_account.Een blobcontainer maken met behulp van
azurerm_storage_container.Installeer de back-upextensie in het AKS-cluster met behulp van
azurerm_kubernetes_cluster_extension'.Maak een Backup Vault met behulp van
azurerm_data_protection_backup_vault.Maak een back-upbeleid voor een AKS-cluster met behulp van
azurerm_data_protection_backup_vault.Vertrouwde toegang tussen AKS-cluster en Backup-kluis inschakelen met behulp van
azurerm_kubernetes_cluster_trusted_access_role_binding.Roltoewijzingen inschakelen met behulp van
azurerm_role_assignment.Back-up configureren voor een AKS-cluster met behulp van
azurerm_data_protection_backup_policy_kubernetes_cluster.
Aanmelden bij Azure-account
Meld u aan bij uw Azure-account en verifieer met een van de volgende methoden:
Terraform biedt alleen ondersteuning voor verificatie bij Azure met de Azure CLI. Verificatie met behulp van Azure PowerShell wordt niet ondersteund. Terwijl u de Azure PowerShell-module kunt gebruiken bij het uitvoeren van uw Terraform-werk, moet u zich eerst authenticeren bij Azure.
De Terraform-code implementeren
Voer de volgende scripts uit om de Terraform-code voor het AKS-back-upproces te implementeren.
Notitie
Meer informatie over het gebruik van Terraform-voorbeeldcodes voor het beheren van Azure-resources.
Maak een map die u kunt gebruiken om de Terraform-voorbeeldcode te testen en maak er uw huidige map van.
Maak een bestand met de naam
providers.tfen voeg de volgende code in:terraform { required_providers { azurerm = { source = "hashicorp/azurerm" version = "3.99.0" } } } provider "azurerm" { features {} subscription_id = "<azure_subscription_id>" tenant_id = "<azure_subscription_tenant_id>" }Maak een bestand met de naam
main.tfen voeg de volgende code in:#Get Subscription and Tenant Id from Config data "azurerm_client_config" "current" { } #Create a Resource Group where Backup Vault and AKS Cluster will be created resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = var.resource_group_name } #Create a Resource Group where Storage Account and Snapshots related to backup will be created resource "azurerm_resource_group" "backuprg" { location = var.backup_resource_group_location name = var.backup_resource_group_name } #Create an AKS Cluster resource "azurerm_kubernetes_cluster" "akscluster" { resource_group_name = azurerm_resource_group.rg.name name = var.aks_cluster_name location = azurerm_resource_group.rg.location dns_prefix = var.dns_prefix identity { type = "SystemAssigned" } default_node_pool { name = "agentpool" vm_size = "Standard_D2_v2" node_count = var.node_count } network_profile { network_plugin = "kubenet" load_balancer_sku = "standard" } depends_on = [azurerm_resource_group.rg,azurerm_resource_group.backuprg] } #Create a Backup Vault resource "azurerm_data_protection_backup_vault" "backupvault" { name = var.backupvault_name resource_group_name = resource.azurerm_resource_group.rg.name location = resource.azurerm_resource_group.rg.location datastore_type = var.datastore_type redundancy = var.redundancy identity { type = "SystemAssigned" } depends_on = [azurerm_kubernetes_cluster.akscluster] } #Create a Backup Policy with 4 hourly backups and 7 day retention duration resource "azurerm_data_protection_backup_policy_kubernetes_cluster" "policy" { name = var.backuppolicy_name resource_group_name = var.resource_group_name vault_name = var.backupvault_name backup_repeating_time_intervals = ["R/2024-04-14T06:33:16+00:00/PT4H"] default_retention_rule { life_cycle { duration = "P7D" data_store_type = "OperationalStore" } } depends_on = [resource.azurerm_data_protection_backup_vault.backupvault] } #Create a Trusted Access Role Binding between AKS Cluster and Backup Vault resource "azurerm_kubernetes_cluster_trusted_access_role_binding" "trustedaccess" { kubernetes_cluster_id = azurerm_kubernetes_cluster.akscluster.id name = "backuptrustedaccess" roles = ["Microsoft.DataProtection/backupVaults/backup-operator"] source_resource_id = azurerm_data_protection_backup_vault.backupvault.id depends_on = [resource.azurerm_data_protection_backup_vault.backupvault, azurerm_kubernetes_cluster.akscluster] } #Create a Backup Storage Account provided in input for Backup Extension Installation resource "azurerm_storage_account" "backupsa" { name = "tfaksbackup1604" resource_group_name = azurerm_resource_group.backuprg.name location = azurerm_resource_group.backuprg.location account_tier = "Standard" account_replication_type = "LRS" depends_on = [azurerm_kubernetes_cluster_trusted_access_role_binding.trustedaccess] } #Create a Blob Container where backup items will stored resource "azurerm_storage_container" "backupcontainer" { name = "tfbackup" storage_account_name = azurerm_storage_account.backupsa.name container_access_type = "private" depends_on = [azurerm_storage_account.backupsa] } #Create Backup Extension in AKS Cluster resource "azurerm_kubernetes_cluster_extension" "dataprotection" { name = var.backup_extension_name cluster_id = azurerm_kubernetes_cluster.akscluster.id extension_type = var.backup_extension_type configuration_settings = { "configuration.backupStorageLocation.bucket" = azurerm_storage_container.backupcontainer.name "configuration.backupStorageLocation.config.storageAccount" = azurerm_storage_account.backupsa.name "configuration.backupStorageLocation.config.resourceGroup" = azurerm_storage_account.backupsa.resource_group_name "configuration.backupStorageLocation.config.subscriptionId" = data.azurerm_client_config.current.subscription_id "credentials.tenantId" = data.azurerm_client_config.current.tenant_id "configuration.backupStorageLocation.config.useAAD" = true "configuration.backupStorageLocation.config.storageAccountURI" = azurerm_storage_account.backupsa.primary_blob_endpoint } depends_on = [azurerm_storage_container.backupcontainer] } #Assign Role to Extension Identity over Storage Account resource "azurerm_role_assignment" "extensionrole" { scope = azurerm_storage_account.backupsa.id role_definition_name = "Storage Blob Data Contributor" principal_id = azurerm_kubernetes_cluster_extension.dataprotection.aks_assigned_identity[0].principal_id depends_on = [azurerm_kubernetes_cluster_extension.dataprotection] } #Assign Role to Backup Vault over AKS Cluster resource "azurerm_role_assignment" "vault_msi_read_on_cluster" { scope = azurerm_kubernetes_cluster.akscluster.id role_definition_name = "Reader" principal_id = azurerm_data_protection_backup_vault.backupvault.identity[0].principal_id depends_on = [azurerm_kubernetes_cluster.akscluster,resource.azurerm_data_protection_backup_vault.backupvault] } #Assign Role to Backup Vault over Snapshot Resource Group resource "azurerm_role_assignment" "vault_msi_read_on_snap_rg" { scope = azurerm_resource_group.backuprg.id role_definition_name = "Reader" principal_id = azurerm_data_protection_backup_vault.backupvault.identity[0].principal_id depends_on = [azurerm_kubernetes_cluster.akscluster,resource.azurerm_data_protection_backup_vault.backupvault] } #Assign Role to AKS Cluster over Snapshot Resource Group resource "azurerm_role_assignment" "cluster_msi_contributor_on_snap_rg" { scope = azurerm_resource_group.backuprg.id role_definition_name = "Contributor" principal_id = try(azurerm_kubernetes_cluster.akscluster.identity[0].principal_id,null) depends_on = [azurerm_kubernetes_cluster.akscluster,resource.azurerm_kubernetes_cluster.akscluster,resource.azurerm_resource_group.backuprg] } #Create Backup Instance for AKS Cluster resource "azurerm_data_protection_backup_instance_kubernetes_cluster" "akstfbi" { name = "example" location = azurerm_resource_group.backuprg.location vault_id = azurerm_data_protection_backup_vault.backupvault.id kubernetes_cluster_id = azurerm_kubernetes_cluster.akscluster.id snapshot_resource_group_name = azurerm_resource_group.backuprg.name backup_policy_id = azurerm_data_protection_backup_policy_kubernetes_cluster.policy.id backup_datasource_parameters { excluded_namespaces = [] excluded_resource_types = [] cluster_scoped_resources_enabled = true included_namespaces = [] included_resource_types = [] label_selectors = [] volume_snapshot_enabled = true } depends_on = [ resource.azurerm_data_protection_backup_vault.backupvault, azurerm_data_protection_backup_policy_kubernetes_cluster.policy, azurerm_role_assignment.extensionrole, azurerm_role_assignment.vault_msi_read_on_cluster, azurerm_role_assignment.vault_msi_read_on_snap_rg, azurerm_role_assignment.cluster_msi_contributor_on_snap_rg ] }Maak een bestand met de naam
variables.tfen voeg de volgende code in:variable "aks_cluster_name" { type = string default = "Contoso_AKS_TF" description = "Name of the AKS Cluster." } variable "backup_extension_name" { type = string default = "azure-aks-backup" description = "Name of the AKS Cluster Extension." } variable "backup_extension_type" { type = string default = "microsoft.dataprotection.kubernetes" description = "Type of the AKS Cluster Extension." } variable "dns_prefix" { type = string default = "contoso-aks-dns-tf" description = "DNS Name of AKS Cluster made with Terraform" } variable "node_count" { type = number description = "The initial quantity of nodes for the node pool." default = 3 } variable "resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "backup_resource_group_name" { type = string default = "Contoso_TF_Backup_RG" description = "Location of the resource group." } variable "backup_resource_group_location" { type = string default = "eastus" description = "Location of the resource group." } variable "resource_group_name" { type = string default = "Contoso_TF_RG" description = "Location of the resource group." } variable "cluster_id" { type = string default = "/subscriptions/c3d3eb0c-9ba7-4d4c-828e-cb6874714034/resourceGroups/Contoso_TF_RG/providers/Microsoft.ContainerService/managedClusters/Contoso_AKS_TF" description = "Location of the resource group." } variable "backupvault_name" { type = string default = "BackupVaultTF" description = "Name of the Backup Vault" } variable "datastore_type" { type = string default = "OperationalStore" } variable "redundancy" { type = string default = "LocallyRedundant" } variable "backuppolicy_name" { type = string default = "aksbackuppolicytfv1" }Maak een bestand met de naam
outputs.tfen voeg de volgende code in:output "aks_resource_group" { value = azurerm_resource_group.rg.name } output "snapshot_resource_group" { value = azurerm_resource_group.backuprg.name } output "kubernetes_cluster_name" { value = azurerm_kubernetes_cluster.akscluster.name } output "backup_vault_name" { value = azurerm_data_protection_backup_vault.backupvault.name } output "backup_instance_id" { value = azurerm_data_protection_backup_instance_kubernetes_cluster.akstfbi.id }
Terraform initialiseren
Voer terraform init uit om de Terraform-implementatie te initialiseren. Met deze opdracht wordt de Azure-provider gedownload die is vereist voor het beheren van uw Azure-resources.
terraform init -upgrade
Belangrijkste punten:
- Met
-upgradede parameter worden de benodigde providerinvoegtoepassingen bijgewerkt naar de nieuwste versie die voldoet aan de versiebeperkingen van de configuratie.
Een Terraform-uitvoeringsplan maken
Voer terraform-plan uit om een uitvoeringsplan te maken.
terraform plan -out main.tfplan
Belangrijkste punten:
- De
terraform planopdracht maakt een uitvoeringsplan, maar voert het niet uit. In plaats daarvan wordt bepaald welke acties nodig zijn om de configuratie te maken die is opgegeven in uw configuratiebestanden. Met dit patroon kunt u controleren of het uitvoeringsplan aan uw verwachtingen voldoet voordat u wijzigingen aanbrengt in de werkelijke resources. - Met de optionele
-outparameter kunt u een uitvoerbestand voor het plan opgeven. Door de-outparameter te gebruiken, zorgt u ervoor dat het plan dat u hebt gecontroleerd precies wordt toegepast.
Een Terraform-uitvoeringsplan toepassen
Voer terraform apply uit om het uitvoeringsplan op uw cloudinfrastructuur toe te passen.
terraform apply main.tfplan
Belangrijkste punten:
- Bij de voorbeeldopdracht
terraform applywordt ervan uitgegaan dat u eerder hebt uitgevoerdterraform plan -out main.tfplan. - Als u een andere bestandsnaam voor de
-outparameter hebt opgegeven, gebruikt u diezelfde bestandsnaam in de aanroep naarterraform apply. - Als u de
-out-parameter niet hebt gebruikt, roepterraform applyaan zonder parameters.
Problemen met Terraform in Azure oplossen
Wanneer u Terraform in Azure gebruikt, kunt u veelvoorkomende problemen ondervinden. Meer informatie over het oplossen van problemen.
Volgende stap
In deze quickstart hebt u geleerd hoe u een Kubernetes-cluster implementeert, een Backup-kluis maakt en back-up configureert voor het Kubernetes-cluster.
Meer informatie over:
Overzicht van AKS-back-up. AKS-cluster herstellen met behulp van Azure CLI. Azure Backup voor AKS gebruiken.