AWS EKS のバックアップには?

AWS Backup を使用すると、Amazon EKS (Elastic Kubernetes Service)をバックアップできます。AWS Backup は、クラスターの状態と永続的なアプリケーションデータの両方を保護するための、フルマネージドかつ一元化されたサービスです。AWS Backup は、自動スケジュール機能と保存期間ポリシーをサポートしており、EKS 環境全体でのバックアップ運用の標準化と管理を支援します。また、不変のバックアップに加え、災害復旧やコンプライアンス要件に対応するためのリージョン間およびアカウント間のコピー機能も提供します。

この統合により、カスタムスクリプトやサードパーティ製ツールが不要になります。AWS BackupのEKS統合では、バックアップサイドカー、コントローラー、またはカスタムスクリプトは使用されません。復旧のニーズに応じて、EKSクラスター全体、個々のネームスペース、または特定の永続ボリュームを復元できます。

ただし、Amazon EKSとのAWS Backupにはいくつかの重要な制限があります。ツリー内プラグイン、CSIマイグレーション、またはFSxドライバーを介してプロビジョニングされたボリュームなど、すべてのボリュームタイプがサポートされているわけではありません。VPC、サブネット、コンテナイメージなどの主要なインフラストラクチャコンポーネントは対象外であり、S3バックアップはバケット全体に限定されます。さらに、EKSクラスターの状態は常にフルスナップショットとしてバックアップされ、増分バックアップのオプションはありません。また、コールドストレージへの移行はパーシステントボリュームにのみ適用され、フルバックアップには適用されません。これらの制限事項については、詳しく説明していきます。

Amazon EKS バックアップの構造

AWS Backup における Amazon EKS バックアップは、リカバリポイントを中核とした階層構造で構成されています。この構造により、クラスタ構成と永続データが分離されつつ、単一の論理バックアップとしてまとめられます。

最上位には複合リカバリポイントがあります。このリカバリポイントは、EKS クラスタのバックアップ全体を表します。これは、バックアップ操作中に作成されたすべての関連バックアップコンポーネントをグループ化するコンテナとして機能します。

複合リカバリポイントの内部には、ネストされたリカバリポイントがあります。各ネストされたリカバリポイントは、クラスタを構成する特定のリソースに対応しています。この設計により、AWS Backup は、必要に応じてクラスタの状態や永続ボリュームなどの個々のコンポーネントを個別に追跡および復元することができます。

ネストされたリカバリポイントの 1 つが、Amazon EKS クラスタ構成のチャイルド(子)リカバリポイントです。これには EKS クラスタの状態が含まれます。クラスタの状態には、シークレット、ConfigMap、StatefulSet、DaemonSet、ストレージクラス、レプリカセット、永続ボリュームクレーム、カスタムリソース定義、ロール、およびロールバインディングなどのリソースの望ましい構成を定義する Kubernetes マニフェスト(YAML または JSON)が含まれます。

永続ストレージについては、追加のネストされたリカバリポイントが作成されます。これらは永続ボリュームの子リカバリポイントと呼ばれ、サポートされているEKSアドオンCSIドライバーと組み合わせて使用される場合、Amazon EBS、Amazon EFS、Amazon S3などのサポート対象ストレージタイプのバックアップを含みます。

EKS環境のすべてのコンポーネントがこの構造に含まれるわけではありません。バックアップには、Amazon ECRやDocker Hubなどの外部リポジトリに保存されたコンテナイメージは含まれません。また、VPCやサブネットなどのインフラストラクチャコンポーネント、およびノード、自動生成されたPod、イベント、リース、ジョブなどの自動生成されたKubernetesリソースも除外されます。

各チャイルド・リカバリポイントは暗号化されます。EKSクラスタ構成の子リカバリポイントは、対象のBackup Vaultに関連付けられたKMSキーを使用して暗号化されます。永続ストレージのリカバリポイントは、EBSスナップショット、S3バックアップ、EFSバックアップなど、基盤となるストレージサービスの暗号化モデルに従って暗号化されます。

