

 **協助改進此頁面** 

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

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

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

# 建立儲存類別
<a name="create-storage-class"></a>

在 Amazon EKS 自動模式中，`StorageClass` 定義了當應用程式請求持久性儲存時，如何自動佈建 Amazon EBS 磁碟區。本頁面闡釋了如何建立和設定與 Amazon EKS 自動模式協同工作的 `StorageClass`，以佈建 EBS 磁碟區。

透過設定 `StorageClass`，您可為 EBS 磁碟區指定預設設定，包括磁碟區類型、加密、IOPS 和其他儲存參數。您也可以`StorageClass`將 設定為使用 AWS KMS 金鑰進行加密管理。

EKS 自動模式不會為您建立 `StorageClass`。您必須建立 `StorageClass` 參考 `ebs.csi.eks.amazonaws.com`，以使用 EKS 自動模式的儲存功能。

首先，建立名為 `storage-class.yaml` 的檔案：

```
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: auto-ebs-sc
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
allowedTopologies:
- matchLabelExpressions:
  - key: eks.amazonaws.com/compute-type
    values:
    - auto
provisioner: ebs.csi.eks.amazonaws.com
volumeBindingMode: WaitForFirstConsumer
parameters:
  type: gp3
  encrypted: "true"
```

接著，將儲存體方案套用至您的叢集。

```
kubectl apply -f storage-class.yaml
```

 **關鍵元件：**
