Share via


Azure CLI を使用して Azure Kubernetes Service を復元する

この記事では、Azure CLI を使用して、Azure Backup で作成された復元ポイントから Azure Kubernetes クラスターを復元する方法について説明します。

Azure Backup では、クラスターにインストールする必要があるバックアップ拡張機能を使用して、AKS クラスター (クラスター リソースとクラスターにアタッチされている永続ボリューム) をバックアップできるようになりました。 バックアップ コンテナーは、このバックアップ拡張機能を介してクラスターと通信し、バックアップ操作と復元操作を実行します。

"元の場所への復旧 (OLR)" (バックアップされた AKS クラスターでの復元) と "代替場所への復旧 (ALR)" (別の AKS クラスターでの復元) の両方を実行できます。 項目レベルの復旧 (ILR) バックアップから、復元する項目を選ぶこともできます。

注意

復元操作を開始する前に、ターゲット クラスターにバックアップ拡張機能がインストールされ、Backup ボールトに対して信頼されたアクセスが有効になっている必要があります。 詳細については、こちらを参照してください

開始する前に

  • AKS バックアップを使用すると、(バックアップされた) 元の AKS クラスターおよび代替 AKS クラスターに復元できます。 AKS バックアップでは、完全復元と項目レベルの復元を実行できます。 復元構成を使用して、復元中に取得されるクラスター リソースに基づいてパラメーターを定義できます。

  • ターゲット AKS クラスターにバックアップ拡張機能をインストールする必要があります。 また、Backup コンテナーと 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

信頼されたアクセスを確認する

Backup コンテナーとターゲット 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 

注意

復元操作中、Backup ボールトと AKS クラスターには、復元を実行するために特定のロールが割り当てられている必要があります。

  1. "ターゲット AKS" クラスターには、"スナップショット リソース グループ" に対する "共同作成者" ロールが必要です。
  2. バックアップ拡張機能にアタッチされている "ユーザー ID" には、バックアップが格納されている "ストレージ アカウント" に対する "ストレージ アカウント共同作成者" ロールが必要です。
  3. "Backup ボールト" には、"ターゲット 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

次のステップ