チュートリアル #1: AWS Backup を使用した EKS クラスターのバックアップ

AWS Backup は、クラスターの状態とそれにアタッチされた永続ボリュームの両方を含む複合リカバリポイントを作成することで、Amazon EKS クラスターをバックアップするネイティブな方法を提供します。このバックアッププロセスにより、Kubernetes の構成と関連する永続データを、一貫性のある復元可能な形で取得することができます。

バックアップの対象

Amazon EKSのバックアップは、次の2つの主要なコンポーネントで構成されます。

EKSクラスターの状態: デプロイメント、シークレット、コンフィグマップ、永続ボリュームクレーム、CRD、RBACポリシーなど、クラスターの望ましい状態を定義するKubernetesマニフェストが含まれます。

永続ストレージ: 永続ボリュームクレームを通じてリンクされ、EKS CSIドライバーによってサポートされるEBS、EFS、S3ボリュームなど、クラスターで使用されるデータボリュームをキャプチャします。

これらは複合リカバリポイントにグループ化され、各コンポーネントごとに個別のリカバリポイントがネストされます。

注: EKS バックアップには、コンテナイメージ、基盤となるインフラストラクチャ(VPC やサブネットなど)、および一時的なポッドやジョブなどの自動生成された Kubernetes リソースは含まれません

前提条件

バックアップを実行する前に:

EKSクラスタの認証モードがAPIに設定されていることを確認してください

●AWS Backupがクラスタおよび永続ボリュームにアクセスできるように、AWSBackupServiceRolePolicyForBackup IAMポリシーをアタッチします。

●クラスタでS3を使用している場合は、AWSBackupServiceRolePolicyForS3Backupを含め、S3固有の前提条件を確認してください。

●バックアップの暗号化は、対象のバックアップ・ボールトのキー構成(AWS KMS 経由)に従います。

ステップ 1: オンデマンド EKS バックアップの作成

AWS Backup コンソールから EKS バックアップを作成できます。

  1. AWS Backup コンソールを開き、保護対象リソースに移動します。
  2. オンデマンド・バックアップの作成ボタンをクリックします。

3. リソースタイプで、Amazon EKSを選択します。

4. バックアップするEKSクラスターを選択します。

5. オンデマンドバックアップの作成をクリックしてジョブを開始します。

6. 保存期間やコールドストレージへの移行などの設定を行います。

7. オンデマンドバックアップの作成をクリックして、ジョブを開始します

それぞれバックアップが行われるたびに複合リカバリポイントが作成され、そのARNを通じて追跡可能です。クラスタの状態および各永続ボリュームに対して、ネストされたリカバリポイントが作成されます。

バックアップジョブのステータス

バックアップジョブは、以下の3つの状態のいずれかで終了します。

完了:すべてのコンポーネントのバックアップが正常に完了しました。

失敗:ジョブが失敗しました。問題を解決した後、再実行してください。

一部完了:一部のリソースのバックアップに失敗しました。失敗したコンポーネントは個別に再実行できます。

これらのステータスを監視し、バックアップイベントに対する通知を設定できます。

リカバリポイントの管理

リカバリポイントに対して、以下の操作を行うことができます:

コピー:複合リカバリポイントおよびサポートされているネストされたリカバリポイントは、リージョン間またはアカウント間でコピーできます。

削除:複合リカバリポイントは、すべてのネストされたリカバリポイントが削除されるか、関連付けが解除された後にのみ削除できます(関連付けを解除できないクラスター状態を除く)。

関連付けの解除:クラスター状態を除き、ネストされたリカバリポイントは複合リカバリポイントからリンクを解除できます。

復元:「完了」ステータスのネストされたリカバリポイントは、個別に復元できます。

AWS Backupは、永続ボリュームのバックアップに対するライフサイクル全体の管理とコールドストレージへの移行をサポートしており、長期バックアップのコスト効率の高い保存を可能にします。

