Restaurar o Serviço de Kubernetes do Azure usando a CLI do Azure

Este artigo descreve como restaurar o cluster do Azure Kubernetes de um ponto de restauração criado pelo Backup do Azure usando a CLI do Azure. Você também pode restaurar o cluster do AKS usando o Azure PowerShell.

Agora, o Backup do Azure permite fazer backup de clusters do AKS (recursos de cluster e volumes persistentes anexados ao cluster) usando uma extensão de backup, que precisa ser instalada no cluster. O cofre de backup se comunica com o cluster por meio dessa extensão de backup para executar operações de backup e restauração.

Você pode executar a Recuperação no Local Original (OLR) (restauração no cluster do AKS do qual foi feito o backup) e Recuperação de Local Alternativo (ALR) (restauração em um cluster do AKS diferente). Você também pode selecionar os itens a serem restaurados a partir do backup que é Recuperação em Nível de Item (ILR).

Observação

Antes de iniciar uma operação de restauração, o cluster de destino deve ter a Extensão de Backup instalada e o Acesso Confiável habilitado no cofre de Backup. Saiba mais.

Antes de começar

Antes de começar a restaurar um cluster do AKS, examine os seguintes detalhes:

  • O backup do AKS permite a restauração para o cluster do AKS original (cujo backup foi feito) e para um cluster alternativo do AKS. O backup do AKS permite que você execute uma restauração completa e uma restauração no nível do item. Você pode utilizar as configurações de restauração para definir parâmetros com base nos recursos do cluster que devem ser restaurados.

  • Você precisa instalar a extensão de backup no cluster do AKS de destino. Além disso, você precisa habilitar o acesso confiável entre o cofre de Backup e o cluster do AKS.

  • Se a versão do cluster AKS de destino for diferente da versão usada durante o backup, a operação de restauração poderá falhar ou ser concluída com avisos para vários cenários, como recursos preteridos na versão mais recente do cluster. Se estiver restaurando da camada Vault, você poderá usar os recursos hidratados no local de preparação para restaurar os recursos da aplicação no cluster de destino.

Para saber mais sobre as limitações e os cenários com suporte, confira a matriz de suporte.

Validar e preparar o cluster de destino do AKS

Antes de iniciar um processo de restauração, você deve validar que o cluster do AKS está preparado para a restauração. Inclui a Extensão de Backup a ser instalada, com a extensão tendo permissão na conta de armazenamento em que os backups são armazenados/hidratados, e com o Acesso Confiável habilitado entre o cluster AKS de destino e o cofre de backup.

Para validar e preparar o cluster do AKS para restauração, execute os seguintes comandos:

  1. Verifique se a Extensão de Backup está instalada no cluster.

    az k8s-extension show --name azure-aks-backup --cluster-type managedClusters --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup
    
  2. Se a extensão estiver instalada, verifique se ela tem as permissões corretas na conta de armazenamento em que os backups são armazenados.

    az role assignment list --all --assignee  $(az k8s-extension show --name azure-aks-backup --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv)
    
  3. Se a função não for atribuída, atribua a função.

    az role assignment create --assignee-object-id $(az k8s-extension show --name azure-aks-backup --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv) --role 'Storage Blob Data Contributor'  --scope /subscriptions/$subscriptionId/resourceGroups/$storageaccountresourcegroup/providers/Microsoft.Storage/storageAccounts/$storageaccount
    
    
  4. Se a Extensão de Backup não estiver instalada, execute o seguinte comando de instalação de extensão com a conta de armazenamento e o contêiner de blob em que os backups são armazenados como entrada.

    az k8s-extension create --name azure-aks-backup --extension-type microsoft.dataprotection.kubernetes --scope cluster --cluster-type managedClusters --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --release-train stable --configuration-settings blobContainer=$blobcontainer storageAccount=$storageaccount storageAccountResourceGroup=$storageaccountresourcegroup storageAccountSubscriptionId=$subscriptionId
    
  5. Atribua a função necessária para a extensão na conta de armazenamento.

    az role assignment create --assignee-object-id $(az k8s-extension show --name azure-aks-backup --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup --cluster-type managedClusters --query aksAssignedIdentity.principalId --output tsv) --role 'Storage Blob Data Contributor'  --scope /subscriptions/$subscriptionId/resourceGroups/$storageaccountresourcegroup/providers/Microsoft.Storage/storageAccounts/$storageaccount
    
    

Verificar o Acesso Confiável

Para verificar se o Acesso Confiável está habilitado entre o cofre de Backup e o cluster do AKS de destino, execute o seguinte comando:

az aks trustedaccess rolebinding list --resource-group $aksclusterresourcegroup --cluster-name $targetakscluster

Se não estiver, o Acesso Confiável poderá ser habilitado com o seguinte comando:

az aks trustedaccess rolebinding create --cluster-name $targetakscluster --name backuprolebinding --resource-group $aksclusterresourcegroup --roles Microsoft.DataProtection/backupVaults/backup-operator --source-resource-id /subscriptions/$subscriptionId/resourceGroups/$backupvaultresourcegroup/providers/Microsoft.DataProtection/BackupVaults/$backupvault

