Восстановление Служба Azure Kubernetes с помощью Azure CLI

В этой статье описывается восстановление кластера Azure Kubernetes из точки восстановления, созданной Azure Backup с помощью Azure CLI.

Azure Backup теперь позволяет создавать резервные копии кластеров AKS (ресурсы кластера и постоянные тома, подключенные к кластеру) с помощью расширения резервного копирования, которое должно быть установлено в кластере. Хранилище резервных копий взаимодействует с кластером с помощью этого расширения резервного копирования для выполнения операций резервного копирования и восстановления.

Вы можете выполнить восстановление исходного расположения (OLR) (восстановление в кластере AKS, который был резервирован) и Альтернативное восстановление расположения (ALR) (восстановление в другом кластере AKS). Вы также можете выбрать элементы, которые нужно восстановить из резервной копии, которая является восстановлением на уровне элементов (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

Проверка доверенного доступа

Чтобы проверка, если доверенный доступ включен между хранилищем резервного копирования и кластером Target 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

Следующие шаги