ステップ 2: Amazon EKS クラスターの復元

AWS Backup コンソールまたは CLI を使用して、バックアップ・ヴォールトから目的の復元ポイントを選択することで、Amazon EKS バックアップを復元できます。各 EKS バックアップは複合復元ポイントであり、クラスターの状態と永続ボリュームの両方が含まれています。

復元タイプと対象

AWS Backup はいくつかの復元タイプをサポートしており、それぞれ異なる粒度レベルを提供します。

フルクラスター復元: すべての Kubernetes リソースと永続ボリュームを、新規または既存の EKS クラスターに復元します。このタイプでは既存のリソースは上書きされません。つまり、ターゲットクラスターにすでに存在するオブジェクトはスキップされます。

ネームスペース復元: 関連する Kubernetes オブジェクトや永続ストレージを含め、最大 5 つの特定のネームスペースを復元できます。ネームスペース範囲のリソースは、クラスターの他の部分に影響を与えることなく復元されます。

パーシステントボリュームの復元: クラスタ全体の状態を復元する必要なく、EBS、EFS、またはS3ストレージを単独で復元できます。

既存のクラスタに復元する場合、この操作は非破壊的です。既存のKubernetesリソースは保持され、スキップされたオブジェクトはSNS通知を使用して監視できます。

前提条件と権限

復元を実行する前に:

●元のクラスターで使用されているIAMロール(例:Pod IAMロール、IRSA設定、OIDCプロバイダー)が、ターゲットアカウントおよびリージョンに存在することを確認してください。

●APIの互換性問題を回避するため、ソースクラスターとターゲットクラスターのEKSバージョンを一致させてください。

●必要なCSIストレージドライバーを、ターゲットクラスターに事前にインストールしてください。

S3バケットおよびコンテナイメージリポジトリに、必要なアカウント間またはリージョン間の権限でアクセスできることを確認してください。

セキュリティグループサブネット、およびアベイラビリティゾーンが復元構成と一致していることを確認してください。特にEBSボリュームを復元する場合は注意が必要です。

一般的な復元操作には、AWSBackupServiceRolePolicyForRestoresポリシーを使用してください。S3データを含むクラスターの場合は、AWSBackupServiceRolePolicyForS3Restoreポリシーもアタッチしてください。

復元ワークフロー(コンソール)

AWS Backupコンソールを使用してEKSクラスターを復元するには:

  1. AWS Backupコンソールを開き、バックアップ・ボールトに移動します。
  2. ボールトを選択し、EKSクラスターのリカバリポイントを見つけます。
  3. 復元をクリックし、次のいずれかのオプションを選択します:
    • EKSクラスター全体を復元
    • 復元するネームスペースを選択
  4. ターゲットクラスターを設定します:
    • 新しいクラスターの場合は、クラスター名、バージョン、VPC設定、ノードグループ、セキュリティグループ、およびIAMロールを定義します。
    • 既存のクラスターの場合は、ドロップダウンメニューから選択します。
  5. 復元操作に適したIAMロールを選択します。
  6. 必要に応じて、Kubernetesリソースの復元順序を調整します。
  7. バックアップを復元をクリックして、プロセスを開始します。

永続ストレージの設定

復元中、AWS Backupは永続ストレージを再マウントします:

  • EBS: アベイラビリティゾーンの選択が必要です。AWS Backupはボリュームを復元し、ボリュームのマウントを確実にするために、ポッドを対応するゾーンに配置します。
  • S3: バケットは、アクセス可能で適切にバージョン管理されている場合、再マウントされます。
  • EFS: 新しいディレクトリプレフィックスに復元されます。アクセスポイントとマウントターゲットは、復元後に手動で再設定する必要があります。

重要な考慮事項

復元は非破壊的であり、既存のKubernetesオブジェクトを上書きすることはありません。既存のオブジェクトは、設定ミス、状態のずれ、または古くなっている場合でもスキップされます。