Restaurar em um cluster do AKS

Para restaurar em um cluster AKS, consulte as seções a seguir.

Busque o ponto de recuperação relevante

Para buscar o ponto de recuperação relevante, execute os seguintes comandos:

  1. Busque todas as instâncias associadas ao cluster do AKS e identifique a instância relevante.

    az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster 
    
    
  2. Depois que a instância for identificada, busque o ponto de recuperação relevante.

    az dataprotection recovery-point list --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --vault-name $backupvault
    
    
  3. Se você estiver procurando restaurar backups para a região secundária, use o sinalizador --use-secondary-region para identificar os pontos de recuperação disponíveis nessa região.

    az dataprotection recovery-point list --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --vault-name $backupvault --use-secondary-region true
    
    

Preparar a solicitação de restauração

Para preparar a configuração de restauração e definir os itens a serem restaurados no cluster do AKS de destino, execute o comando az dataprotection backup-instance initialize-restoreconfig.

az dataprotection backup-instance initialize-restoreconfig --datasource-type AzureKubernetesService >restoreconfig.json



{
  "conflict_policy": "Skip",
  "excluded_namespaces": null,
  "excluded_resource_types": null,
  "include_cluster_scope_resources": true,
  "included_namespaces": null,
  "included_resource_types": null,
  "label_selectors": null,
  "namespace_mappings": null,
  "object_type": "KubernetesClusterRestoreCriteria",
  "persistent_volume_restore_mode": "RestoreWithVolumeData",
  "resource_modifier_reference": null,
  "restore_hook_references": null,
  "staging_resource_group_id": null,
  "staging_storage_account_id": null
}

A configuração de restauração é composta pelos seguintes itens:

  • conflict_policy: durante uma restauração, se houver um recurso com o mesmo nome no cluster como no backup, você poderá escolher como lidar com o conflito. Você tem duas opções: Ignorar, que não restaurará o item do backup, ou Atualizar, que modifica os campos mutáveis do recurso existente no cluster usando o recurso armazenado no backup.

  • excluded_namespace: você pode listar os namespaces a serem excluídos de serem restaurados no cluster. O recurso subjacente a esses namespaces não será restaurado.

  • excluded_resource_types: Você pode listar os tipos de recursos a serem excluídos da restauração no cluster. Os valores na entrada devem ser fornecidos como Tipo de Grupo de API como par de valores de chave.

  • include_cluster_scope_resources: você pode decidir se deseja restaurar recursos com escopo de cluster ou não definindo o valor como true ou false.

  • included_namespaces : você pode listar os namespaces a serem incluídos apenas como parte da restauração para o cluster. O recurso subjacente a esses namespaces deve ser restaurado.

  • excluded_resource_types: você pode listar os tipos de recursos a serem incluídos apenas para restauração no cluster. Os valores na entrada devem ser fornecidos como Tipo de Grupo de API como par de valores de chave.

  • label_selectors: você pode selecionar recursos a serem restaurados com rótulos específicos neles. O valor de entrada deve ser fornecido como par de valor de chave.

  • namespace_mappings: você pode mapear o namespace (e os recursos subjacentes) para um namespace diferente no cluster de destino. Se o namespace de destino não existir no cluster, um novo namespace será criado pela extensão. O valor de entrada deve ser fornecido como par de valor de chave.

  • object_type: Essa variável especifica se a configuração de restauração se destina a um ponto de recuperação armazenado no Operational Tier ou no Vault Tier. Se o ponto de recuperação estiver na Camada Operacional, defina o valor como KubernetesClusterRestoreCriteria. Se o ponto de recuperação estiver na camada Vault ou estiver sendo restaurado para uma região secundária, defina o valor como KubernetesClusterVaultTierRestoreCriteria.

  • persistent_volume_restore_mode: você pode usar essa variável para decidir se deseja restaurar os volumes persistentes com backup ou não. Os valores aceitos são RestoreWithVolumeData, RestoreWithoutVolumeData

  • resource_modifier_reference: você pode consultar o recurso modificador de recurso implantado no cluster com essa variável. O valor de entrada é um par de valor de chave do Namespace no qual o recurso é implantado e o nome do arquivo yaml.

  • restore_hook_references: você pode consultar o recurso de Gancho de Restauração implantado no cluster com essa variável. O valor de entrada é um par de valores de chave do Namespace no qual o recurso é implantado e o nome dos arquivos yaml.

  • staging_resource_group_id: caso esteja restaurando um backup armazenado na camada de cofre, você precisará fornecer a ID de um grupo de recursos como local de preparação. Nesse grupo de recursos, os volumes persistentes de backup são hidratados antes de serem restaurados para o cluster de destino.

  • staging_storage_account_id: caso esteja restaurando um backup armazenado na camada de cofre, você precisará fornecer a ID de uma conta de armazenamento como local de preparação. Nesse grupo de recursos, os recursos de kubernetes de backup são hidratados antes de serem restaurados para o cluster de destino.

