Azure Kubernetes Service とは

Azure Kubernetes Service (AKS) バックアップは、AKS クラスターで実行されているコンテナー化されたアプリケーションとデータのバックアップと復元に使用できる、クラウドネイティブのシンプルなプロセスです。 CSI ドライバーベースの Azure Disk Storage の永続ボリュームに保存されているクラスターの状態とアプリケーション データのスケジュールされたバックアップを構成できます。 このソリューションでは、バックアップを BLOB コンテナーにローカルに保存したり、ディスク スナップショットとして保存したりすることで、バックアップまたは復元する特定の名前空間またはクラスター全体を選択するための詳細な制御が提供されます。 AKS バックアップを使用して、運用回復、開発者/テスト環境の複製、クラスターのアップグレード シナリオなど、エンドツーエンドのシナリオを解放できます。

AKS バックアップは、Azure の Backup センターと統合され、大規模なバックアップを管理、監視、運用、分析するのに役立つ単一のビューを提供します。 バックアップは、AKS インスタンスのリソース メニューの [設定] の下の Azure portal でも使用できます。

Note

Azure Backup を使用した AKS のコンテナーによるバックアップとリージョン間の復元は、現在プレビュー段階にあります。

AKS バックアップのしくみ

AKS バックアップを使用して、AKS クラスターにデプロイされている AKS ワークロードと永続ボリュームをバックアップします。 このソリューションでは、Backup 拡張機能を AKS クラスター内にインストールする必要があります。 Backup コンテナーは拡張機能と通信して、バックアップと復元に関連する操作を完了します。 Backup 拡張機能の使用は必須であり、クラスターのバックアップと復元を有効にするには、拡張機能を AKS クラスター内にインストールする必要があります。 AKS バックアップを構成するときは、ストレージ アカウントとバックアップが保存されている BLOB コンテナーの値を追加します。

Backup 拡張機能と共に、AKS クラスターの管理対象リソース グループにユーザー ID ("拡張機能 ID" と呼ばれます) が作成されます。 この拡張機能 ID には、バックアップが BLOB コンテナーに保存されているストレージ アカウントに対するストレージ アカウント共同作成者ロールが割り当てられます。

パブリック、プライベート、認可された IP ベースのクラスターをサポートするには、AKS バックアップでは、AKS クラスターと Backup コンテナーの間で信頼されたアクセスを有効にする必要があります。 信頼されたアクセスにより、Backup コンテナーは、バックアップ操作用の特定のアクセス許可が割り当てられ、AKS クラスターにアクセスできるようになります。 AKS の信頼されたアクセスの詳細については、「信頼されたアクセスを使用して Azure リソースから AKS クラスターにアクセスできるようにする」を参照してください。

Note

AKS バックアップでは、運用層にバックアップを保存できます。 運用層はローカル データストア (スナップショットとしてテナント内に存在) です。 これで、AKS バックアップを使用して 1 日に 1 つの復旧ポイントを移動し、コンテナー層に BLOB (テナント外) として保存できるようになりました。 Backup ボールトを使用してバックアップを管理することもできます。

Backup 拡張機能がインストールされ、信頼されたアクセスが有効になると、バックアップ ポリシーに従ってクラスターのスケジュールされたバックアップを構成できます。 また、バックアップを元のクラスターまたは同じサブスクリプションとリージョン内の代替クラスターに復元することもできます。 特定の操作を設定するときに、特定の名前空間またはクラスター全体をバックアップと復元の構成として選択できます。

バックアップ ソリューションでは、クラスターにデプロイされている AKS データソースと、クラスターの永続ボリュームに保存されているデータに対するバックアップ操作を行い、その後 BLOB コンテナーにバックアップを保存できます。 ディスクベースの永続ボリュームは、スナップショット リソース グループ内のディスク スナップショットとしてバックアップされます。 BLOB 内のスナップショットとクラスターの状態を組み合わせることで、運用層と呼ばれるテナントに保存される復旧ポイントを生成できます。 また、運用層のバックアップ (日、週、月、または年ごとに最初に成功したバックアップ) を BLOB に変換し、1 日に 1 回コンテナー (テナント外) に移動することもできます。

Note

現在、Azure Backup は、CSI ドライバーベースの Azure Disk Storage 内の永続ボリュームのみをサポートします。 バックアップ中、このソリューションは、Azure ファイル共有や BLOB などの他の永続ボリュームの種類をスキップします。 また、永続ボリュームのサイズが 1 TB 以下の場合は、バックアップをコンテナーに移動できます。

