使用 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 叢集與備份保存庫之間啟用信任存取。
首先,執行下列命令,檢查是否已在叢集中安裝備份延伸模組:
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 叢集相關聯的所有執行個體,並識別相關的執行個體。
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
:您可以將命名空間(和基礎資源)對應至目標叢集中的不同命名空間。 如果目標命名空間不存在於叢集中,則擴充功能會建立新的命名空間。 輸入值應提供為索引鍵值組。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
注意
如果您已從保存 --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
此命令會檢查 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 數據參與者角色,其中備份會儲存在作業層,以及在保存庫層的情況下儲存在 *預備記憶體帳戶上。
- 如果從操作層還原,備份保存庫應該在目標 AKS 叢集和快照集資源群組上具有讀取者角色。
- 在從保存庫層還原備份時,備份保存庫應該在預備資源群組上具有參與者角色。
- 如果從保存庫層還原備份,備份保存庫應該在預備資源群組上具有記憶體帳戶參與者和記憶體 Blob 數據擁有者角色。
觸發還原
角色指派完成後,您應該再次驗證還原物件。 之後,您可以執行下列命令來觸發還原作業:
az dataprotection backup-instance restore trigger --backup-instance-name $backupinstancename --restore-request-object restorerequestobject.json
注意
暫存資源群組和記憶體帳戶中的資源不會在還原作業完成且要手動刪除之後自動清除。
追蹤作業
您可以使用 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