次の方法で共有


Azure CLIを使用してAzure Kubernetes Serviceをバックアップする

この記事では、Azure CLIを使用してAzure Kubernetes Service (AKS)を構成およびバックアップする方法について説明します。 Azure PowerShellを使用して AKS をバックアップすることもできます。

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

開始する前に

  • 現在、AKS バックアップでは、Azure ディスクベースの永続ボリューム (CSI ドライバーによって有効) のみがサポートされています。 バックアップは運用データストア (テナント内) にのみ保存され、コンテナーには移動されません。 バックアップ コンテナーと AKS クラスターは、同じリージョンに存在する必要があります。

  • AKS バックアップでは、BLOB コンテナーとリソース グループを使用してバックアップを格納します。 BLOB コンテナーには AKS クラスター リソースが格納されていますが、永続ボリューム スナップショットはリソース グループに格納されます。 AKS クラスターとストレージの場所は、同じリージョンに存在する必要があります。 BLOB コンテナーの作成方法についてはこちらを参照してください。

  • 現在、AKS バックアップでは 1 日 1 回のバックアップがサポートされています。 また、1 日あたりのバックアップの頻度が高くなります (4812 時間ごと)。 このソリューションを使用すると、データを復元用に最大 360 日間保持することができます。 バックアップ ポリシーの作成方法についてはこちらを参照してください。

  • バックアップ拡張機能をインストールして、AKS クラスターでバックアップ操作と復元操作を構成する必要があります。 バックアップ拡張機能の詳細についてはこちらを参照してください。

  • バックアップの構成と復元操作を開始する前に、Microsoft.KubernetesConfigurationMicrosoft.DataProtection、および Microsoft.ContainerService がサブスクリプションに登録されていることを確認します。

  • AKS バックアップのバックアップや復元操作を開始する前に、すべての前提条件を実行してください。

サポートされているシナリオ、制限事項、可用性の詳細については、サポート マトリックスを参照してください。

バックアップ コンテナーの作成

Backup コンテナーは、Azureの管理エンティティであり、Azure Database for PostgreSQL サーバーやAzure ディスクなど、Azure Backupがサポートするさまざまな新しいワークロードのバックアップ データを格納します。 バックアップ コンテナーを使用すると、管理オーバーヘッドを最小限に抑えながら、バックアップ データを簡単に整理できます。 バックアップ コンテナーは、AzureのAzure Resource Manager モデルに基づいており、バックアップ データのセキュリティ保護に役立つ強化された機能が提供されます。

Backup コンテナーを作成する前に、コンテナー内のデータのストレージ冗長性を選択し、そのストレージ冗長性と場所を使用して Backup コンテナーを作成します。 詳細については、「バックアップ コンテナーの作成」を参照してください。

注意

選択したコンテナーには "グローバル冗長" 設定がある場合がありますが、現時点で AKS のバックアップでは "Operational Tier" のみがサポートされています。 すべてのバックアップは、AKS クラスターと同じリージョンのサブスクリプションに保存され、Backup コンテナーのストレージにはコピーされません。

Backup コンテナーを作成するには、次のコマンドを実行します。

az dataprotection backup-vault create --resource-group $backupvaultresourcegroup --vault-name $backupvault --location $region --type SystemAssigned --storage-settings datastore-type="VaultStore" type="LocallyRedundant"

保管庫の作成が完了したら、AKS クラスターを保護するバックアップ ポリシーを作成します。

バックアップ ポリシーの作成

AKS のバックアップ用のバックアップ ポリシーの内部コンポーネントを理解するには、コマンド az dataprotection backup-policy get-default-policy-template を使用してポリシー テンプレートを取得します。 このコマンドにより、指定されたデータソースの種類の既定のポリシー テンプレートが返されます。 このポリシー テンプレートを使用して、新しいポリシーを作成します。

az dataprotection backup-policy get-default-policy-template --datasource-type AzureKubernetesService > akspolicy.json


