View a markdown version of this page

Kubernetes ボリュームストレージ用の Amazon EC2 インスタンスストア - Amazon EKS

このページの改善にご協力ください

このユーザーガイドに貢献するには、すべてのページの右側のペインにある「GitHub でこのページを編集する」リンクを選択してください。

Kubernetes ボリュームストレージ用の Amazon EC2 インスタンスストア

Amazon EC2 Instance Store CSI ドライバーは、Kubernetes での EC2 インスタンスストアボリュームの使用を可能にするコンテナストレージインターフェイス (CSI) プラグインです。インスタンスストアボリュームは、ホストコンピュータに物理的にアタッチされた一時的なブロックレベルストレージを提供します。このドライバーは、それらの NVMe ストレージボリュームのライフサイクルを管理し、Kubernetes 永続ボリュームとして利用できるようにします。

Amazon EC2 Instance Store CSI ドライバーは、ローカルの Linux オペレーションを通じてバックエンドの NVMe デバイスとやり取りします。AWS API コールは伴わないため、IAM ロールは必要ありません。

考慮事項

重要

Amazon EC2 Instance Store CSI ドライバーをインストールすると、インストール中にエフェメラルディスク上のデータはすべて消去されます。別の CSI ドライバーやボリューム管理システム (LVM、raw ファイルシステム、LUKS など) でエフェメラルディスクを管理している場合は、データが失われないように、Amazon EC2 Instance Store CSI ドライバーをインストールする前にデータをバックアップしてください。

  • Amazon EC2 Instance Store CSI ドライバーは EKS オートモードでは機能しません。

  • Amazon EC2 インスタンスストアボリュームを Fargate ポッドにマウントすることはできません。

  • Amazon EC2 Instance Store CSI ドライバーは、次のインスタンスタイプでは使用できません。C1、C3、C4、C5d、C5ad、C6gd、D2、D3、D3en、DL1、E3、Edge1gd、F1、G2、G3、G4ad、G4dn、H1、HSM1、I2、I3、I3.metal、I3en、M1、M2、M3、M4、M5d、M5ad、M5dn、M6gd、P2、P3、P3dn、P4d、P4de、R3、R4、R5d、R5ad、R5dn、R6gd、T1、T2、X1、X1e、X2gd、Z1d。

  • 最新のアドオンバージョンと 1 つ前のバージョンがサポートされます。最新バージョンで見つかったバグや脆弱性の修正は、新しいマイナーバージョンの以前のリリースにバックポートされます。

  • インスタンスストレージは一時的なものです。ノードが終了した時点でデータは失われます。重要なデータについては、アプリケーションレベルのレプリケーションまたはバックアップを実施してください。

  • ボリューム拡張はサポートされません。

  • ワークロード間で帯域幅を公平に共有できるように、I/O スロットリングがすべてのボリュームでデフォルトで有効になっています。詳細については、「I/O スロットリング」を参照してください。

  • インスタンスを新たに起動すると、同じタイプの古いインスタンスと比較すると、NVMe 識別コマンドレスポンスが更新されています。ツーリングが特定の NVMe 識別値に依存している場合は、ロジックの互換性を確認してください。詳細については、「新たに起動したインスタンスでの NVMe 名前空間の変更」を参照してください。

前提条件

作業を開始する前に、次の項目があることを確認します。

  • 既存の Amazon EKS クラスター。アドオンの使用可能なすべてのバージョンを表示するには、次の AWS CLI コマンドを実行します。

    aws eks describe-addon-versions --addon-name aws-ec2-local-instance-store-csi-driver

Amazon EC2 Instance Store CSI ドライバーをインストールする

Amazon EC2 Instance Store CSI ドライバーは Amazon EKS のアドオンとして提供されています。ドライバーをインストールすると、クラスターでポッドストレージにインスタンスストアボリュームを使用できるようになります。

ドライバーをインストールするには、Amazon EC2 Instance Store CSI ドライバーアドオンをクラスターに追加します。手順については、「Amazon EKS アドオンを作成する」を参照してください。EKS アドオンの詳細については、「Amazon EKS アドオン」を参照してください。

サンプルアプリケーションをデプロイする

ドライバーをインストールしたら、サンプルアプリケーションをデプロイして、インスタンスストアボリュームがクラスターで正しく機能することを確認できます。さまざまなサンプルアプリケーションをデプロイし、必要に応じて変更できます。

I/O スロットリング