スキップまたは失敗したオブジェクトのトラブルシューティングには、EKS監査ログおよびSNS通知を使用してください。復元を開始する前に、クラスタースコープのオブジェクトおよびネームスペースがターゲット環境と互換性があることを確認してください。

AWS EKS Backup の制限事項

AWS Backup は EKS クラスターの保護をネイティブでサポートしていますが、重要な制限事項があります。これらは、バックアップ可能なリソース、データの保存方法、およびサポートされる環境に影響を与えます。信頼性の高いバックアップ戦略を策定するには、これらの制約を理解することが不可欠です。

主な制限事項は以下の通りです:

サポートされていないボリュームタイプ:CSI 移行、インツリー・ストレージ・プラグイン、または ACK コントローラーを介してプロビジョニングされた永続ボリュームはサポートされていません。

Amazon FSx:CSI ドライバーを介してマウントされた FSx ボリュームは、AWS Backup ではバックアップできません。

S3 プレフィックスの制限:バックアップでは、Amazon S3 バケット内の特定のプレフィックスはサポートされず、バケット全体のみをバックアップできます。

S3 スナップショットのみ:EKS バックアップの一部として作成される S3 バックアップは、スナップショットタイプに限定されます。

AWS Outposts のサポートなし: AWS Outposts 上で実行されている EKS クラスターはサポートされていません。

インフラストラクチャおよびイメージのバックアップ不可: EKS バックアップでは、VPC、サブネット、および Amazon ECR やその他のレジストリにあるコンテナイメージは対象外となります。

コールドストレージへの移行は一部のみ対応: コールドストレージに移行できるのは、永続ボリュームのリカバリポイントのみであり、複合リカバリポイントは対象外です。

バックアップのインデックス作成および検索機能なし: EKS バックアップのインデックス作成や検索に対するネイティブなサポートはありません。

クラスタ状態のバックアップはフルバックアップのみ:EKSクラスタの状態は、増分バックアップではなく、常にフルバックアップとしてバックアップされます。

クォータ制限:バックアップおよび復元ジョブにはAWS Backupサービスのクォータが適用され、大規模な運用に影響を与える可能性があります。

これらの制限事項は、特に高度な復旧やハイブリッド環境において、AWS Backupの機能を他のツールと併せて評価する必要性を浮き彫りにしています。

チュートリアル #2: N2WS によるポリシー主導型の EKS バックアップ

AWS Backup のネイティブ EKS 統合機能は基本的な機能はカバーしていますが、大きな制限があります。それは、EKS を単独でしか管理できないという点です。RDS データベース、EC2 インスタンス、EKS クラスターなど、すべてをまとめて保護(および復旧)する必要がある環境の場合、別々のツールやワークフローを使ってそれらを調整することになります。

N2WSのEKSバックアップの仕組み

N2Wは異なるアプローチを採用しています。Veleroを使用してKubernetesレイヤーのバックアップと復旧を処理し、それを他のすべてのAWSリソースで使用するのと同じポリシーエンジンに直接統合します。

その結果:1つのポリシーで、WordPressデプロイメントを実行しているEKSネームスペースおよびそれに依存するRDSデータベースをバックアップできます。つまり、スケジュールされ、自動化され、単一の単位として復旧可能です。

このアーキテクチャにより、N2WSはAWS BackupのネイティブEKSサポートが持ついくつかの制限を受けません。具体的には、5ネームスペースという復元上限がなく、復旧時のネームスペース名変更がサポートされ、クラスタースコープのリソースを選択的に復元できます。

前提条件

N2WSポリシーにEKSを追加する前に、Veleroを一度だけセットアップしてインストールする必要があります。詳細な手順については、ドキュメント内のVeleroガイドを参照してください。最低限、以下が必要です:

●Kubernetesマニフェストを保存するためのS3バケット

●IRSAまたはEKS Pod Identity経由で構成された、S3およびEBSスナップショットの権限を持つIAMロール

