協助改進此頁面
本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
若要為本使用者指南貢獻內容,請點選每個頁面右側面板中的在 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。如需詳細資訊,請參閱《IAM 使用者指南》中的建立角色和連接政策 (主控台)。 AWS
-
-
將政策附加到 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::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 | 值 | 預設 | 說明 |
|---|---|---|---|
|
"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 驅動程式不同。
-
靜態佈建
-
如果您想要搭配 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 指標
-
以註釋為基礎的 EBS 磁碟區修改已棄用
volume-modifier-for-k8sVolumeAttributesClassiops、 type或 throughput),請改用 Kubernetes VolumeAttributesClass API。如需詳細資訊,請參閱 Kubernetes 文件中的磁碟區屬性類別
從 volume-modifier-for-k8s 遷移至 VolumeAttributesClass
對於執行 Kubernetes 1.34 或更新版本的 EKS Auto Mode 叢集,請使用 VolumeAttributesClass(VAC) 來變更 EBS 磁碟區的類型、IOPS 或輸送量。
您可以在現有的 PVCsspec.volumeAttributesClassName上建立 VAC 和設定,以遷移現有的 PVC。PVC 和 PV 不會重新建立,而且在此過程中不會中斷您的工作負載。
-
定義 VAC 中的磁碟區設定
VMK 註釋會對應至 VAC 參數,如下所示:
現有的 VMK 註釋 VAC 參數 ebs.csi.eks.amazonaws.com/volumeTypetype
ebs.csi.eks.amazonaws.com/iopsiops
ebs.csi.eks.amazonaws.com/throughput輸送量
在 VAC 中使用
volumeType,type而不是 。值必須是字串,且 VAC 只需要與所需 EBS 組態相關的參數。範例:apiVersion: storage.k8s.io/v1 kind: VolumeAttributesClass metadata: name: ebs-auto-gp3-6000-250 driverName: ebs.csi.eks.amazonaws.com parameters: type: gp3 iops: "6000" throughput: "250"VACs 是叢集範圍,因此資訊清單沒有命名空間。正常套用:
kubectl apply -f vac.yaml -
將 VAC 指派給 PVC
VAC_NAME=ebs-auto-gp3-6000-250 kubectl patch pvc <pvc-name> -n <namespace> --type=merge \ -p "{\"spec\":{\"volumeAttributesClassName\":\"${VAC_NAME}\"}}" -
確認變更已完成
kubectl get pvc <pvc-name> -n <namespace> \ -o custom-columns='NAME:.metadata.name,REQUESTED:.spec.volumeAttributesClassName,CURRENT:.status.currentVolumeAttributesClassName,STATUS:.status.modifyVolumeStatus.status'當
REQUESTED和CURRENT包含相同的 VAC 名稱且STATUS為空時,遷移即完成。如果未完成,請檢查 PVC 事件:
kubectl describe pvc <pvc-name> -n <namespace>Pending通常表示參考的 VAC 無法使用。Infeasible表示驅動程式拒絕請求的 EBS 參數;建立有效的 VAC 並改為指派該參數。
選用:移除 VMK 註釋
不需要移除舊註釋,VAC 才能運作。一旦 PVC 或 PV 參考 VAC,VMK 會拒絕以註釋為基礎的修改,而 VAC 是授權路徑。
稍後可能會在組態清除時移除註釋。如果移除它們,也請更新任何 Helm、GitOps 或其他會新增它們的自動化。保留在 PV 上的 VMK 狀態註釋是無害的,不需要移除。
變更或還原設定
VAC 參數不可變。若要變更 EBS 組態,請建立另一個 VAC,並將其名稱指派給 PVC。
若要取消尚未完成的變更,請還原先前指派的 VAC。如果 PVC 之前未使用,請清除 欄位:
kubectl patch pvc <pvc-name> -n <namespace> --type=merge \ -p '{"spec":{"volumeAttributesClassName":null}}'
清除 欄位不會復原已完成的 EBS 修改。若要還原先前的磁碟區設定,請建立包含這些設定的 VAC,並將其指派給 PVC。一般 EBS 參數限制條件和修改冷卻時間適用。
安裝 CSI 快照控制器附加元件
EKS 自動模式與 CSI 快照控制器 Amazon EKS 附加元件相容。
AWS 建議您將此附加元件設定為在內建system節點集區上執行。
如需詳細資訊,請參閱:
在系統節點集區中安裝快照控制器
-
在 AWS 主控台中開啟您的 EKS 叢集
-
從附加元件索引標籤中,選取取得更多附加元件
-
選取 CSI 快照控制器,然後選擇下一步
-
在設定選取的附加元件設定頁面上,選取選用組態設定,以檢視附加元件組態結構描述
-
插入以下 yaml 以將快照控制器與
system節點集區關聯。快照控制器包含對CriticalAddonsOnly污點的容錯。{ "nodeSelector": { "karpenter.sh/nodepool": "system" } } -
選取下一步
-
-
檢閱附加元件組態,然後選取建立