バックアップの構成

  • AKS クラスターのバックアップを構成するには、まず Backup ボールトを作成します。 このコンテナーは、さまざまなデータソースに構成されているバックアップの統合ビューを提供します。 AKS バックアップは、運用層とコンテナー層の両方のバックアップをサポートします。

    Note

    • Backup コンテナーと、バックアップまたは復元する AKS クラスターは、同じリージョンとサブスクリプションに存在する必要があります。
    • Backup ボールトのストレージ冗長性設定 (LRS/GRS) は、コンテナー層に保存されているバックアップにのみ適用されます。 ディザスター リカバリー用にバックアップを使用する場合は、リージョン間の復元を有効にしてストレージの冗長性を GRS に設定します。
  • AKS バックアップでは、スケジュールされたバックアップ ジョブが自動的にトリガーされます。 ジョブはクラスター リソースを BLOB コンテナーにコピーし、バックアップ頻度に従ってディスクベースの永続ボリュームの増分スナップショットを作成します。 バックアップはバックアップ ポリシーで定義されている保持期間に従って運用層とコンテナー層に保持され、保持期間が終了すると削除されます。

    Note

    AKS バックアップを使用すると、バックアップ インスタンスごとに異なるバックアップ構成を使用して、1 つの AKS クラスターに対して複数のバックアップ インスタンスを作成できます。 ただし、AKS クラスターの各バックアップ インスタンスは、それぞれ異なる Backup コンテナーに作成するか、あるいは同じ Backup コンテナー内の個別のバックアップ ポリシーを使用して作成する必要があります。

バックアップの管理

AKS クラスターのバックアップ構成が完了すると、Backup ボールトにバックアップ インスタンスが作成されます。 クラスターのバックアップ インスタンスは、Azure portal の AKS インスタンスの [Backup] セクションで確認できます。 ユーザーは、対応するバックアップ インスタンスを使用して、復元の開始、監視、保護の停止など、インスタンスに対して任意のバックアップ関連の操作を実行できます。

また、AKS バックアップは Backup センターと直接統合され、すべての AKS クラスターとその他のバックアップでサポートされているワークロードの保護を一元的に管理するのに役立ちます。 バックアップ センターは、ジョブの監視やバックアップと復元の状態など、すべてのバックアップのすべての要件に対応する 1 つのビューです。 Backup センターを使用すると、コンプライアンスとガバナンスを確保し、バックアップの使用状況を分析し、データをバックアップおよび復元する重要な操作を行います。

AKS バックアップは、マネージド ID を使用して他の Azure リソースにアクセスします。 AKS クラスターのバックアップを構成し、以前のバックアップから復元するには、Backup コンテナーのマネージド ID には、AKS クラスターとスナップショットを作成および管理するスナップショット リソース グループに対する一連のアクセス許可が必要です。 現在、AKS クラスターには、スナップショット リソース グループに対する一連のアクセス許可が必要です。 また、Backup 拡張機能ではユーザー ID を作成し、バックアップが BLOB に保存されているストレージ アカウントにアクセスするための一連のアクセス許可を割り当てます。 マネージド ID には、Azure ロールベースのアクセス制御 (Azure RBAC) を使用してアクセス許可を付与できます。 マネージド ID は、Azure リソースでのみ使用できる、特殊な種類のサービス プリンシパルです。 マネージド IDの詳細を確認してください。

バックアップから復元する

回復ポイントが存在する任意の時点からデータを復元できます。 回復ポイントは、バックアップ インスタンスが保護された状態のときに作成され、バックアップ ポリシーによって保持されるまでのデータを復元するために使用できます。

Azure Backup を使用すると、バックアップされたすべての項目を復元し、名前空間やその他のフィルター オプションを選択することで、きめ細かい制御を使用してバックアップから特定の項目を選択できます。 また、元の AKS クラスター (バックアップされているクラスター) や代替 AKS クラスターで復元を実行することもできます。 運用層とコンテナー層に保存されているバックアップは、同じサブスクリプションと異なるサブスクリプションにあるクラスターに復元できます。 別のリージョン (Azure ペアリージョン) にあるクラスターへの復元には、コンテナー層に保存されているバックアップのみを使用できます。