Agora prepare a solicitação de restauração com todos os detalhes relevantes. Se estiver restaurando o backup para o cluster original, execute o seguinte comando:

az dataprotection backup-instance restore initialize-for-item-recovery --datasource-type AzureKubernetesService --restore-location $region --source-datastore OperationalStore --recovery-point-id $recoverypointid --restore-configuration restoreconfig.json --backup-instance-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.DataProtection/backupVaults/$backupvault/backupInstances/$backupinstanceid >restorerequestobject.json

Se o cluster do AKS de destino para restauração for diferente do cluster original, execute o seguinte comando:

az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureKubernetesService --restore-location $region --source-datastore OperationalStore --recovery-point-id $recoverypointid --restore-configuration restoreconfig.json --target-resource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$targetakscluster >restorerequestobject.json

Se o cluster de destino estiver na região secundária, use o sinalizador --use-secondary-region.

az dataprotection backup-instance restore initialize-for-data-recovery --datasource-type AzureKubernetesService --restore-location $region --source-datastore OperationalStore --recovery-point-id $recoverypointid --restore-configuration restoreconfig.json --target-resource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$targetakscluster --use-secondary-region true >restorerequestobject.json

Observação

Caso você tenha escolhido um ponto de recuperação da camada de cofre com --source-datastore o VaultStore, forneça uma conta de armazenamento e um grupo de recursos de instantâneo na configuração de restauração.

Caso você esteja tentando restaurar para o cluster na região secundária, defina o sinalizador --restore-location como o nome da região secundária e --source-datastore como VaultStore.

Agora você pode atualizar o objeto JSON de acordo com seus requisitos e, em seguida, executar o seguinte comando para validar o objeto:

az dataprotection backup-instance validate-for-restore --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --restore-request-object restorerequestobject.json --vault-name $backupvault

Se o cluster de destino estiver na região secundária, use o sinalizador --use-secondary-region.

az dataprotection backup-instance validate-for-restore --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --restore-request-object restorerequestobject.json --vault-name $backupvault --use-secondary-region true

Esse comando verifica se o cluster do AKS e o cofre de backup têm as funções necessárias em diferentes recursos necessários para executar a restauração. Se a validação falhar devido a funções ausentes, você poderá atribuí-las executando o seguinte comando:

az dataprotection backup-instance update-msi-permissions --datasource-type AzureKubernetesService --operation Restore --permissions-scope Resource --resource-group  $backupvaultresourcegroup --vault-name $backupvault --restore-request-object restorerequestobject.json --snapshot-resource-group-id /subscriptions/$subscriptionId/resourceGroups/$snapshotresourcegroup

Observação

Durante a operação de restauração, o cofre de Backup e o cluster do AKS precisam ter determinadas funções atribuídas para realizar a restauração:

  • O cluster AKS de destino deve ter a função de Colaborador no Grupo de Recursos de Snapshot.
  • A Identidade de Usuário anexada à Extensão de Backup deve ter a função Colaborador de dados de blob de armazenamento na conta de armazenamento em que os backups são armazenados, no caso da camada operacional, e na conta de armazenamento de preparo, no caso da camada de cofre.
  • O cofre de Backup deve ter a função Leitor no cluster AKS de destino e no Grupo de Recursos de Snapshot ao restaurar da Camada Operacional.
  • O cofre de backup deve ter a função Colaborador no Grupo de Recursos de preparo no caso de restauração de backup da camada do cofre.
  • O cofre de Backup deve ter as funções Colaborador da Conta de Armazenamento e Proprietário dos Dados de Blob de Armazenamento na Conta de Armazenamento de Preparação em caso de restauração de backup da camada Vault.

Iniciar a restauração

Depois que a atribuição de função for concluída, você deverá validar o objeto de restauração mais uma vez. Depois disso, você pode executar o seguinte comando para disparar uma operação de restauração:

az dataprotection backup-instance restore trigger --backup-instance-name $backupinstancename --restore-request-object restorerequestobject.json 

Se o cluster de destino estiver na região secundária, use o sinalizador --use-secondary-region.

az dataprotection backup-instance restore trigger --backup-instance-name $backupinstancename --restore-request-object restorerequestobject.json --use-secondary-region true

Observação

Os recursos hidratados no grupo de recursos de preparo temporário e na conta de armazenamento não são limpos automaticamente após a conclusão do trabalho de restauração e devem ser excluídos manualmente.

Acompanhar o trabalho

Você pode acompanhar os trabalhos de restauração usando o comando az dataprotection job. Você pode listar todos os trabalhos e buscar um detalhe de trabalho específico.

Você também pode usar o Resource Graph para acompanhar todos os trabalhos em todas as assinaturas, grupos de recursos e cofres de Backup. Use o comando az dataprotection job list-from-resourcegraph para obter o trabalho relevante.

az dataprotection job list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster --operation Restore

Próximas etapas