{
  "datasourceTypes": [
    "Microsoft.ContainerService/managedClusters"
  ],
  "name": "AKSPolicy1",
  "objectType": "BackupPolicy",
  "policyRules": [
    {
      "backupParameters": {
        "backupType": "Incremental",
        "objectType": "AzureBackupParams"
      },
      "dataStore": {
        "dataStoreType": "OperationalStore",
        "objectType": "DataStoreInfoBase"
      },
      "name": "BackupHourly",
      "objectType": "AzureBackupRule",
      "trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2023-01-04T09:00:00+00:00/PT4H"
          ]
        },
        "taggingCriteria": [
          {
            "isDefault": true,
            "tagInfo": {
              "id": "Default_",
              "tagName": "Default"
            },
            "taggingPriority": 99
          }
        ]
      }
    },
    {
      "isDefault": true,
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P7D",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "OperationalStore",
            "objectType": "DataStoreInfoBase"
          }
        }
      ],
      "name": "Default",
      "objectType": "AzureRetentionRule"
    }
  ]
}

ポリシー テンプレートは、トリガー条件 (バックアップ ジョブをトリガーする要因を決定する) とライフサイクル (バックアップを削除、コピー、または移動するタイミングを決定する) で構成されます。 AKS バックアップでは、トリガーの既定値は、"4 時間ごと (PT4H)" にスケジュールされた時間単位のトリガーであり、各バックアップのリテンション期間は "7日間" です。

Scheduled trigger:
      "trigger": {
        "objectType": "ScheduleBasedTriggerContext",
        "schedule": {
          "repeatingTimeIntervals": [
            "R/2023-01-04T09:00:00+00:00/PT4H"
          ]
        }
      }

Default retention lifecycle:
      "lifecycles": [
        {
          "deleteAfter": {
            "duration": "P7D",
            "objectType": "AbsoluteDeleteOption"
          },
          "sourceDataStore": {
            "dataStoreType": "OperationalStore",
            "objectType": "DataStoreInfoBase"
          }
        }
      ]


AKS のバックアップでは、1 日に複数のバックアップが提供されます。 頻繁にバックアップを行う必要がある場合は、468、または 12 時間の間隔でバックアップを作成できる [時間単位] のバックアップ頻度を選択します。 選択した 期間 に基づいてバックアップがスケジュールされます。

重要

この時刻は、バックアップが完了する時刻ではなく、バックアップの開始時刻を示しています。 バックアップ スケジュールは ISO 8601 期間形式に従います。 ただし、バックアップは無期限に実行するように構成されているため、繰り返し間隔プレフィックス R はサポートされていません。 Rで指定された値はすべて無視されます。

テンプレートを JSON ファイルとしてダウンロードしたら、必要に応じてスケジュールと保有期間を編集できます。 次に、結果の JSON を使用して新しいポリシーを作成します。 時間単位の頻度または保持期間を編集する場合は、az dataprotection backup-policy trigger setaz dataprotection backup-policy retention-rule set コマンドを使用します。

注意

コンテナー レベル にバックアップ データを格納して、コンプライアンス目的で長期的に保持するか、リージョン間の復元によるリージョンディザスター リカバリーのために保持するには、既定のテンプレートで、バックアップをコンテナーに格納する期間を定義する新しい保持ルールを定義する必要があります。

例えば、バックアップ ポリシーの既定テンプレートを更新し、コンテナー レベルその日の最初に成功したバックアップを 30 日間保持する保持するためのルールを追加します。

コマンド az dataprotection backup-policy retention-rule create-lifecycle を使用して保持ルールを作成し、`` コマンドを使用して保持ルールをバックアップ ポリシー テンプレートに追加します。


az dataprotection backup-policy retention-rule create-lifecycle  --count 30 --retention-duration-type Days --copy-option ImmediateCopyOption --target-datastore VaultStore --source-datastore OperationalStore > ./retentionrule.json

az dataprotection backup-policy retention-rule set --lifecycles ./retentionrule.json --name Daily --policy ./akspolicy.json > ./akspolicy.json

ポリシーの JSON に必要な値をすべて設定したら、az dataprotection backup-policy create コマンドを使用してポリシー オブジェクトから新しいポリシーを作成する手順に進みます。

az dataprotection backup-policy create -g testBkpVaultRG --vault-name TestBkpVault -n mypolicy --policy policy.json

バックアップ用に AKS クラスターを準備する

