Восстановление Служба Azure Kubernetes с помощью Azure CLI
В этой статье описывается восстановление кластера Azure Kubernetes из точки восстановления, созданной Azure Backup с помощью Azure CLI. Вы также можете восстановить кластер AKS с помощью Azure PowerShell.
Azure Backup теперь позволяет создавать резервные копии кластеров AKS (ресурсы кластера и постоянные тома, подключенные к кластеру) с помощью расширения резервного копирования, которое должно быть установлено в кластере. Хранилище резервных копий взаимодействует с кластером с помощью этого расширения резервного копирования для выполнения операций резервного копирования и восстановления.
Вы можете выполнить восстановление исходного расположения (OLR) (восстановление в кластере AKS, который был резервирован) и Альтернативное восстановление расположения (ALR) (восстановление в другом кластере AKS). Вы также можете выбрать элементы, которые нужно восстановить из резервной копии, которая является восстановлением на уровне элементов (ILR).
Примечание.
Перед началом операции восстановления целевой кластер должен установить расширение резервного копирования и включить доверенный доступ для хранилища резервных копий. Подробнее.
Перед началом работы
Прежде чем приступить к восстановлению кластера AKS, ознакомьтесь со следующими сведениями:
Резервное копирование AKS позволяет восстановить исходный кластер 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
Проверка доверенного доступа
Чтобы проверить, включен ли доверенный доступ между хранилищем резервных копий и кластером 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 см. в следующих разделах.
Получение соответствующей точки восстановления
Чтобы получить соответствующую точку восстановления, выполните следующие команды:
Извлеките все экземпляры, связанные с кластером 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
: во время восстановления, если ресурс с тем же именем существует в кластере, что и в резервной копии, можно выбрать способ обработки конфликта. У вас есть два варианта: пропуск, который не восстановит элемент резервной копии или обновление, которое изменяет изменяемые поля ресурса в кластере с ресурсом, хранящимся в резервной копии.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
затем укажите учетную запись хранения и группу ресурсов моментальных снимков в конфигурации восстановления.
Если вы пытаетесь восстановить кластер в дополнительном регионе, установите флаг --restore-location
в качестве имени дополнительного региона и --source-datastore
в качестве хранилища.
Теперь можно обновить объект 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