PowerShell を使用して Azure Kubernetes Service をバックアップする
この記事では、Azure PowerShell を使用して Azure Kubernetes Service (AKS) の構成とバックアップを行う方法について説明します。
Azure Backup では、クラスターにインストールする必要があるバックアップ拡張機能を使用して、AKS クラスター (クラスター リソースとクラスターにアタッチされている永続ボリューム) をバックアップできるようになりました。 バックアップ コンテナーは、このバックアップ拡張機能を介してクラスターと通信し、バックアップ操作と復元操作を実行します。
開始する前に
AKS クラスターのバックアップを開始する前に、次の前提条件を必ず確認してください。
現在、AKS のバックアップでは、Azure Disk ベースの永続ボリューム (CSI ドライバーによって有効) のみがサポートされています。 バックアップは運用データストア (テナント内) にのみ保存され、コンテナーには移動されません。 バックアップ コンテナーと AKS クラスターは、同じリージョンに存在する必要があります。
AKS バックアップでは、BLOB コンテナーとリソース グループを使用してバックアップを格納します。 BLOB コンテナーには AKS クラスター リソースが格納されていますが、永続ボリューム スナップショットはリソース グループに格納されます。 AKS クラスターとストレージの場所は、同じリージョンに存在する必要があります。 BLOB コンテナーの作成方法についてはこちらを参照してください。
現在、AKS バックアップでは 1 日 1 回のバックアップがサポートされています。 また、1 日あたりのバックアップの頻度が高くなります (4、8、12 時間ごと)。 このソリューションを使用すると、データを復元用に最大 360 日間保持することができます。 バックアップ ポリシーの作成方法についてはこちらを参照してください。
バックアップ拡張機能をインストールして、AKS クラスターでバックアップ操作と復元操作を構成する必要があります。 バックアップ拡張機能の詳細についてはこちらを参照してください。
バックアップの構成と復元の操作を開始する前に、
Microsoft.KubernetesConfiguration
、Microsoft.DataProtection
、およびMicrosoft.ContainerService
がサブスクリプションに登録されていることを確認します。AKS バックアップのバックアップや復元操作を開始する前に、すべての前提条件を実行してください。
サポートされているシナリオ、制限事項、可用性の詳細については、サポート マトリックスを参照してください。
バックアップ コンテナーの作成
Backup コンテナーは、Azure Database for PostgreSQL サーバーや Azure ディスクなど、Azure Backup によってサポートされるさまざまな新しいワークロードのバックアップ データを保存する Azure の管理エンティティです。 Backup コンテナーを使用すると、管理オーバーヘッドを最小限に抑えながら、バックアップ データを簡単に整理できます。 それらは、Azure Resource Manager モデルに基づいており、バックアップ データの保護に役立つ、強化された機能を提供します。 Backup コンテナーを作成する前に、コンテナー内のデータのストレージ冗長性を選択し、そのストレージ冗長性と場所を使用して Backup コンテナーを作成します。
ここでは、リソース グループ "testBkpVaultRG" の "米国西部" リージョンに Backup コンテナー "TestBkpVault" を作成します。 New-AzDataProtectionBackupVault
コマンドレットを使用して Backup コンテナーを作成します。 詳細については、「バックアップ コンテナーの作成」を参照してください。
注意
選択したコンテナーには "グローバル冗長" 設定がある場合がありますが、現時点で AKS のバックアップでは "運用レベル" のみがサポートされています。 すべてのバックアップは、AKS クラスターと同じリージョンのサブスクリプションに保存され、Backup コンテナーのストレージにはコピーされません。
Backup コンテナーのストレージ設定を定義するには、次のコマンドレットを実行します。
注意
コンテナーは、"ローカル冗長" と "運用データ ストア" のサポートのみを使用して作成されます。
$storageSetting = New-AzDataProtectionBackupVaultStorageSettingObject -Type LocallyRedundant -DataStoreType OperationalStore
前述の詳細に従って Backup コンテナーを作成するには、次のコマンドレットを実行します。
New-AzDataProtectionBackupVault -ResourceGroupName testBkpVaultRG -VaultName TestBkpVault -Location westus -StorageSetting $storageSetting $TestBkpVault = Get-AzDataProtectionBackupVault -VaultName TestBkpVault
コンテナーの作成が完了したら、AKS クラスターを保護するバックアップ ポリシーを作成します。
バックアップ ポリシーの作成
Azure Backup を使用すると、毎日バックアップまたは 1 日あたり複数のバックアップを使用して AKS クラスター保護のバックアップ ポリシーを作成できます。
AKS クラスターのバックアップ ポリシーを作成するには、次のコマンドレットを実行します。
コマンドレット
Get-AzDataProtectionPolicyTemplate
を使用してポリシー テンプレートをフェッチし、AKS のバックアップ用のバックアップ ポリシーの内部コンポーネントを確認します。 このコマンドにより、指定されたデータソースの種類の既定のポリシー テンプレートが返されます。 このポリシー テンプレートを使用して、新しいポリシーを作成します。$policyDefn = Get-AzDataProtectionPolicyTemplate -DatasourceType AzureKubernetesService
ポリシー テンプレートは、トリガー条件 (バックアップ ジョブをトリガーする要因を決定する) とライフサイクル (バックアップを削除、コピー、または移動するタイミングを決定する) で構成されます。 AKS バックアップでは、トリガーの既定値は、"4 時間ごと (PT4H)" にスケジュールされた時間単位のトリガーであり、各バックアップのリテンション期間は "7日間" です。
$policyDefn.PolicyRule[0]. Trigger | fl ObjectType: ScheduleBasedTriggerContext ScheduleRepeatingTimeInterval: {R/2023-04-05T13:00:00+00:00/PT4H} TaggingCriterion: {Default} $policyDefn.PolicyRule[1]. Lifecycle | fl DeleteAfterDuration: P7D DeleteAfterObjectType: AbsoluteDeleteOption SourceDataStoreObjectType : DataStoreInfoBase SourceDataStoreType: OperationalStore TargetDataStoreCopySetting:
毎日バックアップ頻度では、バックアップを作成する "時刻" を指定できます。
重要
この時刻は、バックアップが完了する時刻ではなく、バックアップの開始時刻を示しています。 バックアップ操作を完了するために必要な時間は、永続ボリュームの数およびサイズや連続するバックアップ間のチャーン率など、さまざまな要因によって異なります。
AKS のバックアップでは、1 日に複数のバックアップが提供されます。 バックアップは、より頻繁なバックアップが必要な場合は、"4"、"6"、"8"、または "12" 時間ごとの間隔でバックアップを実行できる "時間単位のバックアップ頻度" を選択して、1 日に均等に分散されます。 選択した "[期間]" に基づいてバックアップがスケジュールされます。 たとえば、"[4 時間ごと]" を選択した場合、ほぼ "4 時間ごと" の間隔でバックアップが作成されます。
時間単位の頻度または保持期間を編集する場合は、
Edit-AzDataProtectionPolicyTriggerClientObject
やEdit-AzDataProtectionPolicyRetentionRuleClientObject
コマンドレットを使用します。 ポリシー オブジェクトに必要な値をすべて設定したら、New-AzDataProtectionBackupPolicy
コマンドレットを使用したポリシー オブジェクトからの新しいポリシーの作成を開始します。New-AzDataProtectionBackupPolicy -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Name aksBkpPolicy -Policy $policyDefn $aksBkpPol = Get-AzDataProtectionBackupPolicy -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Name "aksBkpPolicy"
バックアップ用に AKS クラスターを準備する
コンテナーとポリシーの作成が完了したら、AKS クラスターのバックアップの準備を整えるために、次の前提条件を実行する必要があります。
ストレージ アカウントと BLOB コンテナーを作成する
AKS のバックアップでは、Kubernetes リソースがバックアップとして BLOB コンテナーに保存されます。 AKS クラスターのバックアップの準備を整えるには、クラスターに拡張機能をインストールする必要があります。 この拡張機能には、ストレージ アカウントと BLOB コンテナーが入力として必要です。
新しいストレージ アカウントと BLOB コンテナーを作成するには、 次の手順を参照してください。
注意
- ストレージ アカウントと AKS クラスターは、同じリージョンとサブスクリプションに存在する必要があります。
- BLOB コンテナーには、以前に作成したファイル システムを含めることはできません (AKS のバックアップによって作成された場合を除く)。
- ソースまたはターゲットの AKS クラスターがプライベート仮想ネットワーク内にある場合は、ストレージ アカウントを AKS クラスターに接続するために、プライベート エンドポイントを作成する必要があります。
バックアップ拡張機能をインストールする
バックアップと復元の操作を実行するには、AKS クラスターに Backup 拡張機能をインストールする必要があります。 Backup 拡張機能は、クラスター内に名前空間
dataprotection-microsoft
を作成し、同じものを使用してそのリソースをデプロイします。 この拡張機能には、インストール用の入力としてストレージ アカウントと BLOB コンテナーが必要です。 拡張機能のインストール コマンドについて説明します。拡張機能のインストールの一環として、AKS クラスターのノード プールのリソース グループにユーザー ID が作成されます。 拡張機能がストレージ アカウントにアクセスするには、この ID に ストレージ アカウント共同作成者ロールを指定する必要があります。 必要なロールを割り当てるには、次のコマンドを実行します。
信頼されたアクセスを有効にする
Backup コンテナーが AKS クラスターに接続するには、Backup コンテナーが AKS クラスターに直接接続できるように、信頼されたアクセスを有効にする必要があります。 信頼されたアクセスを有効にする方法について確認してください。
Note
Backup 拡張機能のインストールと信頼されたアクセスの有効化の場合、コマンドは Azure CLI でのみ使用できます。
バックアップを構成する
作成された Backup コンテナーおよびバックアップ ポリシーと、AKS クラスターを "バックアップを行える" 状態にして、AKS クラスターのバックアップを開始できるようになりました。
主なエンティティ
保護する AKS クラスター
保護する AKS クラスターの Azure Resource Manager ID をフェッチします。 これは、クラスターの識別子として機能します。 この例では、別のサブスクリプションで、リソース グループ "aksrg" の下で "PSTestAKSCluster" という名前の AKS クラスターを使用します。
$sourceClusterId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/aksrg /providers/Microsoft.ContainerService/managedClusters/ PSTestAKSCluster "
スナップショット リソース グループ
永続ボリューム スナップショットは、サブスクリプションのリソース グループに保存されます。 Azure Backup サービスで使用されるスナップショット データストアとして専用のリソース グループを作成することをお勧めします。 専用のリソース グループを使用すると、リソース グループに対するアクセス許可を制限できるため、バックアップ データを安全かつ簡単に管理できます。 永続ボリューム スナップショットを保存する場所に、リソース グループの Azure Resource Manager ID を保存します。
$snapshotrg = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx/resourcegroups/snapshotrg"
要求を準備する
バックアップの構成は、次の 2 つの手順で実行されます。
New-AzDataProtectionBackupConfigurationClientObject
コマンドレットを使用して、バックアップするクラスター リソースを定義するために、バックアップ構成を準備します。 次の例では、現在および将来の名前空間でのすべてのクラスター リソースがkey-value pair x=y
というラベルでバックアップされるように、構成が定義されます。 また、クラスター スコープのすべてのリソースと永続ボリュームがバックアップされます。 名前空間 kube-system、kube-node-lease、kube-public はバックアップ構成でスキップされ、バックアップ対象として構成されません。$backupConfig = New-AzDataProtectionBackupConfigurationClientObject -SnapshotVolume $true -IncludeClusterScopeResource $true -DatasourceType AzureKubernetesService -LabelSelector "env=prod"
Initialize-AzDataProtectionBackupInstance
コマンドレットを使用して、関連するコンテナー、ポリシー、AKS クラスター、バックアップ構成、スナップショットリソース グループを使用する、関連する要求を準備します。$backupInstance = Initialize-AzDataProtectionBackupInstance -DatasourceType AzureKubernetesService -DatasourceLocation $dataSourceLocation -PolicyId $ aksBkpPol.Id -DatasourceId $sourceClusterId -SnapshotResourceGroupId $ snapshotrg -FriendlyName $friendlyName -BackupConfiguration $backupConfig
必要なアクセス許可を割り当てて検証する
必要なアクセス許可を割り当て、AKS クラスター保護の検証を実行するには、次のコマンドレットを実行します。
要求を準備したら、Azure ロールベースのアクセス制御 (Azure RBAC) を介した、コンテナー (コンテナーマネージド システム ID で表される) と AKS クラスターに対する、必要なアクセス許可をユーザーに割り当てる必要があります。 これは、
Set-AzDataProtectionMSIPermission
コマンドレットを使用して実行できます。 バックアップ コンテナーは、マネージド ID を使用して他の Azure リソースにアクセスします。 AKS クラスターのバックアップを構成するには、Backup コンテナーのマネージド ID に、スナップショットが作成および管理されるAKS クラスターとリソース グループに対する一連のアクセス許可を付与する必要があります。 また、AKS クラスターには、スナップショット リソース グループに対するアクセス許可が必要です。Note
現在、バックアップ (Backup コンテナーと AKS クラスターの両方) では、システム割り当てマネージド ID のみがサポートされています。 システム割り当てマネージド ID は、1 つのリソースにつき 1 つに限定されており、このリソースのライフサイクルに関連付けられています。 Azure RBAC を使用して、マネージド ID にアクセス許可を付与できます。 マネージド ID は、Azure リソースでのみ使用できる、特殊な種類のサービス プリンシパルです。 マネージド IDの詳細を確認してください。
Set-AzDataProtectionMSIPermission -BackupInstance $backupInstance -VaultResourceGroup $rgName -VaultName $vaultName -PermissionsScope "ResourceGroup"
アクセス許可が割り当てられたら、作成されたインスタンスの準備状況をテストします。
test-AzDataProtectionBackupInstanceReadiness -ResourceGroupName $resourceGroupName -VaultName $vaultName -BackupInstance $backupInstance.Property
検証が成功したら、
New-AzDataProtectionBackupInstance
コマンドレットを使用して AKS クラスターを保護する要求を送信します。New-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupInstance $backupInstance
オンデマンド バックアップを実行する
オンデマンド バックアップをトリガーするには、次のコマンドレットを実行します。
Get-AzDataProtectionBackupInstance
コマンドレットを実行して、バックアップをトリガーする、関連するバックアップ インスタンスをフェッチします。$instance = Get-AzDataProtectionBackupInstance -SubscriptionId "xxxx-xxx-xxx" -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -Name "BackupInstanceName"
バックアップのトリガー中に、保持ルールを指定します。 ポリシーの保持ルールを表示するには、ポリシー オブジェクト内を移動して保持ルールを探します。 下の例では、"default" という名前のルールが表示されています。このルールをオンデマンド バックアップに使用します。
$policyDefn.PolicyRule | fl BackupParameter: Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.AzureBackupParams BackupParameterObjectType: AzureBackupParams DataStoreObjectType: DataStoreInfoBase DataStoreType: OperationalStore Name: BackupHourly ObjectType: AzureBackupRule Trigger: Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.ScheduleBasedTriggerContext TriggerObjectType: ScheduleBasedTriggerContext IsDefault: True Lifecycle: {Microsoft.Azure.PowerShell.Cmdlets.DataProtection.Models.Api20210201Preview.SourceLifeCycle} Name: Default ObjectType: AzureRetentionRule
Backup-AzDataProtectionBackupInstanceAdhoc
コマンドレットを使用してオンデマンド バックアップをトリガーします。$AllInstances = Get-AzDataProtectionBackupInstance -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name Backup-AzDataProtectionBackupInstanceAdhoc -BackupInstanceName $AllInstances[0].Name -ResourceGroupName "testBkpVaultRG" -VaultName $TestBkpVault.Name -BackupRuleOptionRuleName "Default"
ジョブの追跡
Get-AzDataProtectionJob
コマンドレットを使用して、すべてのジョブを追跡します。 すべてのジョブを一覧表示し、特定のジョブの詳細を取得できます。 Az.ResourceGraph
コマンドレットを使用して、すべての Backup コンテナーでのすべてのジョブを追跡することもできます。 Search-AzDataProtectionJobInAzGraph
コマンドレットを使用して、Backup コンテナーから関連するジョブの詳細を取得します。
$job = Search-AzDataProtectionJobInAzGraph -Subscription $sub -ResourceGroupName "testBkpVaultRG" -Vault $TestBkpVault.Name -DatasourceType AzureKubernetesService -Operation OnDemandBackup