コンテナーとポリシーの作成が完了したら、AKS クラスターのバックアップの準備を整えるために、次の前提条件を実行する必要があります。

  1. ストレージ アカウントと BLOB コンテナーを作成します

    AKS のバックアップでは、Kubernetes リソースがバックアップとして BLOB コンテナーに保存されます。 AKS クラスターのバックアップの準備を整えるには、クラスターに拡張機能をインストールする必要があります。 この拡張機能には、ストレージ アカウントと BLOB コンテナーが入力として必要です。

    新しいストレージ アカウントを作成するには、次のコマンドを実行します。

    az storage account create --name $storageaccount --resource-group $storageaccountresourcegroup --location $region --sku Standard_LRS
    

    ストレージ アカウントの作成が完了したら、次のコマンドを実行して、内部に BLOB コンテナーを作成します。

    az storage container create --name $blobcontainer --account-name $storageaccount --auth-mode login
    

    ストレージ アカウントと BLOB コンテナーの作成時に、プライベート エンドポイントなどの特定の機能を有効または無効にする方法について説明します。

    注意

    1. ストレージ アカウントと AKS クラスターは、同じリージョンとサブスクリプションに存在する必要があります。
    2. BLOB コンテナーには、以前に作成したファイル システムを含めることはできません (AKS のバックアップによって作成された場合を除く)。
    3. ソースまたはターゲットの AKS クラスターがプライベート仮想ネットワーク内にある場合は、ストレージ アカウントを AKS クラスターに接続するために、プライベート エンドポイントを作成する必要があります。
  2. バックアップ拡張機能をインストールします

    バックアップと復元の操作を実行するには、AKS クラスターに Backup 拡張機能をインストールする必要があります。 Backup 拡張機能は、クラスター内に名前空間 dataprotection-microsoft を作成し、同じものを使用してそのリソースをデプロイします。 この拡張機能には、インストール用の入力としてストレージ アカウントと BLOB コンテナーが必要です。

    az k8s-extension create --name azure-aks-backup --extension-type microsoft.dataprotection.kubernetes --scope cluster --cluster-type managedClusters --cluster-name $akscluster --resource-group $aksclusterresourcegroup --release-train stable --configuration-settings blobContainer=$blobcontainer storageAccount=$storageaccount storageAccountResourceGroup=$storageaccountresourcegroup storageAccountSubscriptionId=$subscriptionId
    

AKS クラスターが仮想ネットワーク内にある場合は、プライベート エンドポイントを作成し、ストレージ アカウントを AKS クラスターが存在する仮想ネットワークに接続する必要があります。

#Fetch the Subnet ID using the name of the virtual network and subnet in which cluster resides 
$PESubnetId = az network vnet subnet show --resource-group $aksMCResourceGroup --vnet-name $aksVnetName  --name $PESubnetName --query 'id' --output tsv