コンテナー層に保存されているバックアップを復元するには、バックアップ データがハイドレートされるステージング場所を指定する必要があります。 このステージング場所には、同じリージョン内のリソース グループとストレージ アカウントに加え、復元のターゲット クラスターとしてのサブスクリプションが含まれます。 復元中、ハイドレーションの一部として特定のリソース (BLOB コンテナー、ディスク、ディスク スナップショット) が作成され、復元操作の完了後にクリアされます。

現在、Azure Backup for AKS では、リソースの競合の発生時に復元操作を実行するときに、次の 2 つのオプションがサポートされています (バックアップされたリソースの名前はターゲット AKS クラスター内のリソースの名前と同じです)。 復元構成を定義するときに、これらのオプションのいずれかを選択できます。

  1. スキップ: 既定では、このオプションはオンになっています。 たとえば、pvc-azuredisk という名前の PVC をバックアップし、同じ名前の PVC を持つターゲット クラスターに復元する場合、バックアップ拡張機能はバックアップされた永続ボリューム要求 (PVC) の復元をスキップします。 このようなシナリオでは、クラスターからリソースを削除してから、復元操作を実行することをお勧めします。これにより、バックアップされた項目はクラスター内でのみ使用でき、スキップされません。

  2. [パッチ]: このオプションを使用すると、ターゲット クラスター内のリソースの、バックアップされたリソースで変更可能な変数にパッチを適用できます。 ターゲット クラスター内のレプリカの数を更新する場合は、操作としてファイルの部分置換の適用を選択できます。

Note

AKS バックアップでは現在、ターゲット クラスター内にリソースが既に存在する場合は、これらを削除および再作成しません。 元の場所にある永続ボリュームを復元する場合は、既存の永続ボリュームを削除してから、復元操作を実行します。

バックアップと復元用のカスタム フックの使用

カスタム フックを使用して、コンテナー化されたワークロードとしてデプロイされたデータベースに使用されるボリュームのアプリケーション整合性スナップショットを取得できます。

カスタム フックとは

AKS バックアップを使用すると、バックアップと復元操作の一部としてカスタム フックを実行できます。 フックは、バックアップ操作中または復元後にポッド内のコンテナーで実行される 1 つ以上のコマンドを実行するように構成されたコマンドです。 これらのフックをカスタム リソースとして定義し、バックアップまたは復元したい AKS クラスターにデプロイします。 必要な名前空間の AKS クラスターにカスタム リソースがデプロイされている場合は、バックアップと復元を構成するためのフローの入力として詳細を指定します。 Backup 拡張機能は、YAML ファイルで定義されているフックを実行します。

Note

フックは、"シェル" でコンテナーに対して実行されるのではありません。

AKS の Backup には、次の 2 種類のフックがあります。

  • Backup フック
  • 復元フック

Backup フック

バックアップ フックでは、コマンドをカスタム アクション処理の前に実行するように (事前フック)、またはすべてのカスタム アクションが完了し、カスタム アクションで指定した追加項目がバックアップされる前に実行するように (事後フック) 構成できます。

たとえば、バックアップ フックを使用してデプロイするカスタム リソースの YAML テンプレートを次に示します。

apiVersion: clusterbackup.dataprotection.microsoft.com/v1alpha1
kind: BackupHook
metadata:
  # BackupHook CR Name and Namespace
  name: bkphookname0
  namespace: default
spec:
  # BackupHook is a list of hooks to execute before and after backing up a resource.
  backupHook:
    # BackupHook Name. This is the name of the hook that will be executed during backup.
    # compulsory
  - name: hook1
    # Namespaces where this hook will be executed.
    includedNamespaces: 
    - hrweb
    excludedNamespaces:
    labelSelector:
    # PreHooks is a list of BackupResourceHooks to execute prior to backing up an item.
    preHooks:
      - exec:
          # Container is the container in the pod where the command should be executed.
          container: webcontainer
          # Command is the command and arguments to execute.
          command:
            - /bin/uname
            - -a
          # OnError specifies how Velero should behave if it encounters an error executing this hook  
          onError: Continue
          # Timeout is the amount of time to wait for the hook to complete before considering it failed.
          timeout: 10s
      - exec:
          command:
            - /bin/bash
            - -c
            - echo hello > hello.txt && echo goodbye > goodbye.txt
          container: webcontainer
          onError: Continue
    # PostHooks is a list of BackupResourceHooks to execute after backing up an item.
    postHooks:
      - exec:
          container: webcontainer
          command:
            - /bin/uname
            - -a
          onError: Continue
          timeout: 10s

