

 **協助改進此頁面** 

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

若要為本使用者指南貢獻內容，請點選每個頁面右側面板中的**在 GitHub 上編輯此頁面**連結。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 適用於 Kubernetes 磁碟區儲存的 Amazon EC2 執行個體存放區
<a name="lis-csi"></a>

Amazon EC2 執行個體存放區 CSI 驅動程式是一種容器儲存介面 (CSI) 外掛程式，可讓 Kubernetes 使用 EC2 執行個體存放磁碟區。執行個體存放區磁碟區提供實體連接至主機電腦的暫時性區塊層級儲存。驅動程式會管理這些 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、原始檔案系統、LUKS 等） 正在管理暫時性磁碟，請在安裝 Amazon EC2 執行個體存放區 CSI 驅動程式之前備份您的資料，以避免資料遺失。
+ Amazon EC2 執行個體存放區 CSI 驅動程式不適用於 EKS Auto 模式。
+ 您無法將 Amazon EC2 執行個體存放區磁碟區掛載至 Fargate Pod。
+ 下列執行個體類型無法使用 Amazon EC2 執行個體存放區 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、M5adM5dn、M6gd、P2、P3、P3dn、P4d、P4de、R3、R4、R5d、 R5adR5dn、R6gd、T1T2、X1、X1d、X2gdZ1dX1e
+ 支援最新的附加元件版本和一個舊版。針對最新版本中發現的錯誤或漏洞的修正，會以新的次要版本的形式回溯至先前的版本。
+ 執行個體儲存體是暫時性的。當節點終止時，資料會遺失。實作關鍵資料的應用程式層級複寫或備份。
+ 不支援磁碟區擴展。
+ 根據預設，所有磁碟區都會啟用 I/O 限流，以確保跨工作負載的公平頻寬共用。如需詳細資訊，請參閱[I/O 限流](#lis-csi-throttling)。
+ 相較於相同類型的較舊執行個體，新啟動的執行個體已更新 NVMe 識別命令回應。如果您的工具取決於特定的 NVMe 識別值，請檢閱邏輯的相容性。如需詳細資訊，請參閱[新啟動的執行個體上的 NVMe 命名空間變更](#lis-csi-nvme-namespace)。

## 先決條件
<a name="lis-csi-prereqs"></a>

開始前，請確定您具有下列項目：
+ 現有 Amazon EKS 叢集。若要查看所有可用的附加元件版本，請執行下列 CLI AWS 命令：

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

## 安裝 Amazon EC2 執行個體存放區 CSI 驅動程式
<a name="managing-lis-csi"></a>

Amazon EC2 執行個體存放區 CSI 驅動程式可作為 Amazon EKS 附加元件使用。安裝驅動程式可讓您的叢集使用執行個體儲存體磁碟區進行 Pod 儲存。

若要安裝驅動程式，請將 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 Instance Store CSI 驅動程式包含內建 I/O 限流，以確保在同一 NVMe 控制器上跨工作負載公平共用頻寬。預設會針對所有磁碟區啟用調節，防止任何單一工作負載使用不成比例的 I/O 頻寬，而犧牲相同節點上的其他工作負載。

### 設定限流
<a name="lis-csi-throttling-config"></a>

您可以在兩個層級設定限流：
+  **StorageClass 參數** – 在 StorageClass 定義`"false"`中將 `throttling` 參數設定為 `"true"`（預設） 或 。
+  **PVC 註釋** – 將`lis.csi.aws.com/throttling`註釋設定為個別 PersistentVolumeClaims `"false"`上的 `"true"`或 。這會在存在時覆寫 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 識別命令的特定值，請檢閱您的邏輯，以確保與新啟動執行個體上更新的值相容。