#Create a Private Endpoint between Storage Account and the Virtual Network.
az network private-endpoint create `
  --resource-group $aksclusterresourcegroup `
  --name $StoragePrivateEndpoint `
  --vnet-name $aksVnetName `
  --subnet $PESubnetId `
  --private-connection-resource-id $(az storage account show --nameD $storageaccount --resource-group $storageaccountresourcegroup --query "id" --output tsv) `
  --group-ids "blob" `
  --connection-name "StoragePESharedVNetConnection"

拡張機能のインストールの一環として、AKS クラスターのノード プールのリソース グループにユーザー ID が作成されます。 拡張機能がストレージ アカウントにアクセスするには、この ID にストレージ BLOB データ共同作成者ロールを指定する必要があります。 必要なロールを割り当てるには、次のコマンドを実行します。

az role assignment create --assignee-object-id $(az k8s-extension show --name azure-aks-backup --cluster-name $akscluster --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
  1. 信頼されたアクセスを有効にする

    Backup コンテナーが AKS クラスターに接続するには、Backup コンテナーが AKS クラスターに直接接続できるように、信頼されたアクセスを有効にする必要があります。

    信頼されたアクセスを有効にするには、次のコマンドを実行します。

    az aks trustedaccess rolebinding create --cluster-name $akscluster --name backuprolebinding --resource-group $aksclusterresourcegroup --roles Microsoft.DataProtection/backupVaults/backup-operator --source-resource-id /subscriptions/$subscriptionId/resourceGroups/$backupvaultresourcegroup/providers/Microsoft.DataProtection/BackupVaults/$backupvault
    

バックアップを構成する

作成された Backup コンテナーおよびバックアップ ポリシーと、AKS クラスターを "バックアップを行える" 状態にして、AKS クラスターのバックアップを開始できるようになりました。

要求を準備する

バックアップの構成は、次の 2 つの手順で実行されます。

  1. az dataprotection backup-instance initialize-backupconfig コマンドを使用して、バックアップするクラスター リソースを定義するために、バックアップ構成を準備します。 コマンドによって JSON が生成されます。これを更新して、必要に応じて AKS クラスターのバックアップ構成を定義できます。

    az dataprotection backup-instance initialize-backupconfig --datasource-type AzureKubernetesService > aksbackupconfig.json
    
    {
     "excluded_namespaces": null,
     "excluded_resource_types": null,
     "include_cluster_scope_resources": true,
     "included_namespaces": null, 
     "included_resource_types": null,
     "label_selectors": null,
     "snapshot_volumes": true
    }
    

名前空間 kube-system、kube-node-lease、kube-public はバックアップ構成でスキップされ、バックアップ対象として構成されません。

  1. az dataprotection backup-instance initialize コマンドを使用して、関連するコンテナー、ポリシー、AKS クラスター、バックアップ構成、スナップショットリソース グループを使用する、関連する要求を準備します。

    az dataprotection backup-instance initialize --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster --datasource-location $region --datasource-type AzureKubernetesService --policy-id /subscriptions/$subscriptionId/resourceGroups/$backupvaultresourcegroup/providers/Microsoft.DataProtection/backupVaults/$backupvault/backupPolicies/$backuppolicy --backup-configuration ./aksbackupconfig.json --friendly-name ecommercebackup --snapshot-resource-group-name $snapshotresourcegroup > backupinstance.json
    

次に、このコマンドの JSON 出力を使用して、AKS クラスターのバックアップを構成します。

必要なアクセス許可を割り当てて検証する

バックアップ コンテナーでは、マネージド ID を使用して他のAzure リソースにアクセスします。 AKS クラスターのバックアップを構成するには、Backup コンテナーのマネージド ID に、スナップショットが作成および管理されるAKS クラスターとリソース グループに対する一連のアクセス許可を付与する必要があります。 また、AKS クラスターには、スナップショット リソース グループに対するアクセス許可が必要です。

現在、バックアップ (Backup コンテナーと AKS クラスターの両方) では、システム割り当てマネージド ID のみがサポートされています。 システム割り当てマネージド ID は、1 つのリソースにつき 1 つに限定されており、このリソースのライフサイクルに関連付けられています。 ロールベースのアクセス制御 (Azure RBAC) Azure使用して、マネージド ID にアクセス許可を付与できます。 マネージド ID は、Azure リソースでのみ使用できる特殊な種類のサービス プリンシパルです。 マネージド IDの詳細を確認してください。

要求を準備したら、まず、次のコマンドを実行して、必要なロールが上記のリソースに割り当てられているかどうかを検証する必要があります。

az dataprotection backup-instance validate-for-backup --backup-instance ./backupinstance.json --ids /subscriptions/$subscriptionId/resourceGroups/$backupvaultresourcegroup/providers/Microsoft.DataProtection/backupVaults/$backupvault

検証に失敗し、特定のアクセス許可がない場合は、次のコマンドを実行して割り当てることができます。

az dataprotection backup-instance update-msi-permissions command.
az dataprotection backup-instance update-msi-permissions --datasource-type AzureKubernetesService --operation Backup --permissions-scope ResourceGroup --vault-name $backupvault --resource-group $backupvaultresourcegroup --backup-instance backupinstance.json

アクセス許可が割り当てられたら、次の validate for backup コマンドを使用して再検証します。

az dataprotection backup-instance create --backup-instance  backupinstance.json --resource-group $backupvaultresourcegroup --vault-name $backupvault

オンデマンド バックアップを実行する

バックアップを実行するために関連するバックアップ インスタンスを取得するには、az dataprotection backup-instance list-from-resourcegraph -- コマンドを実行します。

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 backup-instance adhoc-backup --rule-name "BackupDaily" --ids /subscriptions/$subscriptionId/resourceGroups/$backupvaultresourcegroup/providers/Microsoft.DataProtection/backupVaults/$backupvault/backupInstances/$backupinstanceid

1 つのAzure CLI コマンドを使用してバックアップを構成する

Azure Backupでは、1 つのAzure CLI コマンドを使用して、Azure Kubernetes Service (AKS) クラスターのバックアップ保護を構成するエクスペリエンスが簡略化されます。

注意

この手順は別の方法です。 az dataprotection backup-instance initialize-backupconfig コマンドを使用してバックアップ インスタンスを作成するための以前の方法は、引き続き通常どおりに動作します。

AKS クラスターのバックアップ構成では、バックアップ拡張機能のインストール、ストレージ リソースのプロビジョニング、バックアップ コンテナーとポリシーの作成、AKS クラスターとバックアップ コンテナー間の信頼されたアクセスの設定、バックアップ インスタンスの初期化など、複数の手動手順を完了する必要があります。

このバックアップ構成を簡略化するために、Microsoftは、次のコマンドを実行して、AKS クラスターのバックアップ保護を有効にする別の方法を提供します。

az dataprotection enable-backup trigger \
--datasource-type AzureKubernetesService \
--datasource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ContainerService/managedClusters/<aks-cluster-name>

このコマンドを実行すると、Azure Backupは自動的に次の構成ワークフローを実行します。

  • AKS クラスターの状態とバックアップの互換性を検証する
  • リージョン固有のバックアップ リソース グループの作成または再利用
  • AKS クラスターへの Backup 拡張機能のインストール (まだ存在しない場合)
  • バックアップに必要なストレージ リソースの作成または再利用
  • バックアップ コンテナーとバックアップ ポリシーの作成または再利用
  • バックアップ コンテナーと AKS クラスター間の信頼されたアクセスの有効化
  • バックアップ インスタンスを初期化して作成する

オプションのバックアップ構成パラメーターを指定する

必要に応じて、既存のバックアップ リソースを使用したり、バックアップ構成時にカスタム設定を適用したりするための構成ファイルを指定できます。

注意

このコマンドを実行するには、CLI バージョン 1.9.0 以降である必要があります。 CLI バージョンをインストールまたは更新するには、次の手順に従います。

  • 初回インストール: az extension add -n dataprotection
  • 既にインストールされている場合はアップグレードします。 az extension add -n dataprotection --upgrade
  • バージョンを確認します ( >= 1.9.0 である必要があります)。 az extension show -n dataprotection --query version -o tsv

次のコマンドを実行して、構成ファイルを使用してバックアップを有効にします。

az dataprotection enable-backup trigger \
--datasource-type AzureKubernetesService \
--datasource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ContainerService/managedClusters/<aks-cluster-name> \
--backup-strategy <Strategy>\ 
--backup-configuration-file @config.json

構成ファイルには、次のパラメーターを含めることができます。

パラメーター 説明
backupVaultId 既存のバックアップ コンテナーを使用する
backupPolicyId 既存のバックアップ ポリシーを使用する
storageAccountResourceId 既存のストレージ アカウントの使用
blobContainerName カスタム コンテナー名を指定する
backupResourceGroupId 既存のリソース グループを使用する
tags 作成されたリソースにタグを適用する

構成ファイルの例:

{
     "tags": {
     "Owner": "azure@microsoft.com",
     "Environment": "Production"
    }
}

サポートされているバックアップ戦略

定義済みの戦略を使用してバックアップを構成するには、次のコマンドを実行します。

az dataprotection enable-backup trigger \
--datasource-type AzureKubernetesService \
--datasource-id /subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.ContainerService/managedClusters/<aks-cluster-name> \
--backup-strategy DisasterRecovery\

次の定義済みのバックアップ戦略から選択できます。

Strategy 説明
Week (既定値) オペレーション ストアのバックアップを 7 日間保持する
Month オペレーション ストアのバックアップを 30 日間保持します
DisasterRecovery 運用ストアで 7 日間バックアップを保持し、Vault ストアを 90 日間保持します
カスタム 既存のバックアップ保管庫とポリシーを使用する

カスタム戦略では、上記の構成ファイルを使用する必要があります。

詳細については、 ここで CLI コマンドを確認してください。

ジョブの追跡

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 OnDemandBackup

スケジュールされたバックアップの場合:

az dataprotection job list-from-resourcegraph --datasource-type AzureKubernetesService --datasource-id /subscriptions/$subscriptionId/resourceGroups/$aksclusterresourcegroup/providers/Microsoft.ContainerService/managedClusters/$akscluster --operation ScheduledBackup

次のステップ