●クラスターにインストールされたvelero-plugin-for-aws

●VPCとEKS APIエンドポイント間のネットワーク接続(アウトバウンドHTTPS、ポート443)

●VeleroネームスペースをスコープとするAmazonEKSClusterAdminPolicyを持つ、N2WインスタンスのIAMロール用のEKSアクセスエントリ

本番環境では、IRSAが推奨される認証方法です。クラスターにOIDCプロバイダーが設定されていない場合、EKS Pod Identityの方が設定が簡単です。

ステップ 1: ポリシーに EKS リソースを追加する

  1. N2WSコンソールで、ポリシー に移動し、ポリシーを開くか作成します。
  2. バックアップ対象 タブを選択し、バックアップ対象の追加 をクリックします。
  3. クラスター全体(すべてのネームスペース、クラスタースコープのリソース、および永続ボリューム)をバックアップするには EKS クラスター を、特定のネームスペースのみを対象とする場合は EKS ネームスペース を選択します。
  4. リストからクラスターまたはネームスペースを選択します。
  5. 他のリソースタイプと同様に、スケジュール、保持期間、ライフサイクル設定を構成します。

EKSを同じポリシー内の他のAWSリソース(例:EKSネームスペースと、アプリケーションが依存するRDSインスタンス)と組み合わせるには、同じポリシー内で両方をバックアップ対象として追加するだけです。これらは同じスケジュールでバックアップされ、一緒に管理されます。

ステップ 2: EKS クラスターまたはネームスペースの復元

  1. Backup Monitor で、AWS Cloud ビューを選択します。
  2. バックアップの検索 ボックスを使用して、リソース ID またはタグ値で EKS リソースを検索します。
  3. インスタンス別 リストを使用してリソースタイプでフィルタリングします。EKS クラスター または EKS ネームスペース を選択します。
  4. リソースを選択し、リストからバックアップを選択して、復元 をクリックします。
  5. 表示されるリストから、対象のクラスター名を選択します。

クラスター全体を復元するには: クラスターのバックアップを選択します。これにより、すべてのネームスペース、ワークロード、永続ボリューム、およびオプションでクラスタースコープのリソースが復元されます。

特定のネームスペースを復元するには:

1. ネームスペースタブを選択します。

    2. クラスタースコープのリソース(ClusterRoles、ClusterRoleBindings、CRD)を含めるには、クラスターリソースを含めるにチェックを入れます。これは、新しいクラスターまたは空のクラスターに復元する場合に推奨されます。既存のクラスターに復元する場合は、競合を避けるためにチェックを外しておいてください。

    3. Namespace Name リストから 1 つ以上のネームスペース名を選択します。

    4. 必要に応じて、Target Namespace Name フィールドを使用して各ネームスペースの名前を変更します。これは、稼働中の環境を上書きせずに同じクラスターに復元する場合に便利です。

    5. Recover をクリックします。

    それぞれの適した場面は

    EKSが唯一のワークロードであり、AWSの「プランとリソース割り当て」モデルに満足している場合は、Native AWS Backupが適しています。セットアップの手間は少なく、運用もシンプルに維持できます。

    N2WSは、EKSがより大規模なAWS環境の一部であり、それらをまとめてバックアップ、復元、リカバリする必要がある場合に適しています。v4.6リリースでは、EKS向けにリージョン間およびアカウント間のDR機能が追加されたため、EC2フリートやRDSデータベースを保護するポリシーと同じものが、Kubernetesワークロードに対しても同等の耐障害性で適用されるようになりました。

    その利点が明白になる2つのシナリオ:

    1. AWS Backupの5ネームスペース制限を超えるネームスペースの復元。
    2. EKS、RDS、EC2を、スクリプトによる回避策を講じることなく、クリーンなDRアカウントに復旧させる必要があるリージョナル障害。

    N2WSについて

    関連トピックス

    コメントを残す

    メールアドレスが公開されることはありません。 が付いている欄は必須項目です

     

    このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください