Share via


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

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

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

開始する前に

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

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

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

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

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

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

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

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

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

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

注意

選択したコンテナーには "グローバル冗長" 設定がある場合がありますが、現時点で AKS のバックアップでは "運用レベル" のみがサポートされています。 すべてのバックアップは、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) であり、各バックアップのリテンション期間は "365 日間" です。

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 時間の間隔でバックアップを作成できる [時間単位] のバックアップ頻度を選択します。 選択した "[期間]" に基づいてバックアップがスケジュールされます。

たとえば、[4 時間ごと] を選択した場合、ほぼ 4 時間ごとにバックアップが作成されるので、バックアップが 1 日のうちで均等に分散されます。 "1 日 1 回" のバックアップで十分な場合は、"[日単位] のバックアップ頻度" を選択します。 日単位のバックアップ頻度では、バックアップを作成する "時刻" を指定できます。

重要

この時刻は、バックアップが完了する時刻ではなく、バックアップの開始時刻を示しています。

注意

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

テンプレートを JSON ファイルとしてダウンロードしたら、必要に応じてスケジュールと保有期間を編集できます。 次に、結果の JSON を使用して新しいポリシーを作成します。 時間単位の頻度または保持期間を編集する場合は、az dataprotection backup-policy trigger setaz dataprotection backup-policy retention-rule set コマンドを使用します。 ポリシーの 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 クラスターのノード プールのリソース グループにユーザー 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
    
  3. 信頼されたアクセスを有効にする

    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
    }
    
  2. 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 つに限定されており、このリソースのライフサイクルに関連付けられています。 マネージド ID には、Azure ロールベースのアクセス制御 (Azure RBAC) を使用してアクセス許可を付与できます。 マネージド 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

ジョブの追跡

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

次のステップ