Wiederherstellen von Azure Kubernetes Service mithilfe der Azure CLI
In diesem Artikel wird beschrieben, wie Sie Azure Kubernetes-Cluster aus einem von Azure Backup erstellten Wiederherstellungspunkt mithilfe der Azure CLI wiederherstellen.
Mit Azure Backup können Sie jetzt AKS-Cluster (Clusterressourcen und an den Cluster angefügte persistente Volumes) mithilfe einer Sicherungserweiterung sichern. Diese Erweiterung muss im Cluster installiert werden. Der Backup-Tresor kommuniziert mit dem Cluster über diese Sicherungserweiterung, um Sicherungs- und Wiederherstellungsvorgänge durchzuführen.
Sie können sowohl eine Wiederherstellung in dem ursprünglichen AKS-Cluster, der gesichert wurde (Original-Location Recovery, OLR) als auch eine Wiederherstellung in einem anderen AKS-Cluster (Alternate-Location Recovery, ALR) durchführen. Sie können auch die wiederherzustellenden Elemente aus der Sicherung auswählen. Dies wird als Wiederherstellung auf Elementebene (Item-Level Wiederherstellung, ILR) bezeichnet.
Hinweis
Bevor Sie einen Wiederherstellungsvorgang initiieren, muss im Zielcluster die Sicherungserweiterung installiert und der vertrauenswürdige Zugriff für den Sicherungstresor aktiviert sein. Weitere Informationen
Vorbereitung
Die AKS-Sicherung ermöglicht die Wiederherstellung auf den ursprünglichen AKS-Cluster (der gesichert wurde) und auf einen alternativen AKS-Cluster. Mit der AKS-Sicherung können Sie eine vollständige Wiederherstellung und Wiederherstellung auf Elementebene durchführen. Sie können Wiederherstellungskonfigurationen verwenden, um Parameter basierend auf den wiederhergestellten Clusterressourcen zu definieren.
Sie müssen die Sicherungserweiterung im AKS-Zielcluster installieren. Außerdem müssen Sie den vertrauenswürdigen Zugriff zwischen dem Sicherungstresor und dem AKS-Cluster aktivieren.
Wenn sich die Version des AKS-Zielclusters von der während des Sicherungsvorgangs verwendeten Version unterscheidet, ist der Wiederherstellungsvorgang u. U. nicht erfolgreich oder wird mit Warnungen für verschiedene Szenarien (etwa veraltete Ressourcen in der neueren Clusterversion) abgeschlossen. Beim Wiederherstellen von der Tresorebene können Sie die aktualisierten Ressourcen am Stagingspeicherort verwenden, um Anwendungsressourcen im Zielcluster wiederherzustellen.
Weitere Informationen zu den Einschränkungen und unterstützten Szenarien finden Sie in der Supportmatrix.
Überprüfen und Vorbereiten des AKS-Zielclusters
Bevor Sie einen Wiederherstellungsvorgang initiieren, müssen Sie überprüfen, ob der AKS-Cluster für die Wiederherstellung vorbereitet ist. Es umfasst die Installation der Sicherungserweiterung, wobei die Erweiterung über die Berechtigung für das Speicherkonto verfügt, in dem Sicherungen gespeichert/aktualisiert werden. Außerdem ist der vertrauenswürdige Zugriff zwischen AKS-Zielcluster und Sicherungstresor aktiviert.
Überprüfen Sie zunächst, ob die Sicherungserweiterung im Cluster installiert ist, indem Sie den folgenden Befehl ausführen:
az k8s-extension show --name azure-aks-backup --cluster-type managedClusters --cluster-name $targetakscluster --resource-group $aksclusterresourcegroup
Wenn die Erweiterung installiert ist, überprüfen Sie, ob sie über die richtigen Berechtigungen für das Speicherkonto verfügt, in dem Sicherungen gespeichert sind:
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)
Wenn die Rolle nicht zugewiesen ist, können Sie die Rolle zuweisen, indem Sie den folgenden Befehl ausführen:
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
Wenn die Sicherungserweiterung nicht installiert ist, führen Sie den folgenden Erweiterungsinstallationsbefehl mit dem Speicherkonto und dem Blobcontainer aus, in dem Sicherungen als Eingabe gespeichert werden.
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
Weisen Sie dann der Erweiterung die erforderliche Rolle für das Speicherkonto zu, indem Sie den folgenden Befehl ausführen:
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
Überprüfen des vertrauenswürdigen Zugriffs
Führen Sie den folgenden Befehl aus, um zu überprüfen, ob der vertrauenswürdige Zugriff zwischen dem Sicherungstresor und dem AKS-Zielcluster aktiviert ist:
az aks trustedaccess rolebinding list --resource-group $aksclusterresourcegroup --cluster-name $targetakscluster
Falls nicht, kann der vertrauenswürdige Zugriff mit dem folgenden Befehl aktiviert werden:
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
Wiederherstellen in einem AKS-Cluster
Holen Sie den entsprechenden Wiederherstellungspunkt
Rufen Sie alle Instanzen ab, die dem AKS-Cluster zugeordnet sind, und identifizieren Sie die relevante Instanz.
az dataprotection backup-instance list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster
Rufen Sie den entsprechenden Wiederherstellungspunkt ab, sobald die Instanz identifiziert wurde.
az dataprotection recovery-point list --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --vault-name $backupvault
Falls Sie Sicherungen in der sekundären Region wiederherstellen möchten, verwenden Sie das Flag --use-secondary-region
, um die in dieser Region verfügbaren Wiederherstellungspunkte zu identifizieren.
az dataprotection recovery-point list --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --vault-name $backupvault --use-secondary-region true
Vorbereiten der Wiederherstellungsanforderung
Führen Sie den Befehl az dataprotection backup-instance initialize-restoreconfig
aus, um die Wiederherstellungskonfiguration vorzubereiten und die Elemente zu definieren, die im AKS-Zielcluster wiederhergestellt werden sollen.
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
}
Die Wiederherstellungskonfiguration besteht aus folgenden Elementen:
conflict_policy
: Wenn während einer Wiederherstellung im Cluster eine Ressource mit demselben Namen wie in der Sicherung vorhanden ist, können Sie auswählen, wie der Konflikt behandelt werden soll. Sie haben zwei Optionen: Überspringen, wodurch das Sicherungselement nicht wiederhergestellt wird, oder Aktualisieren, wodurch die veränderbaren Felder der clusterinternen Ressource mit der in der Sicherung gespeicherten Ressource geändert werden.excluded_namespace
: Sie können die Namespaces auflisten, die von der Wiederherstellung im Cluster ausgeschlossen werden sollen. Die Ressource, die diesen Namespaces zugrunde liegt, wird nicht wiederhergestellt.excluded_resource_types
: Sie können die Ressourcentypen auflisten, die von der Wiederherstellung im Cluster ausgeschlossen werden sollen. Die Werte in der Eingabe sollten als Schlüssel-Wert-Paar für den API-Gruppentyp bereitgestellt werden.include_cluster_scope_resources
: Sie können entscheiden, ob Sie clusterbezogene Ressourcen wiederherstellen möchten oder nicht, indem Sie den Wert auf „true“ oder „false“ festlegen.included_namespaces
: Sie können die Namespaces auflisten, die nur im Rahmen der Wiederherstellung des Clusters eingeschlossen werden sollen. Die Ressource, die diesen Namespaces zugrunde liegt, soll wiederhergestellt werden.excluded_resource_types
: Sie können die Ressourcentypen auflisten, die nur für die Wiederherstellung in den Cluster eingeschlossen werden sollen. Die Werte in der Eingabe sollten als Schlüssel-Wert-Paar für den API-Gruppentyp bereitgestellt werden.label_selectors
: Sie können wiederherzustellende Ressourcen mit bestimmten Bezeichnungen darin auswählen. Der Eingabewert sollte als Schlüssel-Wert-Paar angegeben werden.namespace_mappings
: Sie können Namespace (und zugrunde liegende Ressourcen) einem anderen Namespace im Zielcluster zuordnen. Wenn der Zielnamespace nicht im Cluster vorhanden ist, wird von der Erweiterung ein neuer Namespace erstellt. Der Eingabewert sollte als Schlüssel-Wert-Paar angegeben werden.persistent_volume_restore_mode
: Sie können diese Variable verwenden, um zu entscheiden, ob Sie die persistenten Volumes, die gesichert wurden, wiederherstellen möchten. Akzeptierte Werte sind „RestoreWithVolumeData“ und „RestoreWithoutVolumeData“.resource_modifier_reference
: Mit dieser Variablen können Sie auf die im Cluster bereitgestellte Ressourcenmodifiziererressource verweisen. Der Eingabewert ist ein Schlüssel-Wert-Paar des Namespace, in dem die Ressource bereitgestellt wird, und der Name der YAML-Datei.restore_hook_references
: Mit dieser Variablen können Sie auf die im Cluster bereitgestellte Ressource für den Wiederherstellungs-Hook verweisen. Der Eingabewert ist ein Schlüssel-Wert-Paar des Namespace, in dem die Ressource bereitgestellt wird, und der Name der YAML-Dateien.staging_resource_group_id
: Falls Sie die Sicherung wiederherstellen, die in der Tresorebene gespeichert ist, müssen Sie eine Ressourcengruppen-ID als Stagingspeicherort angeben. In dieser Ressourcengruppe werden die gesicherten persistenten Volumes aktualisiert, bevor sie im Zielcluster wiederhergestellt werden.staging_storage_account_id
: Falls Sie die Sicherung wiederherstellen, die in der Tresorebene gespeichert ist, müssen Sie eine Speicherkonto-ID als Stagingspeicherort angeben. In dieser Ressourcengruppe werden die gesicherten Kubernetes-Ressourcen aktualisiert, bevor sie im Zielcluster wiederhergestellt werden.
Bereiten Sie nun die Wiederherstellungsanforderung mit allen relevanten Details vor. Wenn Sie die Sicherung im ursprünglichen Cluster wiederherstellen, führen Sie den folgenden Befehl aus:
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
Wenn sich der AKS-Zielcluster für die Wiederherstellung vom ursprünglichen Cluster unterscheidet, führen Sie den folgenden Befehl aus:
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
Hinweis
Falls Sie einen Wiederherstellungspunkt in der Tresorebene mit --source-datastore
als „VaultStore“ ausgewählt haben, geben Sie ein Speicherkonto und eine Momentaufnahme-Ressourcengruppe in der Wiederherstellungskonfiguration an.
Falls Sie die Wiederherstellung im Cluster in der sekundären Region ausführen möchten, legen Sie das Flag --restore-location
als Namen der sekundären Region und --source-datastore
für „VaultStore“ fest.
Nun können Sie das JSON-Objekt gemäß Ihren Anforderungen aktualisieren und dann das Objekt überprüfen, indem Sie den folgenden Befehl ausführen:
az dataprotection backup-instance validate-for-restore --backup-instance-name $backupinstancename --resource-group $backupvaultresourcegroup --restore-request-object restorerequestobject.json --vault-name $backupvault
Mit diesem Befehl wird überprüft, ob der AKS-Cluster und der Sicherungstresor über die erforderlichen Rollen für unterschiedliche Ressourcen verfügen, die zum Wiederherstellen erforderlich sind. Wenn die Überprüfung aufgrund fehlender Rollen fehlschlägt, können Sie diese zuweisen, indem Sie den folgenden Befehl ausführen:
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
Hinweis
Während des Wiederherstellungsvorgangs müssen der Sicherungstresor und der AKS-Cluster über bestimmte Rollenzuweisungen verfügen, um die Wiederherstellung durchzuführen:
- Der AKS-Zielcluster sollte in der Momentaufnahmeressourcengruppe die Rolle Mitwirkender haben.
- Bei der Wiederherstellung von der Betriebsebene sollte die mit der Sicherungserweiterung angefügte Benutzeridentität für das Speicherkonto, in dem Sicherungen gespeichert werden, über die Rolle Mitwirkender des Speicherkontos verfügen, und bei der Wiederherstellung von der Tresorebene für das *Stagingspeicherkonto.
- Bei der Wiederherstellung von der Betriebsebene sollte der Sicherungstresor für den AKS-Zielcluster und die Momentaufnahme-Ressourcengruppe die Rolle Leser besitzen.
- Bei der Wiederherstellung von der Tresorebene sollte der Sicherungstresor für die Stagingressourcengruppe die Rolle Mitwirkender besitzen.
- Bei der Wiederherstellung von der Tresorebene sollte der Sicherungstresor für die Stagingressourcengruppe die Rolle Speicherkontomitwirkender und Besitzer von Speicherblobdaten besitzen.
Auslösen des Wiederherstellungsvorgangs
Sobald die Rollenzuweisung abgeschlossen ist, sollten Sie das Wiederherstellungsobjekt noch einmal überprüfen. Anschließend können Sie einen Wiederherstellungsvorgang auslösen, indem Sie den folgenden Befehl ausführen:
az dataprotection backup-instance restore trigger --backup-instance-name $backupinstancename --restore-request-object restorerequestobject.json
Hinweis
Die in der Stagingressourcengruppe und im Speicherkonto aktualisierten Ressourcen werden nach Abschluss des Wiederherstellungsauftrags nicht automatisch bereinigt und müssen manuell gelöscht werden.
Aufträge nachverfolgen
Sie können die Wiederherstellungsaufträge mithilfe des Befehls az dataprotection job
nachverfolgen. Sie können alle Aufträge auflisten und ein bestimmtes Auftragsdetail abrufen.
Sie können auch Resource Graph verwenden, um alle Aufträge in allen Abonnements, Ressourcengruppen und Sicherungstresoren nachzuverfolgen. Verwenden Sie den Befehl az dataprotection job list-from-resourcegraph
, um den entsprechenden Auftrag abzurufen.
az dataprotection job list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster --operation Restore