協助改進此頁面
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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.rproxy.govskope.ca- 使用 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 磁碟區,您需要:
-
建立自我管理的 KMS 金鑰。
-
如需詳細資訊,請參閱《KMS 使用者指南》中的建立對稱加密 KMS 金鑰或 Amazon Elastic Block Store (Amazon EBS) 如何使用 KMS。
-
-
建立一個允許存取 KMS 金鑰的新政策。
-
使用下面的範例 IAM 政策來建立該政策。插入新的自我管理 KMS 金鑰的 ARN。如需詳細資訊,請參閱《AWS IAM 使用者指南》中的建立角色和附加政策 (主控台)。
-
-
將政策附加到 EKS 叢集角色。
-
使用 AWS 主控台找到 EKS 叢集角色的 ARN。角色資訊在概覽區段中可見。如需詳細資訊,請參閱 Amazon EKS 叢集 IAM 角色。
-
-
更新
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 |
當設為 |
|
"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 金鑰。如果未變更,這將是一個自動產生的金鑰,稱為 |
||
|
"blockSize" |
格式化底層檔案系統時使用的區塊大小。僅在 Linux 節點上並使用 |
||
|
"inodeSize" |
格式化底層檔案系統時使用的 inode 大小。僅在 Linux 節點上並使用 |
||
|
"bytesPerInode" |
格式化底層檔案系統時使用的 |
||
|
"numberOfInodes" |
格式化底層檔案系統時使用的 |
||
|
"ext4BigAlloc" |
true、false |
false |
透過啟用 |
|
"ext4ClusterSize" |
當啟用 |
如需詳細資訊,請參閱 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 節點集區上執行。
如需詳細資訊,請參閱:
在系統節點集區中安裝快照控制器
-
在 AWS 主控台中開啟您的 EKS 叢集
-
從附加元件索引標籤中,選取取得更多附加元件
-
選取 CSI 快照控制器,然後選擇下一步
-
在設定選取的附加元件設定頁面上,選取選用組態設定,以檢視附加元件組態結構描述
-
插入以下 yaml 以將快照控制器與
system節點集區關聯。快照控制器包含對CriticalAddonsOnly污點的容錯。{ "nodeSelector": { "karpenter.sh/nodepool": "system" } } -
選取下一步
-
-
檢閱附加元件組態,然後選取建立