Kubernetes クラスターのストレージ オプション

この記事では、Amazon Elastic Kubernetes Service (Amazon EKS) と Azure Kubernetes Service (AKS) のストレージ機能を比較し、AKS にワークロード データを格納するオプションについて説明します。

注意

この記事は、Amazon EKS に詳しいプロフェッショナルの方を対象に、AKS についてわかりやすく説明した連載記事の一部です。

Amazon EKS ストレージ オプション

Amazon EKS では、Kubernetes バージョン 1.11 以降、永続ボリューム要求に対して gp2 という名前の既定の StorageClass がクラスターにあります。 管理者は、さらに多くのストレージ クラスを定義するために次のようなドライバーを追加できます。

  • Amazon EKS アドオンとしての Amazon EBS CSI ドライバー
  • Amazon EBS CSI の自己管理型アドオン
  • Amazon EFS CSI ドライバー
  • Amazon FSx for Lustre CSI ドライバー
  • Amazon FSx for NetApp ONTAP CSI ドライバー

ドライバーとストレージ クラスを追加することで、次のようなストレージ サービスを使用できます。

  • Amazon Elastic Block Store (Amazon EBS)。これは永続的なデータを格納するために Amazon Elastic Compute Cloud (EC2) インスタンスで使用されるブロックレベルのストレージ ソリューションです。 このサービスは、必要なパフォーマンスに応じて、Standard SSD、Premium SSD、Ultra Disk などのいくつかの SKU がある Azure Disk Storage に類似しています。

  • Amazon Elastic File System (Amazon EFS)。これはインスタンス間で共有できる外部ファイルシステムへのネットワーク ファイルシステム アクセスを提供します。 同等の Azure ソリューションは、サーバー メッセージ ブロック (SMB) 3.0 と NFS アクセスの両方がある Azure Files と Azure Files Premium です。

  • Lustre。これはハイ パフォーマンス コンピューティング (HPC) で一般的に使用されるオープン ソース ファイル システムです。 Azure では、機械学習や HPC などの速度が重要なワークロードに Ultra Disks または Azure HPC Cache を使用できます。

  • NetApp ONTAP。これはアマゾン ウェブ サービス (AWS) のフル マネージド ONTAP 共有ストレージです。 Azure NetApp Files は、NetApp テクノロジに基づいて構築された Azure の同様のファイル ストレージ サービスです。

AKS ストレージ オプション

各 AKS クラスターには、次の事前に作成されたストレージ クラスが既定で含まれています。

  • 既定のストレージ クラス managed-csi は、Disk Storage Standard SSD を使用します。 Standard SSD は、1 秒あたりの入出力操作 (IOPS) が比較的低い状態で一貫したパフォーマンスを必要とするワークロード向けに最適化されたコスト効率の高いストレージ オプションです。
  • managed-csi-premium クラスは、Disk Storage Premium SSD マネージド ディスクを使用します。
  • azurefile-csi クラスは、Azure Files を使用し、SMB または NFS を使用することで、同じストレージ ボリュームへの同時共有アクセスを提供します。
  • azurefile-csi-premium クラスは、IOPS 集中型のワークロードがあるファイル共有に Azure Files Premium を使用します。 Azure Files Premium は、SSD ストレージを利用して、短い待機時間と高いスループットを提供します。

これらのオプションを拡張するには、他のストレージ クラスを追加し、次のような他の使用可能なストレージ ソリューションと統合します。

  • Ultra Disk Storage
  • Azure NetApp Files
  • HPC Cache
  • NFS サーバー
  • サード パーティのストレージ ソリューション

Azure Disk Storage

既定では、AKS クラスターには、Disk Storage を使用する事前に作成された managed-csimanaged-csi-premium というストレージ クラスが付属しています。 Amazon EBS と同様に、これらのクラスでは、ポッド アクセス用にノードに接続されるマネージド ディスクまたはブロック デバイスが作成されます。

Disk Storage ストレージ クラスを使用すると、静的動的の両方のボリューム プロビジョニングが可能になります。 解放ポリシーにより、永続ボリュームとともにディスクが確実に削除されます。 永続ボリューム要求を編集することで、ディスクを拡張できます。

これらのストレージ クラスは、ローカル冗長ストレージ (LRS) がある Azure マネージド ディスクを使用します。 LRS は、データが Azure プライマリ リージョンの 1 つの物理的な場所に 3 つの同期コピーを持っていることを意味します。 LRS は最もコストの低いレプリケーション オプションですが、データセンターの障害に対する保護は提供されません。 このリスクを軽減するには、組み込みのスナップショット テクノロジを使用できる VeleroAzure Backup などのソリューションを使用して、Disk Storage データの定期的なバックアップまたはスナップショットを作成してください。

両方のストレージ クラスはマネージド ディスクによってサポートされ、いずれもソリッド ステート ディスク (SSD) ドライブを使用します。 Standard と Premium のディスクの違いを理解することが重要です。

  • Standard ディスクは、サイズとストレージ トランザクションに基づいて価格が設定されます。
  • Premium ディスクはサイズによってのみ課金されるため、大量のトランザクションを必要とするワークロードでは比較的安くなる可能性があります。
  • Premium SSD では、この比較に示すように、最大のスループットと IOPS が高くなります。
  • ほとんどの運用と開発のワークロードには Premium ストレージをお勧めします。

プライマリ ストレージ クラスとして Azure マネージド ディスクを使用する場合は、Kubernetes クラスターに選択する仮想マシン (VM) SKU を考慮してください。 Azure VM には、接続できるディスクの数が制限されていて、制限は VM サイズによって異なります。 また、Azure ディスクは ReadWriteOnce としてマウントされるため、1 つのポッドでしか使用できません。

Azure Premium SSD v2 ディスク

Azure Premium SSD v2 ディスクは、IO の負荷の高いエンタープライズ ワークロード、ミリ秒未満の安定したディスク待機時間、高い IOPS とスループットを実現します。 Premium SSD v2 ディスクのパフォーマンス (容量、スループット、IOPS) は、いつでも個別に構成できるため、多くのシナリオで、パフォーマンスのニーズを満たしながら、高いコスト効率の実現が容易になります。 Azure Premium SSD v2 ディスクを使用するように新規または既存の AKS クラスターを構成する方法の詳細については、「Azure Kubernetes Service で Azure Premium SSD v2 ディスクを使用する」を参照してください。

Ultra Disk Storage

Ultra Disk Storage は、Azure VM に対して高いスループット、高い IOPS、一貫して短い待機時間のディスク ストレージを提供する Azure マネージド ディスク層です。 Ultra Disk Storage は、データとトランザクションの負荷が高いワークロードを対象としています。 他の Disk Storage SKU や Amazon EBS と同様に、Ultra Disk Storage は一度に 1 つのポッドをマウントし、同時アクセスは提供しません。

AKS クラスターで Ultra Disk Storage を有効にするには、フラグ --enable-ultra-ssd を使用します。

Ultra Disk Storage を選択した場合は、その制限事項に注意し、互換性のある VM サイズを選択するようにしてください。 Ultra Disk Storage では、ローカル冗長ストレージ (LRS) レプリケーションを使用できます。

独自のキーの使用 (BYOK)

Azure では、保存中のマネージド ディスク内のすべてのデータが暗号化されます。 規定では、データは Microsoft のマネージド キーで暗号化されます。 暗号化キーの制御を強化するために、AKS クラスターの OS ディスクとデータ ディスクの両方の暗号化に使用する目的でカスタマーマネージド キーを提供できます。 詳細については、「Azure Kubernetes Service (AKS) の Azure マネージド ディスクで独自のキーを使用する (BYOK)」を参照してください。

Azure Files

Disk Storage はボリュームへの同時アクセスを提供できませんが、Azure Files を使用し、SMB プロトコルを使用することで接続して、Azure Storage によってサポートされる共有ボリュームをマウントできます。 このプロセスにより、Amazon EFS に類似したネットワーク接続ストレージが提供されます。 Disk Storage と同様に、次の 2 つのオプションがあります。

  • Azure Files Standard ストレージは、通常のハード ディスク ドライブ (HDD) によってサポートされます。
  • Azure Files Premium ストレージは、高パフォーマンス SSD ドライブでファイル共有をサポートします。 Premium のファイル共有の最小サイズは 100 GB です。

Azure Files には、障害が発生した場合にデータを保護するための次のストレージ アカウント レプリケーション オプションがあります。

Azure Files のコストを最適化するには、Azure Files 容量予約を購入します。

Azure Container Storage

Azure Container Storage は、コンテナー用にネイティブに構築されたクラウドベースのボリューム管理、デプロイ、オーケストレーション サービスです。 Kubernetes と統合されているため、永続ボリュームを動的かつ自動的にプロビジョニングして、Kubernetes クラスターで実行されているステートフル アプリケーションのデータを格納できます。

Azure Container Storage は、既存の Azure Storage オファリングを実際のデータ ストレージに利用して、コンテナー向けに構築されたボリューム オーケストレーションおよび管理ソリューションを提供します。 サポートされているバッキング ストレージ オプションは次のとおりです。

  • Azure ディスク: ストレージの SKU と構成をきめ細かく制御します。 階層 1 および汎用データベースに適しています。
  • エフェメラル ディスク: AKSノード (NVMe または一時 SSD) 上のローカル ストレージ リソースを利用します。 データ持続性の要件がないアプリケーションや、組み込みのデータ レプリケーション サポートを備えたアプリケーションに最適です。 AKS は、AKS ノード上の使用可能なエフェメラル ストレージを検出し、ボリューム デプロイ用に取得します。
  • Azure Elastic SAN: オンデマンドのフル マネージド リソースをプロビジョニングします。 汎用データベース、ストリーミングおよびメッセージング サービス、CD/CI 環境、およびその他の階層 1/階層 2 のワークロードに適しています。 複数のクラスターが 1 つの SAN に同時にアクセスできますが、永続ボリュームには一度に 1 つのコンシューマーのみがアタッチできます。

これまでは、コンテナー用のクラウド ストレージを提供するには、IaaS 中心のワークロード向けのストレージ サービスを使用してコンテナーで機能させるために、個別のコンテナー ストレージ インターフェイス (CSI) ドライバーを使用する必要がありました。 これにより、運用上のオーバーヘッドが発生し、アプリケーションの可用性、スケーラビリティ、パフォーマンス、使いやすさ、コストの問題が発生するリスクが高まります。

Azure Container Storage は、Kubernetes 用のコンテナー ストレージ機能を提供するオープンソース ソリューションである OpenEBS から派生しています。 Kubernetes 環境でマイクロサービスベースのストレージ コントローラーを介してマネージド ボリューム オーケストレーション ソリューションを提供することで、Azure Container Storage は真のコンテナー ネイティブ ストレージを実現します。

Azure Container Storage は次のシナリオに適しています。

  • VM からコンテナーへのイニシアティブを加速: Azure Container Storage は、以前は VM でしか使用できなかった Azure ブロック ストレージ オファリングの制限をなくし、コンテナーで使用できるようにします。 これには、Cassandra などのワークロードで待機時間を極小にするエフェメラル ディスクや、ネイティブ iSCSI ターゲットと共有プロビジョニング ターゲットを提供する Azure Elastic SAN が含まれます。

  • Kubernetes によってボリューム管理を簡素化: Azure Container Storage は、Kubernetes コントロール プレーンを介したボリューム オーケストレーションを提供することで、Kubernetes 内でのボリュームのデプロイと管理を容易にし、異なるコントロール プレーン間を行き来する必要をなくします。

  • 総保有コスト (TCO) を削減: ポッドまたはノードごとにサポートされる永続ボリュームのスケールを増やすことで、コスト効率を向上させます。 ストレージ リソースを動的に共有することで、プロビジョニングに必要なストレージ リソースを減らします。 ストレージ プール自体のスケールアップはサポートされていないことに注意してください。

