我該如何在 Amazon EKS 中將 EBS 磁碟區從 gp2 遷移到 gp3?
我想在 Amazon Elastic Kubernetes Service (Amazon EKS) 中,將 Amazon Elastic Block Store (Amazon EBS) 磁碟區類型從一般用途 SSD (gp2) 轉換為一般用途 SSD (gp3)。
簡短說明
您可以使用 Amazon EBS Container Storage Interface (CSI) 驅動程式,透過在 PersistentVolumeClaims (PVC) 中加入註解來修改 Amazon EBS 磁碟區。此功能可於 aws-ebs-csi-driver v1.19.0-eksbuild.2 或更新版本中使用。您可以在 PVC 中修改 type、iops 以及 throughput 參數:
若要在您的 Amazon EKS 叢集中將 EBS 磁碟區從 gp2 遷移至 gp3,請完成以下步驟:
- 在您的 Amazon EKS 叢集中安裝 Amazon EBS CSI 驅動程式。
- 在 Amazon EBS CSI 驅動程式中啟用磁碟區修改功能。
- 變更 EBS 磁碟區類型。
解決方法
**注意:**如果您在執行 AWS Command Line Interface (AWS CLI) 命令時收到錯誤訊息,請參閱對 AWS CLI 錯誤進行疑難排解。此外,請確定您使用的是最新的 AWS CLI 版本。
在 Amazon EBS CSI 驅動程式中安裝磁碟區修改功能
Amazon EBS CSI 驅動程式版本 1.19.0 可使用磁碟區修改功能。它可由 Helm Chart 2.19.0 或 Amazon EKS 受管附加元件 v1.19.0-eksbuild.2 使用。此功能是以名為 volumemodifier 的額外附屬容器實作。您必須在 Amazon EBS CSI 驅動程式中手動啟用。如需更多資訊,請參閱 GitHub 網站上的磁碟區修改。
若要在 Amazon EKS 中啟用磁碟區修改功能,請設定以下任一方法:
- 使用 Helm 的自我管理附加元件組態
- Amazon EKS 受管附加元件組態
使用 Helm 的自我管理附加元件組態
-
透過 Helm Chart 安裝自我管理的 Amazon EBS CSI 驅動程式,然後將 controller.volumeModificationFeature.enabled 設為 true。
YAML 範例:cat values.yaml controller: volumeModificationFeature: enabled: true -
升級組態。執行以下命令:
helm upgrade aws-ebs-csi-driver --namespace kube-system \ aws-ebs-csi-driver/aws-ebs-csi-driver -f values.yaml
Amazon EKS 受管附加元件組態
-
建立組態檔。執行以下命令:
cat eks-addon-ebs-csi-driver-config.json { "controller": { "volumeModificationFeature": { "enabled": true } } } -
使用組態檔更新 Amazon EBS CSI 驅動程式附加元件。執行以下命令:
aws eks update-addon --cluster-name eks-demo \ --addon-name aws-ebs-csi-driver \ --service-account-role-arn arn:aws:iam::{AWS_ACCOUNT_ID}:role/AmazonEKS-EBS-CSI-DriverRole \ --configuration-values 'file://eks-addon-ebs-csi-driver-config.json' { "update": { ... "status": "InProgress", "type": "AddonUpdate", "params": [ ... { "type": "ConfigurationValues", "value": "{\n \"controller\": {\n \"volumeModificationFeature\": {\n \"enabled\": true\n }\n }\n}" } ], ... } } -
確認額外附屬容器 volumemodifier 已啟用。執行以下命令:
kubectl get pod -n kube-system -l=app=ebs-csi-controller輸出範例:
NAME READY STATUS RESTARTS AGE ebs-csi-controller-5f985b94f4-lk7lv 7/7 Running 0 2m29s ebs-csi-controller-5f985b94f4-m5nn8 7/7 Running 0 2m29s -
檢查容器名稱。執行以下命令:
kubectl get pod -n kube-system ebs-csi-controller-5f985b94f4-lk7lv -o jsonpath='{.spec.containers[*].name}{"\n"}'輸出範例:
ebs-plugin csi-provisioner csi-attacher csi-snapshotter volumemodifier csi-resizer liveness-probe
變更 EBS 磁碟區類型
-
查看目前的 PVC 與 PersistentVolume (PV) 狀態。執行以下命令:
kubectl get sc輸出範例:
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE gp2 kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 6h23mkubectl get pvc ebs-demo-claim輸出範例:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE ebs-demo-claim Bound pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30 4Gi RWO gp2 <unset> 18skubectl get pv pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30輸出範例:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30 4Gi RWO Delete Bound default/ebs-demo-claim gp2 <unset> 36s -
檢視 PV 詳細資料。執行以下命令:
kubectl get pv pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30 -o yaml輸出範例:
apiVersion: v1 kind: PersistentVolume metadata: annotations: pv.kubernetes.io/migrated-to: ebs.csi.aws.com pv.kubernetes.io/provisioned-by: kubernetes.io/aws-ebs ... ... spec: awsElasticBlockStore: fsType: ext4 volumeID: vol-0296e8e6fa4b27670 claimRef: apiVersion: v1 kind: PersistentVolumeClaim name: ebs-demo-claim namespace: default ... persistentVolumeReclaimPolicy: Delete storageClassName: gp2 volumeMode: Filesystem status: phase: Bound ... -
檢查 Amazon EBS 詳細資料。執行以下命令:
aws ec2 describe-volumes --volume-ids vol-0296e8e6fa4b27670輸出範例:
{ "Volumes": [ { "AvailabilityZone": "us-east-1a", "Size": 4, "State": "in-use", "VolumeId": "vol-0296e8e6fa4b27670", "Iops": 100, "VolumeType": "gp2" ... } ] } -
新增 gp3 型註解。執行以下命令:
kubectl annotate pvc ebs-demo-claim ebs.csi.aws.com/volumeType="gp3"輸出範例:
persistentvolumeclaim/ebs-demo-claim annotated -
確認註解。執行以下命令:
kubectl get pvc ebs-demo-claim -o yaml輸出範例:
apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: ebs.csi.aws.com/volumeType: gp3 ... ... name: ebs-demo-claim namespace: defaultkubectl get pv pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30 -o yaml輸出範例:
apiVersion: v1 kind: PersistentVolume metadata: annotations: ebs.csi.aws.com/volumeType: gp3 ... spec: awsElasticBlockStore: fsType: ext4 volumeID: vol-0296e8e6fa4b27670 claimRef: apiVersion: v1 kind: PersistentVolumeClaim name: ebs-demo-claim namespace: default ... -
監控修改情況。執行以下命令:
kubectl describe pvc ebs-demo-claim輸出範例:
Name: ebs-demo-claim ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- ... Normal ProvisioningSucceeded 5m20s ebs.csi.aws.com_ebs-csi-controller-676f998966-bh79n_ec5572b3-c1ec-4b3a-838a-d4b21b8c668f Successfully provisioned volume pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30 Normal VolumeModificationStarted 64s volume-modifier-for-k8s-ebs.csi.aws.com External modifier is modifying volume pvc-10d1d621-22f4-4fb6-a64a-51cdf03a9e30 Normal VolumeModificationSuccessful 57s volume-modifier-for-k8s-ebs.csi.aws.com -
確認磁碟區類型已變更為 gp3。執行以下命令:
aws ec2 describe-volumes --volume-ids vol-0296e8e6fa4b27670輸出範例:
{ "Volumes": [ { "AvailabilityZone": "us-east-1a", "Size": 4, "State": "in-use", "VolumeId": "vol-0296e8e6fa4b27670", "Iops": 3000, "VolumeType": "gp3", "Throughput": 125 ... } ] }
使用磁碟區快照遷移磁碟區
Amazon EBS CSI 驅動程式提供 CSI 磁碟區快照功能。您可以使用快照將永續性磁碟區從 in-tree gp2 StorageClass 遷移至 Amazon EBS CSI gp3 StorageClass。如需更多資訊,請參閱 GitHub 網站上的磁碟區快照。
若要使用磁碟區快照,請完成以下步驟:
- 安裝 Amazon EBS CSI 驅動程式。
- 安裝 VolumeSnapshotClass、VolumeSnapshotContent 以及 VolumeSnapshot 物件。如需更多資訊,請參閱 GitHub 網站上的 snapshotclass.yaml、volume-snapshot-content.yaml 以及 snapshot.yaml。
- 使用這些物件從快照建立新的 gp3 型永續性磁碟區。如需更多資訊,請參閱將 Amazon EKS 叢集從 gp2 遷移至 gp3 EBS 磁碟區。
相關資訊
- 語言
- 中文 (繁體)

相關內容
- 已提問 3 年前
- 已提問 1 年前