建立儲存類別 - Amazon EKS

協助改進此頁面

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

建立儲存類別

在 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 加密運作方式。此值可選用的,但建議設定。

  • storageclass.kubernetes.io/is-default-class: "true" - 依預設,Kubernetes 將使用此儲存類別,除非您在持續性磁碟區宣告上指定了不同的磁碟區類別。此值是選用的。若要從其他儲存控制器移轉,則在設定該值時要謹慎對待。

使用自我管理的 KMS 金鑰加密 EBS 磁碟區

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

  1. 建立自我管理的 KMS 金鑰。

  2. 建立一個允許存取 KMS 金鑰的新政策。

    • 使用下面的範例 IAM 政策來建立該政策。插入新的自我管理 KMS 金鑰的 ARN。如需詳細資訊,請參閱《AWS IAM 使用者指南》中的建立角色和附加政策 (主控台)

  3. 將政策附加到 EKS 叢集角色。

    • 使用 AWS 主控台找到 EKS 叢集角色的 ARN。角色資訊在概覽區段中可見。如需詳細資訊,請參閱 Amazon EKS 叢集 IAM 角色

  4. 更新 StorageClass,以參考 parameters.kmsKeyId 欄位的 KMS 金鑰 ID。

自我管理 KMS IAM 政策範例

更新下方政策中的以下值:

  • <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::<account-id>: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": "<account-id>", "kms:ViaService": "ec2.<aws-region>.amazonaws.com" } } } ] }

自我管理的 KMS StorageClass 範例

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

StorageClass 參數參考

有關 Kubernetes StorageClass 資源的一般資訊,請參閱 Kubernetes 文件中的儲存類別

StorageClass 資源的 parameters 區段專屬於 AWS。請使用下列資料表檢閱可用的選項。

參數 預設 描述

"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> 太低,無法符合 AWS 支援的 IOPS 範圍,CSI 驅動程式會增加磁碟區的 IOPS。這可讓動態佈建總是成功,即使使用者指定的 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 節點上並使用 ext2ext3ext4xfs 時支援。

"inodeSize"

格式化底層檔案系統時使用的 inode 大小。僅在 Linux 節點上並使用 ext2ext3ext4xfs 時支援。

"bytesPerInode"

格式化底層檔案系統時使用的 bytes-per-inode。僅在 Linux 節點上並使用 ext2ext3ext4 時支援。

"numberOfInodes"

格式化底層檔案系統時使用的 number-of-inodes。僅在 Linux 節點上並使用 ext2ext3ext4 時支援。

"ext4BigAlloc"

true、false

false

透過啟用 bigalloc 格式化選項,將 ext4 檔案系統變更為使用叢集區塊配置。警告:您的節點 Linux 核心可能不完全支援 bigalloc

"ext4ClusterSize"

當啟用 bigalloc 功能時,格式化 ext4 檔案系統所使用的叢集大小。請注意:ext4BigAlloc 參數必須設為 true。

如需詳細資訊,請參閱 GitHub 上的 AWS EBS CSI 驅動程式

考量事項

注意

您只能在 EKS 自動模式節點上,部署依賴於 EKS 自動模式 StorageClass 的工作負載。如果您有一個混合類型節點的叢集,需要設定您的工作負載僅在 EKS 自動模式節點上執行。如需詳細資訊,請參閱 控制工作負載是否部署在 EKS 自動模式節點上

EKS 自動模式的區塊儲存功能與 EBS CSI 驅動程式不同。

  • 靜態佈建

    • 如果您想將外部建立的 EBS 磁碟區與 EKS 自動模式一起使用,您需要手動新增一個 AWS 標籤,其金鑰為 eks:eks-cluster-name,值為叢集名稱。

  • 節點啟動污點

    • 您無法使用節點啟動污點功能,以在儲存功能準備就緒之前防止 Pod 排程

  • 動態佈建磁碟區上的自訂標籤

    • 您無法使用 extra-tag CLI 標誌來設定動態佈建 EBS 磁碟區上的自訂標籤

    • 您可使用 StorageClass 標記來新增自訂標籤。EKS 自動模式會將標籤新增至相關聯的 AWS 資源。您需要更新叢集 IAM 角色以用於自訂標籤。如需詳細資訊,請參閱 用於 EKS Auto 資源的自訂 AWS 標籤

  • EBS 詳細效能指標

    • 您無法存取 EBS 詳細效能的 Prometheus 指標

安裝 CSI 快照控制器附加元件

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

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

如需詳細資訊,請參閱:

在系統節點集區中安裝快照控制器

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

  2. 附加元件索引標籤中,選取取得更多附加元件

  3. 選取 CSI 快照控制器,然後選擇下一步

  4. 設定選取的附加元件設定頁面上,選取選用組態設定,以檢視附加元件組態結構描述

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

      { "nodeSelector": { "karpenter.sh/nodepool": "system" } }
    2. 選取下一步

  5. 檢閱附加元件組態,然後選取建立