Azure Container Storage の主な利点は次のとおりです。

  • ステートフル ポッドの迅速なスケールアウト: Azure Container Storage は、ネットワーク ブロック ストレージ プロトコル (NVMe-oF または iSCSI) 経由で永続ボリュームをマウントし、永続ボリュームの高速なアタッチとデタッチを実現します。 小規模から始めて、初期化中または運用中にアプリケーションでリソースが不足したり動作が中断したりしないことを確認しながら、必要に応じてリソースをデプロイできます。 クラスター全体でポッドが再生成されるため、アプリケーションの回復性が向上し、永続ボリュームの迅速な移動が必要になります。 リモート ネットワーク プロトコルを利用して、Azure Container Storage はポッドのライフサイクルと密接に結び付き、回復性とスケールが高いステートフル アプリケーションを AKS 上でサポートします。

  • ステートフル ワークロードのパフォーマンス向上: Azure Container Storage は、RDMA 経由の NVMe-oF を使用して、優れた読み取りパフォーマンスと、ディスクに近い書き込みパフォーマンスを実現します。 これにより、ティア 1 I/O 集中型、汎用、スループット重視、開発/テストなどのさまざまなコンテナー ワークロードのパフォーマンス要件を、優れたコスト効率で満たすことができます。 永続ボリュームのアタッチ/デタッチ時間を短縮し、ポッドのフェールオーバー時間を最小限に抑えます。

  • Kubernetes ネイティブのボリューム オーケストレーション: kubectl コマンドを使用して、さまざまなコントロール プレーン操作用のツールセットを切り替えることなく、ストレージ プールと永続ボリュームを作成し、スナップショットをキャプチャし、ボリュームのライフサイクル全体を管理します。

Azure NetApp Files

AWS NetApp ONTAP と同様、Azure NetApp Files は、エンタープライズクラスのパフォーマンスが高い従量制課金ファイル ストレージ サービスです。 Azure NetApp Files は、NetApp ソリューションを使用して Azure で全面的に管理されます。 Azure Files と同様に、Azure NetApp Files では複数のポッドがボリュームをマウントできます。 Kubernetes 用のオープン ソースの動的ストレージ オーケストレーターである Astra Trident を使用して、Azure NetApp Files を使用するように AKS クラスターを構成できます。

Azure NetApp Files のリソース制限」に注意してください。 Azure NetApp Files の容量プールの最小サイズは 4 TiB です。 Azure NetApp Files では、使用容量ではなく、プロビジョニングされたサイズ別に課金されます。

Azure HPC Cache

Azure HPC Cache は、クラウド ソリューションのすべてのスケーラビリティを駆使して、HPC タスク用にデータへのアクセスを高速化します。 このストレージ ソリューションを選択する場合は、Azure HPC キャッシュをサポートするリージョンに AKS クラスターをデプロイするようにしてください。

NFS サーバー

共有 NFS アクセスに最適なオプションは、Azure Files または Azure NetApp Files を使用することです。 ボリュームをエクスポートする Azure VM 上に NFS サーバーを作成することもできます。

このオプションでは静的プロビジョニングのみがサポートされることに注意してください。 NFS 共有はサーバー上で手動でプロビジョニングする必要があり、AKS から自動的にはできません。

このソリューションは、サービスとしてのプラットフォーム (PaaS) ではなく、サービスとしてのインフラストラクチャ (IaaS) に基づいています。 OS の更新、高可用性、バックアップ、ディザスター リカバリー、スケーラビリティなどの、NFS サーバーの管理はお客様が行う必要があります。

エフェメラル OS ディスク

既定では、VM を別のホストに再配置するときにデータの損失を防ぐために、Azure によって仮想マシンのオペレーティング システム ディスクが Azure Storage に自動的にレプリケートされます。 ただし、コンテナーはローカルの状態を永続化するように設計されていないため、この動作の価値は限定的であり、いくつかの欠点があります。 これらの欠点には、ノードのプロビジョニング速度の低下や読み取り/書き込みの待機時間の短縮などがありますが、これらに限定されません。