+  `provisioner: ebs.csi.eks.amazonaws.com` - 使用 EKS 自動模式
+  `allowedTopologies` - 指定 `eks.amazonaws.com/compute-type:auto` 來匹配 `matchLabelExpressions`，將確保如果您的 Pod 需要使用自動模式自動佈建磁碟區，則這些 Pod 不會被排程到非自動節點上。
+  `volumeBindingMode: WaitForFirstConsumer` - 延遲建立磁碟區，直至 Pod 需要磁碟區
+  `type: gp3` - 指定 EBS 磁碟區類型
+  `encrypted: "true"` - EBS 將加密使用此 `StorageClass` 建立的所有磁碟區。EBS 將使用預設的 `aws/ebs` 金鑰別名。如需詳細資訊，請參閱《Amazon EBS 使用者指南》中的 [Amazon EBS 加密運作方式](https://docs.aws.amazon.com/ebs/latest/userguide/how-ebs-encryption-works.html)。此值可選用的，但建議設定。
+  `storageclass.kubernetes.io/is-default-class: "true"` - 依預設，Kubernetes 將使用此儲存類別，除非您在持續性磁碟區宣告上指定了不同的磁碟區類別。此值是選用的。若要從其他儲存控制器移轉，則在設定該值時要謹慎對待。

## 使用自我管理的 KMS 金鑰加密 EBS 磁碟區
<a name="_use_self_managed_kms_key_to_encrypt_ebs_volumes"></a>

要使用自我管理的 KMS 金鑰來加密由 EKS 自動模式自動佈建的 EBS 磁碟區，您需要：

1. 建立自我管理的 KMS 金鑰。
   + 如需詳細資訊，請參閱《KMS 使用者指南》中的[建立對稱加密 KMS 金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-symmetric-cmk.html)或 [Amazon Elastic Block Store (Amazon EBS) 如何使用 KMS](https://docs.aws.amazon.com/kms/latest/developerguide/services-ebs.html)。

1. 建立一個允許存取 KMS 金鑰的新政策。
   + 使用下面的範例 IAM 政策來建立該政策。插入新的自我管理 KMS 金鑰的 ARN。如需詳細資訊，請參閱《IAM 使用者指南》中的[建立角色和連接政策 （主控台）](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_job-functions_create-policies.html)。 AWS 

1. 將政策附加到 EKS 叢集角色。
   + 使用 AWS 主控台尋找 EKS 叢集角色的 ARN。角色資訊在**概覽**區段中可見。如需詳細資訊，請參閱[Amazon EKS 叢集 IAM 角色](cluster-iam-role.md)。

1. 更新 `StorageClass`，以參考 `parameters.kmsKeyId` 欄位的 KMS 金鑰 ID。

### 自我管理 KMS IAM 政策範例
<a name="_sample_self_managed_kms_iam_policy"></a>

更新下方政策中的以下值：
+  `<account-id>` – AWS 您的帳戶 ID，例如 `111122223333` 
+  `<aws-region>` – 叢集 AWS 的區域，例如 `us-west-2` 

```
{
  "Version":"2012-10-17",		 	 	 
  "Id": "key-auto-policy-3",
  "Statement": [
      {
          "Sid": "Enable IAM User Permissions",
          "Effect": "Allow",
          "Principal": {
              "AWS": "arn:aws:iam::123456789012:root"
          },
          "Action": "kms:*",
          "Resource": "*"
      },
      {
        "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS",
        "Effect": "Allow",
        "Principal": {
            "AWS": "*"
        },
        "Action": [
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncrypt*",
            "kms:GenerateDataKey*",
            "kms:CreateGrant",
            "kms:DescribeKey"
        ],
        "Resource": "*",
        "Condition": {
            "StringEquals": {
                "kms:CallerAccount": "123456789012",
                "kms:ViaService": "ec2.us-east-1.amazonaws.com"
            }
        }
    }
  ]
}
```

### 自我管理的 KMS `StorageClass` 範例
<a name="_sample_self_managed_kms_storageclass"></a>

```
parameters:
  type: gp3
  encrypted: "true"
  kmsKeyId: <custom-key-arn>
```

## `StorageClass` 參數參考
<a name="_storageclass_parameters_reference"></a>

有關 Kubernetes `StorageClass` 資源的一般資訊，請參閱 Kubernetes 文件中的[儲存類別](https://kubernetes.io/docs/concepts/storage/storage-classes/)。

`StorageClass` 資源的 THe `parameters`區段是特定的 AWS。請使用下列資料表檢閱可用的選項。


| Parameters | 值 | 預設 | Description | 
| --- | --- | --- | --- | 
|  "csi.storage.k8s.io/fstype"  |  xfs、ext2、ext3、ext4  |  ext4  |  在磁碟區建立期間將被格式化的檔案系統類型。此參數有大小寫之分！  | 
|  "type"  |  io1、io2、gp2、gp3、sc1、st1、Standard、sbp1、sbg1  |  gp3  |  EBS 磁碟區類型。  | 
|  "iopsPerGB"  |  |  |  每 GiB 的每秒 I/O 操作次數。可為 IO1、IO2 和 GP3 磁碟區指定。  | 
|  "allowAutoIOPSPerGBIncrease"  |  true、false  |  false  |  當 時`"true"`，當 `iopsPerGB * <volume size>` 太低而無法符合 支援的 IOPS 範圍時，CSI 驅動程式會增加磁碟區的 IOPS AWS。這可讓動態佈建總是成功，即使使用者指定的 PVC 容量或 `iopsPerGB` 值太小。另一方面，這可能會帶來額外成本，因為此類磁碟區的 IOPS 比 `iopsPerGB` 中請求的要高。  | 
|  "iops"  |  |  |  每秒 I/O 操作。可為 IO1、IO2 和 GP3 磁碟區指定。  | 
|  "throughput"  |  |  125  |  輸送量以 MiB/秒為單位。僅在指定了 gp3 磁碟區類型時有效。  | 
|  "encrypted"  |  true、false  |  false  |  指示是否加密磁碟區。有效值為 "true" 或 "false"。  | 
|  "blockExpress"  |  true、false  |  false  |  啟用 io2 Block Express 磁碟區的建立。  | 
|  "kmsKeyId"  |  |  |  加密磁碟區時要使用的金鑰的完整 ARN。如果未指定， AWS 將針對磁碟區所在的區域使用預設 KMS 金鑰。如果未變更，這將是一個自動產生的金鑰，稱為 `/aws/ebs`。  | 
|  "blockSize"  |  |  |  格式化底層檔案系統時使用的區塊大小。僅在 Linux 節點上並使用 `ext2`、`ext3`、`ext4` 或 `xfs` 時支援。  | 
|  "inodeSize"  |  |  |  格式化底層檔案系統時使用的 inode 大小。僅在 Linux 節點上並使用 `ext2`、`ext3`、`ext4` 或 `xfs` 時支援。  | 
|  "bytesPerInode"  |  |  |  格式化底層檔案系統時使用的 `bytes-per-inode`。僅在 Linux 節點上並使用 `ext2`、`ext3`、`ext4` 時支援。  | 
|  "numberOfInodes"  |  |  |  格式化底層檔案系統時使用的 `number-of-inodes`。僅在 Linux 節點上並使用 `ext2`、`ext3`、`ext4` 時支援。  | 
|  "ext4BigAlloc"  |  true、false  |  false  |  透過啟用 `bigalloc` 格式化選項，將 `ext4` 檔案系統變更為使用叢集區塊配置。警告：您的節點 Linux 核心可能不完全支援 `bigalloc`。  | 
|  "ext4ClusterSize"  |  |  |  當啟用 `bigalloc` 功能時，格式化 `ext4` 檔案系統所使用的叢集大小。請注意：`ext4BigAlloc` 參數必須設為 true。  | 

如需詳細資訊，請參閱 GitHub 上的 [AWS EBS CSI 驅動程式](https://github.com/kubernetes-sigs/aws-ebs-csi-driver/blob/master/docs/parameters.md)。

## 考量事項
<a name="_considerations"></a>

**注意**  
您只能在 EKS 自動模式節點上，部署依賴於 EKS 自動模式 StorageClass 的工作負載。如果您有一個混合類型節點的叢集，需要設定您的工作負載僅在 EKS 自動模式節點上執行。如需詳細資訊，請參閱[控制工作負載是否部署在 EKS 自動模式節點上](associate-workload.md)。

EKS 自動模式的區塊儲存功能與 EBS CSI 驅動程式不同。
+ 靜態佈建
  + 如果您想要搭配 EKS Auto 模式使用外部建立的 EBS 磁碟區，則需要手動新增具有 金鑰`eks:eks-cluster-name`和叢集名稱值的 AWS 標籤。
+ 節點啟動污點
  + 您無法使用節點啟動污點功能，以在儲存功能準備就緒之前防止 Pod 排程
+ 動態佈建磁碟區上的自訂標籤
  + 您無法使用 extra-tag CLI 標誌來設定動態佈建 EBS 磁碟區上的自訂標籤
  + 您可使用 `StorageClass` 標記來新增自訂標籤。EKS Auto Mode 會將標籤新增至相關聯的 AWS 資源。您需要更新叢集 IAM 角色以用於自訂標籤。如需詳細資訊，請參閱[EKS Auto 資源的自訂 AWS 標籤](auto-learn-iam.md#tag-prop)。
+ EBS 詳細效能指標
  + 您無法存取 EBS 詳細效能的 Prometheus 指標

## 安裝 CSI 快照控制器附加元件
<a name="_install_csi_snapshot_controller_add_on"></a>

EKS 自動模式與 CSI 快照控制器 Amazon EKS 附加元件相容。

 AWS 建議您將此附加元件設定為在內建`system`節點集區上執行。

如需詳細資訊，請參閱：
+  [在專用執行個體上執行關鍵附加元件](critical-workload.md) 
+  [啟用或停用內建的 NodePool](set-builtin-node-pools.md) 
+  [啟用 CSI 磁碟區的快照功能](csi-snapshot-controller.md) 

### 在系統節點集區中安裝快照控制器
<a name="auto-install-snapshot-controller"></a>

1. 在 AWS 主控台中開啟您的 EKS 叢集

1. 從**附加元件**索引標籤中，選取**取得更多附加元件** 

1. 選取 **CSI 快照控制器**，然後選擇**下一步** 

1. 在**設定選取的附加元件設定**頁面上，選取**選用組態設定**，以檢視**附加元件組態結構描述** 

   1. 插入以下 yaml 以將快照控制器與 `system` 節點集區關聯。快照控制器包含對 `CriticalAddonsOnly` 污點的容錯。

      ```
      {
              "nodeSelector": {
                  "karpenter.sh/nodepool": "system"
              }
      }
      ```

   1. 選取**下一步** 

1. 檢閱附加元件組態，然後選取**建立** 