本文描述如何使用 Azure CLI 從 Azure 備份所建立的還原點還原 Azure Kubernetes 叢集。 您也可以使用 Azure PowerShell 還原 AKS 叢集。
Azure 備份現在可讓您使用必須安裝在叢集中的備份延伸模組來備份 AKS 叢集 (叢集資源和連結至叢集的永續性磁碟區)。 備份保存庫會透過此備份延伸模組與叢集通訊,以執行備份和還原作業。
您可以執行原始位置復原 (OLR) (在備份的 AKS 叢集中還原) 和替代位置復原 (ALR) (在不同的 AKS 叢集中還原)。 您也可以選取要從項目層級復原 (ILR) 備份還原的項目。
注意
在起始還原作業之前,目標叢集應已安裝備份延伸模組,並針對備份保存庫啟用信任存取。 深入了解。
開始之前
開始還原 AKS 叢集之前,請先檢閱下列詳細數據:
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 Blob Data 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 叢集,請參閱下列各節。
擷取相關復原點
若要擷取相關的恢復點,請執行下列命令:
擷取與 AKS 叢集相關聯的所有執行個體,並識別相關的執行個體。
az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster識別執行個體之後,請擷取相關的復原點。
az dataprotection recovery-point list --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --vault-name $backupvault如果您想要將備份還原至次要區域,請使用 旗標
--use-secondary-region來識別該區域中可用的恢復點。az dataprotection recovery-point list --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --vault-name $backupvault --use-secondary-region true
準備還原要求
若要準備定義要還原至目標 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",
"resource_modifier_reference": null,
"restore_hook_references": null,
"staging_resource_group_id": null,
"staging_storage_account_id": null
}
還原配置是由下列項目所組成:
conflict_policy:在還原期間,如果叢集中有與備份中相同名稱的資源,您可以選擇如何處理衝突。 您有兩個選項:Skip,這不會還原備份專案或 Update,它會使用儲存在備份中的資源來修改叢集中資源的可變動字段。excluded_namespace:您可以列出要予以排除而不還原到叢集的命名空間。 這些命名空間的基礎資源將不會還原。excluded_resource_types:您可以列出要排除在叢集中還原的資源類型。 輸入中的值應該以作為機碼/值組的 API 群組種類的形式提供。include_cluster_scope_resources:您可以將值設定為 true 或 false,以決定是否要還原叢集範圍資源。included_namespaces:您可以列出僅作為叢集復原的一部分包括在內的命名空間。 要還原這些命名空間的基礎資源。excluded_resource_types:您可以列出僅作為叢集復原的一部分包括在內的資源類型。 輸入中的值應該以作為機碼/值組的 API 群組種類的形式提供。label_selectors:您可以選取具有特定標籤的資源進行還原。 輸入值應提供為鍵值對。namespace_mappings:您可以將命名空間(和基礎資源)對應至目標叢集中的不同命名空間。 如果目標命名空間不存在於叢集中,則擴充功能會建立新的命名空間。 輸入值應提供為鍵值對。object_type:此變數會指定還原組態是用於儲存在操作層或保存庫層中的恢復點。 如果恢復點位於作業層中,請將值設定為 KubernetesClusterRestoreCriteria。 如果恢復點位於保管庫層級或還原至次級區域,請將值設定為 KubernetesClusterVaultTierRestoreCriteria。persistent_volume_restore_mode:您可以使用此變數來決定是否要還原備份的永續性磁碟區。 接受的值為 RestoreWithVolumeData、RestoreWithoutVolumeDataresource_modifier_reference:您可以使用此變數來參考叢集中部署的資源修飾元資源。 輸入值是會在其中部署資源之命名空間的機碼/值組,以及 yaml 檔案的名稱。restore_hook_references:您可以使用此變數來參考叢集中部署的還原勾點資源。 輸入值是會在其中部署資源之命名空間的機碼/值組,以及 yaml 檔案的名稱。staging_resource_group_id:如果您要還原儲存在保存庫層級中的備份,您必須提供資源群組的識別碼作為暫存位置。 在此資源群組中,備份的永續性磁碟區會在還原至目標叢集之前解除凍結。staging_storage_account_id:如果您要還原儲存在保存庫層中的備份,您必須提供儲存帳戶的標識碼作為暫存位置。 在此資源群組中,備份的 Kubernetes 資源會在還原至目標叢集之前解除凍結。
現在,使用所有相關詳細資料準備復原請求。 如果您要將備份還原至原始叢集,請執行下列命令:
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
如果目標叢集位於次要區域中,請使用 旗標 --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
注意
如果您已從保存庫層級挑選復原點,並以 --source-datastore 作為 VaultStore,請在還原設定中提供儲存體帳戶和快照集資源群組。
如果您嘗試還原至次要區域中的叢集,請將 旗標 --restore-location 設定為次要區域的名稱,並 --source-datastore 設定為 VaultStore。
現在,您可以根據需求更新 JSON 物件,然後執行下列命令來驗證物件:
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。
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
此命令會檢查 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
注意
在還原作業期間,備份保存庫和 AKS 叢集必須獲派特定角色來執行還原:
- 「目標 AKS」叢集應該具有「快照集資源群組」上的「參與者」角色。
- 附加至備份延伸模組的「使用者身分識別」,應該要在「儲存體帳戶」(其為備份在作業層級情況下的儲存所在) 上具有「儲存體 Blob 資料參與者角色」,以及在「暫存儲存體帳戶」(其為備份在保存庫層級情況下的儲存所在) 上具有儲存體 Blob 資料參與者角色。
- 在從作業層級還原的情況下,「備份保存庫」在「目標 AKS 叢集」和「快照集資源群組」上應該要具有「讀者」角色。
- 在從保存庫層級還原備份的情況下,「備份保存庫」在「暫存資源群組」上應具有「參與者」角色。
- 在從保存庫層級還原備份的情況下,「備份保存庫」在「暫存儲存體帳戶」上應具有「儲存體帳戶參與者」和「儲存體 Blob 資料擁有者」角色。
觸發還原
角色指派完成後,您應該再次驗證還原物件。 之後,您可以執行下列命令來觸發還原作業:
az dataprotection backup-instance restore trigger --backup-instance-name $backupinstancename --restore-request-object restorerequestobject.json
如果目標叢集位於次要區域中,請使用 旗標 --use-secondary-region。
az dataprotection backup-instance restore trigger --backup-instance-name $backupinstancename --restore-request-object restorerequestobject.json --use-secondary-region true
注意
在暫存資源群組和儲存體帳戶中解除凍結的資源不會在還原作業完成後自動清除,且需要手動刪除。
追蹤作業
您可以使用 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