Azure Backup を使用して Azure Kubernetes Service をバックアップする
この記事では、Azure Kubernetes Service (AKS) の構成とバックアップを行う方法について説明します。
Azure Backup では、クラスターにインストールする必要があるバックアップ拡張機能を使用して、AKS クラスター (クラスター リソースとクラスターにアタッチされている永続ボリューム) をバックアップすることができます。 バックアップ コンテナーは、このバックアップ拡張機能を介してクラスターと通信し、バックアップと復元操作を実行します。
Note
Azure Backup を使用した AKS のボールトへのバックアップとリージョンをまたがる復元は、現在プレビュー段階にあります。
開始する前に
- 現在、AKS Backup は、CSI ドライバーによって有効化された Azure Disk Storage ベースの永続ボリュームのみをサポートしています。 バックアップは運用データストアにのみ保存されます (バックアップ データはテナントに保存され、コンテナーに移動されません)。 バックアップ コンテナーと AKS クラスターは、同じリージョンに存在する必要があります。
- AKS Backup では、BLOB コンテナーとリソース グループを使用してバックアップを格納します。 BLOB コンテナーには、AKS クラスター リソースが保持されます。 永続ボリュームのスナップショットは、リソース グループに保存されます。 AKS クラスターとストレージの場所は、同じリージョンに存在する必要があります。 BLOB コンテナーの作成方法についてはこちらを参照してください。
- 現在、AKS Backup では 1 日 1 回のバックアップがサポートされています。 1 日あたりのバックアップの頻度を増やすこともできます (4 時間、8 時間、12 時間ごと)。 このソリューションを使用すると、データを復元用に最大 360 日間保持することができます。 バックアップ ポリシーの作成の方法を確認してください。
- Backup 拡張機能をインストールして、AKS クラスターでバックアップと復元操作を構成する必要があります。 バックアップ拡張機能の詳細を確認してください。
- バックアップの構成と復元の操作を開始する前に、
Microsoft.KubernetesConfiguration
、Microsoft.DataProtection
、およびMicrosoft.ContainerService
がサブスクリプションに登録されていることを確認します。 - 必ずすべての前提条件を満たしてから AKS Backup のバックアップや復元の操作を始めてください。
サポートされているシナリオ、制限事項、可用性の詳細については、サポート マトリックスを参照してください。
バックアップ コンテナーの作成
バックアップ コンテナーは、経時的に作成された復旧ポイントを保存する管理エンティティです。 バックアップ コンテナーには、バックアップ操作を実行するためのインターフェイスも用意されています。 たとえば、オンデマンドでのバックアップ作成、復元の実行、バックアップ ポリシーの作成などの操作です。 AKS Backup では、Backup ボールトと AKS クラスターが同じリージョンに存在する必要があります。 バックアップ コンテナーの作成方法についてはこちらを参照してください。
Note
バックアップ コンテナーは、新しくサポートされるデータソースをバックアップするために使用される新しいリソースです。 バックアップ コンテナーは Recovery Services コンテナーとは異なります。
Azure Backup を使用して AKS クラスターをリージョンの停止から保護する場合は、[リージョンをまたがる復元] を有効にすることができます。 [リージョンをまたがる復元] を有効にするには、次のことを行う必要があります。
ボールトの作成時に、バックアップ ストレージ冗長パラメーターを geo 冗長として設定します。 ボールトの冗長性を設定した後に、無効にすることはできません。
[コンテナーのプロパティ] の [リージョンをまたがる復元] パラメーターを [有効] に設定します。 このパラメーターを有効にすると、無効にすることはできません。
コンテナー標準データストアの保持期間が設定されたバックアップ ポリシーを使用してバックアップ インスタンスを作成します。 このデータストアに保存されているすべての復旧ポイントは、セカンダリ リージョンに保存されます。
バックアップ ポリシーの作成
バックアップを構成する前に、バックアップの頻度と、バックアップの保有期間を定義したバックアップ ポリシーを作成する必要があります。
バックアップ ポリシーを作成するには:
作成した Backup ボールトに移動し、[管理]>[バックアップ ポリシー]>[追加] を選択します。
バックアップ ポリシーの名前を入力します。
[データ ソースの種類] に [Kubernetes Service] を選択します。
[スケジュールと保持期間] タブで、"バックアップ スケジュール" を定義します。
- バックアップの頻度: "バックアップの頻度" (時間単位または日単位) を選択し、"バックアップの保有期間" を選択してください。
- 保持期間の設定: 新しいバックアップ ポリシーには、"既定" のルールが既定で定義されます。 このルールを編集することはできますが、削除できません。 既定のルールには、作成されるすべての運用層バックアップの保有期間が定義されています。 日単位または時間単位で取得されるバックアップがより長い期間保存されるように、追加の保有ルールを作成することもできます。
日単位または時間単位で取得されるバックアップがより長い期間保存されるように、追加の保有ルールを作成することもできます。
Note
- 1 日の最初の正常なバックアップに加えて、週、月、年の最初に正常にバックアップするための保持ルールを定義できます。 優先順位の観点から、順序は年、月、週、日です。
- "ボールト層" に保存されているバックアップは、セカンダリ リージョン (Azure ペア リージョン) にコピーできます。プライマリ リージョンを使用できない場合に、これを使用して AKS クラスターをセカンダリ リージョンに復元できます。 この機能を選択するには、"リージョンをまたがる復元" が有効になっている"geo 冗長コンテナー" を使用します。
バックアップ頻度と保有設定を構成したら、[次へ] を選択します。
[確認と作成] タブで、情報を確認し、[作成] を選びます。
Backup 拡張機能をインストールし、バックアップを構成する
AKS Backup を使用して、クラスター全体またはクラスターにデプロイされた特定のクラスター リソースをバックアップできます。 デプロイされたアプリケーションのスケジュールと保有の要件またはセキュリティ要件に従って、クラスターを複数回保護することもできます。
Note
同じ AKS クラスターに対して複数のバックアップ インスタンスを設定するには:
- 同じバックアップ コンテナーに異なるバックアップ ポリシーを使用してバックアップを構成します。
- 別のバックアップ コンテナーにバックアップを構成します。
Backup 拡張機能をインストールする
AKS クラスターのバックアップを構成するには:
Azure portal で、バックアップする AKS クラスターに移動します。
サービス メニューの [設定] で [バックアップ] を選択します。
バックアップまたは復元用に AKS クラスターを準備するには、[拡張機能のインストール] を選んで、クラスターにバックアップ拡張機能をインストールします。
入力として "ストレージ アカウント" と "BLOB コンテナー" を指定します。
AKS クラスターのバックアップは、この BLOB コンテナーに保存されます。 ストレージ アカウントは、クラスターと同じリージョンとサブスクリプション内にある必要があります。
[次へ] を選択します。 拡張機能のインストールの詳細を確認し、[作成] を選びます。
拡張機能のインストールが開始します。
バックアップの構成
Backup 拡張機能が正常にインストールされたら、[バックアップの構成] を選択します。
先ほど作成した Backup ボールトを選択します。 AKS クラスターをバックアップするには、バックアップ コンテナーで [Trusted Access] (信頼されたアクセス) を有効にしておく必要があります。 [信頼されたアクセス] を有効にするには、[アクセス許可の付与] を選びます。 既に有効な場合は、[次へ] を選びます。
[バックアップ ポリシー] タブで、バックアップのスケジュールとその保持期間を定義するバックアップ ポリシーを選択し、[次へ] を選択します。
[データソース] タブで、[追加/編集] を選んでバックアップ インスタンスの構成を定義します。
[バックアップするリソースの選択] ペインで、バックアップするクラスター リソースを定義します。
詳細については、バックアップの構成に関する記事を参照してください。
[スナップショット リソース グループ] では、永続ボリューム (Azure Disk Storage) スナップショットの保存に使用するリソース グループを選択してから、[検証] を選択します。
検証が完了した後、スナップショット リソース グループのコンテナーに必要なロールが割り当てられていない場合は、エラーが表示されます。
エラーを解決するには、[データソース名] の下にあるデータソースのチェックボックスを選択し、[不足しているロールの割り当て] を選択します。
ロールの割り当てが完了したら、[次へ]>[バックアップの構成] を選択します。
バックアップ構成
Azure Backup for AKS を使うと、バックアップする AKS クラスター内でアプリケーションの境界を定義できます。 バックアップ構成内で利用できるフィルターを使って、バックアップするリソースや、カスタム フックを実行するリソースを選択できます。 定義されたバックアップ構成は、[バックアップ インスタンス名] の値で参照されます。 次のフィルターを利用して、アプリケーションの境界を定義できます。
[バックアップする名前空間の選択] を選択します。 [すべて] を選択して、クラスター内の既存と今後の名前空間をすべてバックアップするか、バックアップ対象として特定の名前空間を選択することができます。
次の名前空間はバックアップの構成からスキップされます:
kube-system
、kube-node-lease
、kube-public
。[追加のリソース設定] を展開して、バックアップするクラスター リソースを選択するために使用できるフィルターを表示します。 次のカテゴリに基づいてリソースのバックアップを選択できます。
- ラベル: リソースの種類に割り当てるラベルを使用して、AKS リソースをフィルター処理できます。 キーと値のペアの形式でラベルを入力します。
AND
ロジックを使用して複数のラベルを組み合わせることができます。 たとえば、ラベルenv=prod;tier!=web
を入力した場合、プロセスでenv
キーとprod
値を含むラベルと、値web
を持たないキーtier
を持つラベルを含むリソースを選択します。 - API グループ: AKS API グループと種類を指定してリソースを含めることもできます。 たとえば、デプロイなどのバックアップ AKS リソースを選択できます。 Kubernetes で定義された API グループの一覧については、こちらをご覧ください。
- その他のオプション: クラスター スコープのリソース、永続ボリューム、シークレットのバックアップを有効または無効にできます。 既定では、クラスタースコープのリソースと永続ボリュームが有効になります。
- ラベル: リソースの種類に割り当てるラベルを使用して、AKS リソースをフィルター処理できます。 キーと値のペアの形式でラベルを入力します。
Note
デプロイされ、バックアップ対象であるすべての YAML ファイルにラベルを追加する必要があります。 これには、永続ボリューム要求などの名前空間スコープのリソースと、永続ボリュームなどのクラスター スコープのリソースが含まれます。
AKS Backup 中にフックを使用する
このセクションでは、バックアップ フックを使用して、MySQL がデプロイされた AKS クラスターのアプリケーション整合性スナップショット (MySQL インスタンスを含む永続ボリューム) を作成する方法について説明します。
AKS バックアップでカスタム フックを使用して、ボリュームのアプリケーション整合性スナップショットを実現できます。 ボリュームは、コンテナー化されたワークロードとしてデプロイされるデータベースに使用されます。
バックアップ フックを使用すると、ボリュームのアプリケーション スナップショットを取得できるように、MySQL ポッドを固定および固定解除するコマンドを定義できます。 次に、バックアップ拡張機能によって、フックでコマンドを実行するステップが調整され、ボリューム スナップショットが取得されます。
MySQL がデプロイされたボリュームのアプリケーション整合性スナップショットは、次のアクションを実行することによって作成されます。
- MySQL を実行しているポッドは固定されているため、データベースに対して新しいトランザクションは実行されません。
- ボリュームのスナップショットがバックアップとして取得されます。
- MySQL を実行しているポッドは固定解除されているため、データベースでトランザクションを再度実行できます。
MySQL をバックアップするためのバックアップ構成フローの一部としてバックアップ フックを有効にするには:
PostgreSQL ポッドを固定および固定解除するコマンドを使用して、バックアップ フック用のカスタム リソースを記述します。
定義済みのコマンドを含むサンプルの YAML スクリプト postgresbackuphook.yaml を使用することもできます。
apiVersion: clusterbackup.dataprotection.microsoft.com/v1alpha1 kind: BackupHook metadata: # BackupHook CR Name and Namespace name: bkphookname0 namespace: default spec: # 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: command: - /sbin/fsfreeze - --freeze - /var/lib/postgresql/data container: webcontainer onError: Continue # PostHooks is a list of BackupResourceHooks to execute after backing up an item. postHooks: - exec: container: webcontainer command: - /sbin/fsfreeze - --unfreeze onError: Fail timeout: 10s
バックアップを構成する前に、バックアップ フック カスタム リソースを AKS クラスターにデプロイする必要があります。
スクリプトをデプロイするには、次の コマンドを実行します。
kubectl apply -f mysqlbackuphook.yaml
デプロイが完了したら、AKS クラスターのバックアップを構成できます。
Note
バックアップ構成の一部として、カスタム リソース名と、リソースがデプロイされる名前空間を入力として指定する必要があります。