Amazon EC2 インスタンスストア CSI ドライバーには、同じ NVMe コントローラー上のワークロード間で帯域幅を公平に共有できるように I/O スロットリングが組み込まれています。スロットリングは、デフォルトですべてのボリュームで有効になっています。単一のワークロードが、同じノード上の他のワークロードを犠牲にして I/O 帯域幅を不均衡に消費するのを防ぎます。

スロットリングの設定

スロットリングは、2 つのレベルで設定できます。

  • StorageClass パラメータ – StorageClass 定義で throttling パラメータを "true" (デフォルト) または "false" に設定します。

  • PVC 注釈 – 個々の PersistentVolumeClaims で lis.csi.aws.com/throttling 注釈を "true"または "false" に設定します。これにより、StorageClass 設定が存在していれば上書きされます。

次の表に、StorageClass パラメータと PVC 注釈がどのように相互作用するかを示します。

PVC 注釈 StorageClass パラメータ 結果

未設定

未設定

スロットリングが有効 (デフォルト)

未設定

"false"

スロットリングが無効

"false"

"true" または未設定

スロットリングが無効

"true"

"false"

スロットリングの有効化

スロットリングされない StorageClass の作成

StorageClass 内のすべてのボリュームでスロットリングを無効にするには:

apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ec2-instance-store-unthrottled provisioner: lis.csi.aws.com parameters: throttling: "false" volumeBindingMode: WaitForFirstConsumer

単一の PVC のスロットリングの無効化

スロットリングされている StorageClass を使用すると共に、個々の PVC のスロットリングを無効にするには:

apiVersion: v1 kind: PersistentVolumeClaim metadata: name: high-perf-pvc annotations: lis.csi.aws.com/throttling: "false" spec: accessModes: - ReadWriteOnce storageClassName: ec2-instance-store-sc resources: requests: storage: 100Gi

スロットリングについての考慮事項

  • NVMe コントローラーを共有するすべてのワークロードに予測可能なパフォーマンスを提供できるように、スロットリングがデフォルトで有効になっています。

  • ボリュームのスロットリングを無効にすると、消費できる I/O 帯域幅が増えますが、同じコントローラーにある他のスロットリングされたボリュームのパフォーマンスに影響が及ぶ可能性があります。

  • スロットリングされていないワークロードを専用のノードに分離することを検討してください。

  • RAID-0 ボリュームが複数のコントローラーにまたがっている場合、スロットリングはすべてのメンバーパーティションに適用されます。

  • スロットリングの状態は、ノードの再起動後も維持されます。

新たに起動したインスタンスでの NVMe 名前空間の変更

ローカルインスタンスストレージを備えた EC2 インスタンスを新たに起動すると、NVMe の識別コントローラーと名前空間識別のコマンドレスポンスが更新されます。この更新により、EC2 ローカルインスタンスストレージで NVMe 名前空間の管理がサポートされます。既に実行されているインスタンスは影響を受けず、値はインスタンスのライフサイクルを通じて安定しています。

フィールド値の更新

新たに起動したインスタンスでは、同じタイプの古いインスタンスと比較すると、次のフィールドが変更されています。

識別コントローラー (nvme id-ctrl)
  • OACS のビット 3: 0 から 1 に変更

  • OAES のビット 8: 0 から 1 に変更

  • NN: 1 から 256 以下の値に変更

  • TNVMCAP: 0 からローカルストレージの実際のサイズに変更

識別名前空間 (nvme id-ns)
  • NVMCAP: 0 からローカルストレージの実際のサイズに変更

  • NGUID: すべてゼロから有効な NGUID に変更

更新された値は、すべて NVMe 仕様に準拠しています。

変更の範囲

いずれの変更も、EC2 ローカルインスタンスストレージにのみ適用されます。Amazon EBS ボリュームは影響を受けません。EBS ボリュームとローカルインスタンスストレージとを区別するには、次のコマンドを実行します。

sudo nvme list

出力では、次のようになります。

  • Amazon Elastic Block Store = EBS ボリューム

  • Amazon EC2 NVMe Instance Storage = ローカルインスタンスストレージ

NVMe 識別値の取得

nvme-cli を使用してこれらの値をクエリするには:

# Identify Controller sudo nvme id-ctrl /dev/nvme1 # Identify Namespace sudo nvme id-ns /dev/nvme1n1

必要なアクション

アクションは必要ありません。これらの変更は、下位互換性があり、NVMe 仕様に準拠しています。ただし、アプリケーションやツーリングが NVMe 識別コマンドの特定の値を検証する場合や特定の値に依存している場合は、ロジックを確認して、新たに起動したインスタンスで更新された値との互換性を確認してください。