View a markdown version of this page

建立儲存類別 - 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 金鑰的新政策。

  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::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 範例

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

StorageClass 參數參考

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

StorageClass 資源的 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 節點上並使用 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 驅動程式不同。

  • 靜態佈建

    • 如果您想要搭配 EKS Auto 模式使用外部建立的 EBS 磁碟區,則需要手動新增具有 金鑰eks:eks-cluster-name和叢集名稱值的 AWS 標籤。

  • 節點啟動污點

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

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

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

    • 您可使用 StorageClass 標記來新增自訂標籤。EKS Auto Mode 會將標籤新增至相關聯的 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. 檢閱附加元件組態,然後選取建立