Compartilhar via


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.

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

  • 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 do Cofre, você poderá usar os recursos hidratados no local de preparo para restaurar os recursos do aplicativo para o 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 do AKS de destino

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

Primeiro, execute o seguinte comando para verificar 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

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)

Se a função não estiver 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 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

Em seguida, execute o seguinte comando para atribuir a função necessária à 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

Busca do ponto de recuperação relevante

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

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

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

Caso você esteja 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 de backup ou Atualizar, que modifica os campos mutáveis do recurso no cluster com 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 de serem restaurados 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.

  • 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 o backup armazenado na camada do cofre, você precisará fornecer uma ID do grupo de recursos como um local de preparo. 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 o backup armazenado na camada do cofre, você precisará fornecer uma ID da conta de armazenamento como um local de preparo. 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

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

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 do AKS de Destino deve ter a função Colaborador no Grupo de Recursos de Instantâneos.
  • A Identidade do Usuário anexada à Extensão de Backup deve ter funções de 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 do Cofre.
  • O cofre de Backup deve ter uma função Leitor no cluster AKS de destino e grupo de recursos de instantâneo em caso de restauração da Camada Operacional.
  • O cofre de Backup deve ter uma função de Colaborador no Grupo de Recursos de Preparo em caso de restauração do backup da Camada do Cofre.
  • O cofre de Backup deve ter uma função Colaborador da Conta de Armazenamento e Proprietário de Dados de Blob de Armazenamento no Grupo de Recursos de Preparo em caso de restauração do backup da Camada do Cofre.

Disparar 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 

Observação

Os recursos hidratados no grupo de recursos de preparo 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