復元フック

復元フック スクリプトでは、復元された AKS ポッドのコンテナーでカスタム コマンドまたはスクリプトを実行するように記述します。

復元フックを使用してデプロイするカスタム リソースの YAML テンプレートを次に示します。

apiVersion: clusterbackup.dataprotection.microsoft.com/v1alpha1
kind: RestoreHook
metadata:
  name: restorehookname0
  namespace: default
spec:
  # RestoreHook is a list of hooks to execute after restoring a resource.
  restoreHook:
    # Name is the name of this hook.
  - name: myhook-1  
    # Restored Namespaces where this hook will be executed.
    includedNamespaces: 
    excludedNamespaces:
    labelSelector:
    # PostHooks is a list of RestoreResourceHooks to execute during and after restoring a resource.
    postHooks:
      - exec:
          # Container is the container in the pod where the command should be executed.
          container: webcontainer
          # Command is the command and arguments to execute from within a container after a pod has been restored.
          command:
            - /bin/bash
            - -c
            - echo hello > hello.txt && echo goodbye > goodbye.txt
          # OnError specifies how Velero should behave if it encounters an error executing this hook
          # default value is Continue
          onError: Continue
          # Timeout is the amount of time to wait for the hook to complete before considering it failed.
          execTimeout: 30s
          # WaitTimeout defines the maximum amount of time Velero should wait for the container to be ready before attempting to run the command.
          waitTimeout: 5m

AKS バックアップ中にフックを使用する方法については、こちらを参照してください。

AKS バックアップはどのバックアップ ストレージ層をサポートしますか?

AKS 用 Azure Backup は、バックアップ データストアとして 2 つのストレージ層をサポートします。

  • 運用層: AKS クラスターにインストールされているバックアップ拡張機能は、最初に CSI ドライバーを介してボリューム スナップショットを取得することでバックアップを取得し、ユーザーのテナントの BLOB コンテナーにクラスターの状態を保存します。 この層は 4 時間に 2 回のバックアップを行い、保持期間を最小に抑えることで、より低い RPO を実現します。 さらに、Azure ディスク ベースのボリュームの場合、運用レベルはより迅速な復元を実現します。

  • コンテナー標準層 (プレビュー): バックアップ データをスナップショットよりも低コストで長期間保存するために、AKS バックアップはコンテナー標準データストアをサポートします。 バックアップ ポリシーで設定された保持ルールに従って、最初に成功したバックアップ (日、週、月、または年ごと) がテナント外の BLOB コンテナーに移動されます。 このデータストアはより長い保持期間を実現するだけでなく、ランサムウェアの防止にも役立ちます。 また、Backup ボールト内で geo 冗長リージョン間復元を有効にすると、コンテナーに保存されているバックアップを別のリージョン (Azure ペアリージョン) に移動することもできます。

Note

保持ルールを定義することで、Backup Policy を使用して、コンテナー標準データストアにバックアップ データを保存できます。 スケジュールされた復旧ポイントは、1 日に 1 つだけコンテナー層に移動されます。 ただし、選択したルールに従って、任意の数のオンデマンド バックアップをコンテナーに移動できます。

価格について

次の料金が発生します。

  • 保護されたインスタンスの料金: Azure Backup for AKS では、名前空間ごとに 1 か月あたりの "保護されたインスタンスの料金" が請求されます。 AKS クラスターのバックアップを構成すると、保護されたインスタンスが作成されます。 各インスタンスには、バックアップ構成で定義されているとおりにバックアップされる特定の数の名前空間があります。 AKS バックアップの価格の詳細については、「クラウド バックアップの価格」を参照し、ワークロードとして Azure Kubernetes Service を選択してください

  • スナップショットの料金: Azure Backup for AKS では、Azure サブスクリプションのリソース グループに保存されているスナップショットを取得することで、ディスクベースの永続ボリュームが保護されます。 これらのスナップショットには、スナップショット ストレージの料金が発生します。 スナップショットはバックアップ コンテナーにコピーされないため、バックアップ ストレージ コストは適用されません。 スナップショットの価格の詳細については、「Managed Disks の価格」を参照してください。

次のステップ