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

Este artigo descreve como restaurar o cluster Kubernetes do Azure a partir de um ponto de restauração criado pelo Backup do Azure usando a CLI do Azure.

O Backup do Azure agora permite fazer backup de clusters AKS (recursos de cluster e volumes persistentes anexados ao cluster) usando uma extensão de backup, que deve 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 de Local Original (OLR) (restauração no cluster AKS do qual foi feito backup) e a Recuperação de Local Alternativo (ALR) (restauração em um cluster AKS diferente). Você também pode selecionar os itens a serem restaurados a partir do backup que é ILR (Item-Level Recovery).

Nota

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 para o cofre de Backup. Mais informações.

Antes de começar

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

  • Você deve instalar a Extensão de Backup no cluster AKS de destino. Além disso, você deve habilitar o Acesso Confiável entre o cofre de backup e o cluster AKS.

Para obter mais informações sobre as limitações e os cenários suportados, consulte a matriz de suporte.

Validar e preparar o cluster AKS de destino

Antes de iniciar um processo de restauração, você deve validar se o cluster AKS está preparado para restauração. Isso inclui a Extensão de Backup a ser instalada com a extensão tendo a permissão na conta de armazenamento onde os backups são armazenados e o Acesso Confiável a ser ativado entre o cluster AKS e o cofre de backup.

Primeiro, verifique se a Extensão de Backup está instalada no cluster executando o seguinte comando:

az k8s-extension show --name azure-aks-backup --cluster-type managedClusters --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup

Se a extensão estiver instalada, verifique se ela tem as permissões corretas na conta de armazenamento onde 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)

Se a função não for atribuída, você poderá atribuí-la executando o seguinte comando:

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 Account Contributor'  --scope /subscriptions/$subscriptionId/resourceGroups/$storageaccountresourcegroup/providers/Microsoft.Storage/storageAccounts/$storageaccount

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 onde 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

Em seguida, atribua a função necessária à extensão na conta de armazenamento executando o seguinte comando:

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 Account Contributor'  --scope /subscriptions/$subscriptionId/resourceGroups/$storageaccountresourcegroup/providers/Microsoft.Storage/storageAccounts/$storageaccount

Verificar Acesso Fidedigno

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

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

Se não estiver habilitado, execute o seguinte comando para habilitar o Acesso Confiável:

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 para um cluster AKS

Buscar o ponto de recuperação relevante

Buscar todas as instâncias associadas ao cluster AKS e identificar 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 --query aksAssignedIdentity.id

Uma vez identificada a instância, busque o ponto de recuperação relevante.

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

Preparar a solicitação de restauração

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

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"
}

Agora, prepare a solicitação de restauração com todos os detalhes relevantes. Se você 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 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

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

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

Este comando verifica se o Cluster AKS e o cofre de Backup têm permissões necessárias um no outro e o grupo de recursos Snapshot para executar a restauração. Se a validação falhar devido a permissõ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

Acionar a restauração

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

az dataprotection backup-instance restore trigger --restore-request-object restorerequestobject.json --ids /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.DataProtection/backupVaults/$backupvault/backupInstances/$backupinstancename 

Nota

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

  1. O cluster AKS de destino deve ter a função de Colaborador no Grupo de Recursos de Instantâneo.
  2. A Identidade do Usuário anexada à Extensão de Backup deve ter funções de Colaborador da Conta de Armazenamento na conta de armazenamento onde os backups são armazenados.
  3. O cofre de backup deve ter uma função de leitor no cluster AKS de destino e no grupo de recursos de instantâneo.

Acompanhamento do trabalho

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

Você também pode usar o Gráfico de Recursos para acompanhar todos os trabalhos em todas as assinaturas, grupos de recursos e cofres de backup. Use o az dataprotection job list-from-resourcegraph comando 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óximos passos