Share via


使用 Azure CLI 還原 Azure Kubernetes Service

本文描述如何使用 Azure CLI 從 Azure 備份所建立的還原點還原 Azure Kubernetes 叢集。

Azure 備份現在可讓您使用必須安裝在叢集中的備份延伸模組來備份 AKS 叢集 (叢集資源和連結至叢集的永續性磁碟區)。 備份保存庫會透過此備份延伸模組與叢集通訊,以執行備份和還原作業。

您可以執行原始位置復原 (OLR) (在備份的 AKS 叢集中還原) 和替代位置復原 (ALR) (在不同的 AKS 叢集中還原)。 您也可以選取要從項目層級復原 (ILR) 備份還原的項目。

注意

在起始還原作業之前,目標叢集應已安裝備份延伸模組,並針對備份保存庫啟用信任存取。 深入了解

在您開始使用 Intune 之前

  • AKS 備份可讓您還原至原始 AKS 叢集 (已備份的叢集) 和替代 AKS 叢集。 AKS 備份可讓您執行完整還原和項目層級還原。 您可以使用還原設定,根據還原期間將挑選的叢集資源來定義參數。

  • 您必須在目標 AKS 叢集中安裝備份延伸模組。 此外,您必須在備份保存庫與 AKS 叢集之間啟用信任存取

如需限制和支援案例的詳細資訊,請參閱支援矩陣

驗證和準備目標 AKS 叢集

起始還原程序之前,您必須驗證 AKS 叢集是否已準備好進行還原。 這包括要隨著延伸模組安裝的備份延伸模組,其具有儲存備份所在儲存體帳戶上的權限,並在 AKS 叢集與備份保存庫之間啟用信任存取。

首先,執行下列命令,檢查是否已在叢集中安裝備份延伸模組:

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

如果已安裝延伸模組,則檢查它是否具有儲存備份所在的儲存體帳戶上的正確權限:

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)

如果未指派角色,則可以執行下列命令來指派角色:

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

如果未安裝備份延伸模組,請使用儲存備份所在的儲存體帳戶和 Blob 容器作會為輸入,執行下列延伸模組安裝命令。

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

然後執行下列命令,將所需的角色指派給儲存體帳戶上的延伸模組:

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

檢查信任存取

若要檢查備份保存庫與目標 AKS 叢集之間是否已啟用信任存取,請執行下列命令:

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

如果未啟用,則執行下列命令以啟用信任存取:

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

還原至 AKS 叢集

擷取相關復原點

擷取與 AKS 叢集相關聯的所有執行個體,並識別相關的執行個體。

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

識別執行個體之後,請擷取相關的復原點。

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

準備還原要求

若要準備定義要還原至目標 AKS 叢集的項目的還原設定,請執行 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"
}

現在,使用所有相關詳細資料準備還原要求。 如果您要將備份還原至原始叢集,請執行下列命令:

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

如果還原的目標 AKS 叢集與原始叢集不同,則執行下列命令:

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

現在,您可以根據需求更新 JSON 物件,然後執行下列命令來驗證物件:

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

此命令會檢查 AKS 叢集和備份保存庫是否具有彼此的必要權限,以及用來執行還原的快照集資源群組。 如果驗證因權限遺失而失敗,您可以執行下列命令來指派這些權限:

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

觸發還原

角色指派完成後,您應該再次驗證還原物件。 之後,您可以執行下列命令來觸發還原作業:

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

注意

在還原作業期間,備份保存庫和 AKS 叢集必須獲派特定角色來執行還原:

  1. 目標 AKS 叢集應該具有快照集資源群組上的參與者角色。
  2. 在儲存備份所在的儲存體帳戶上,與備份延伸模組連結的使用者身分識別應具有儲存體帳戶參與者角色。
  3. 備份保存庫應該具有目標 AKS 叢集快照集資源群組上的讀取者角色。

追蹤作業

您可以使用 az dataprotection job 命令來追蹤還原工作。 您可以列出所有工作,並擷取特定的工作詳細資料。

您也可以使用 Resource Graph 來追蹤所有訂用帳戶、資源群組和備份保存庫的所有工作。 使用 az dataprotection job list-from-resourcegraph 命令來取得相關的工作。

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

下一步