

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

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

# Kubernetes ボリュームストレージ用の Amazon EC2 インスタンスストア
<a name="lis-csi"></a>

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

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

## 考慮事項
<a name="lis-csi-considerations"></a>

**重要**  
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 スロットリング](#lis-csi-throttling)」を参照してください。
+ インスタンスを新たに起動すると、同じタイプの古いインスタンスと比較すると、NVMe 識別コマンドレスポンスが更新されています。ツーリングが特定の NVMe 識別値に依存している場合は、ロジックの互換性を確認してください。詳細については、「[新たに起動したインスタンスでの NVMe 名前空間の変更](#lis-csi-nvme-namespace)」を参照してください。

## 前提条件
<a name="lis-csi-prereqs"></a>

作業を開始する前に、次の項目があることを確認します。
+ 既存の Amazon EKS クラスター。アドオンの使用可能なすべてのバージョンを表示するには、次の AWS CLI コマンドを実行します。

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

## Amazon EC2 Instance Store CSI ドライバーをインストールする
<a name="managing-lis-csi"></a>

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

ドライバーをインストールするには、Amazon EC2 Instance Store CSI ドライバーアドオンをクラスターに追加します。手順については、「[Amazon EKS アドオンを作成する](creating-an-add-on.md)」を参照してください。EKS アドオンの詳細については、「[Amazon EKS アドオン](eks-add-ons.md)」を参照してください。

## サンプルアプリケーションをデプロイする
<a name="lis-sample-app"></a>

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

## I/O スロットリング
<a name="lis-csi-throttling"></a>

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

### スロットリングの設定
<a name="lis-csi-throttling-config"></a>

スロットリングは、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 の作成
<a name="lis-csi-throttling-unthrottled-sc"></a>

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 のスロットリングの無効化
<a name="lis-csi-throttling-disable-pvc"></a>

スロットリングされている 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
```

### スロットリングについての考慮事項
<a name="lis-csi-throttling-considerations"></a>
+ NVMe コントローラーを共有するすべてのワークロードに予測可能なパフォーマンスを提供できるように、スロットリングがデフォルトで有効になっています。
+ ボリュームのスロットリングを無効にすると、消費できる I/O 帯域幅が増えますが、同じコントローラーにある他のスロットリングされたボリュームのパフォーマンスに影響が及ぶ可能性があります。
+ スロットリングされていないワークロードを専用のノードに分離することを検討してください。
+ RAID-0 ボリュームが複数のコントローラーにまたがっている場合、スロットリングはすべてのメンバーパーティションに適用されます。
+ スロットリングの状態は、ノードの再起動後も維持されます。

## 新たに起動したインスタンスでの NVMe 名前空間の変更
<a name="lis-csi-nvme-namespace"></a>

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

### フィールド値の更新
<a name="_updated_field_values"></a>

新たに起動したインスタンスでは、同じタイプの古いインスタンスと比較すると、次のフィールドが変更されています。
+ OACS のビット 3: 0 から 1 に変更
+ OAES のビット 8: 0 から 1 に変更
+ NN: 1 から 256 以下の値に変更
+ TNVMCAP: 0 からローカルストレージの実際のサイズに変更
+ NVMCAP: 0 からローカルストレージの実際のサイズに変更
+ NGUID: すべてゼロから有効な NGUID に変更

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

### 変更の範囲
<a name="_scope_of_changes"></a>

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

```
sudo nvme list
```

出力では、次のようになります。
+  `Amazon Elastic Block Store` = EBS ボリューム
+  `Amazon EC2 NVMe Instance Storage` = ローカルインスタンスストレージ

### NVMe 識別値の取得
<a name="_retrieving_nvme_identify_values"></a>

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

```
# Identify Controller
sudo nvme id-ctrl /dev/nvme1

# Identify Namespace
sudo nvme id-ns /dev/nvme1n1
```

### 必要なアクション
<a name="_action_required"></a>

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