你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

使用 Azure CLI 还原 Azure Kubernetes 服务

本文介绍如何使用 Azure CLI 从 Azure 备份创建的还原点还原 Azure Kubernetes 群集。

Azure 备份现在允许使用备份扩展(必须在群集中安装)备份 AKS 群集(群集资源和附加到群集的永久性卷)。 备份保管库通过此备份扩展与群集通信,以执行备份和还原操作。

可以执行原始位置恢复 (OLR)(在备份的 AKS 群集中还原)和备用位置恢复 (ALR)(在其他 AKU 群集中还原)。 还可以选择要从项目级 (ILR) 的备份中还原的项。

注意

在启动还原操作之前,目标群集应安装备份扩展并为备份保管库启用受信任访问。 了解详细信息

开始之前

  • 使用 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

准备还原请求

使用 az dataprotection backup-instance initialize-restoreconfig 命令准备还原配置,定义要还原到目标 AKS 群集的项。

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

后续步骤