これに対して、エフェメラル OS ディスクは、一時ディスクと同様に、ホスト マシンにのみ格納されます。 この構成では、読み取り/書き込みの待機時間が短縮されるとともに、ノードのスケーリングやクラスターのアップグレードが高速になります。

注意

OS 用に Azure マネージド ディスクを明示的に要求しないと、AKS は、指定されたノード プール構成で可能であれば、既定でエフェメラル OS を使います。

詳細については、以下を参照してください:

サードパーティ ソリューション

Amazon EKS と同様に、AKS は Kubernetes の実装であり、サード パーティの Kubernetes ストレージ ソリューションを統合できます。 Kubernetes 用のサード パーティ製ストレージ ソリューションの例を次に示します。

  • Rook は、ストレージ管理者タスクを自動化することで、分散ストレージ システムを自己管理型ストレージ サービスに変換します。 Rook は、各ストレージ プロバイダーの Kubernetes オペレーター経由でサービスを提供します。
  • GlusterFS は、一般的な既製ハードウェアを使用して、データ負荷が高く帯域幅を集中的に消費するタスク向けの大規模な分散ストレージ ソリューションを作成する、無料でオープンソースのスケーラブルなネットワーク ファイル システムです。
  • Ceph は、汎用的なハードウェア コンポーネントから構築された 1 つのクラスターのオブジェクト、ブロック、およびファイル インターフェイスがある、信頼性と拡張性の高い統合ストレージ サービスを提供します。
  • MinIO マルチクラウド オブジェクト ストレージにより、企業は任意のクラウドで AWS S3 と互換性のあるデータ インフラストラクチャを構築でき、データとアプリケーションに一貫性のある移植可能なインターフェイスが提供されます。
  • Portworx は、Kubernetes プロジェクトとコンテナー ベースのイニシアティブのためのエンド ツー エンドのストレージとデータの管理ソリューションです。 Portworx は、コンテナー単位のストレージ、ディザスター リカバリー、データ セキュリティ、マルチクラウド移行を提供します。
  • Quobyte は、パフォーマンスのスケーリング、大量のデータの管理、管理の簡素化のために、任意のサーバーまたはクラウドにデプロイできる高パフォーマンスのファイルおよびオブジェクトのストレージを提供します。
  • Ondat は、あらゆるプラットフォームに一貫したストレージ レイヤーを提供します。 ストレージ レイヤーを管理しなくても、Kubernetes 環境でデータベースまたは永続的なワークロードを実行できます。

Kubernetes ストレージに関する考慮事項

Amazon EKS または AKS のストレージ ソリューションを選択するときは、次の要因を考慮してください。

ストレージ クラスのアクセス モード

Kubernetes バージョン 1.21 以降では、AKS および Amazon EKS のストレージ クラスで、Container Storage Interface (CSI) ドライバーのみが既定で使用されます。

サービスが異なると、アクセス モードが異なるストレージ クラスがサポートされます。

サービス ReadWriteOnce ReadOnlyMany ReadWriteMany
Azure ディスク X
Azure Files X X X
Azure NetApp Files X X X
NFS サーバー X X X
Azure HPC Cache X X X

動的と静的のプロビジョニング

ボリュームを動的にプロビジョニングして、永続ボリュームを静的に作成する管理オーバーヘッドを軽減します。 ポッドを削除するときに未使用のディスクが発生しないように、適切な解放ポリシーを設定します。

Backup

永続的なデータをバックアップするツールを選択します。 ツールは、スナップショット、Azure BackupVeleroKasten などのストレージの種類に適合する必要があります。

コスト最適化

Azure Storage のコストを最適化するには、Azure 予約を使用します。 Azure の予約をサポートするサービスを確認してください。 Kubernetes クラスターのコスト管理に関するページも参照してください。

共同作成者

この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。

プリンシパルの作成者:

その他の共同作成者:

  • Chad Kittel | プリンシパル ソフトウェア エンジニア
  • Ed Price | シニア コンテンツ プログラム マネージャー
  • Theano Petersen | テクニカル ライター

パブリックでない LinkedIn プロファイルを表示するには、LinkedIn にサインインします。

次のステップ