如何在 Amazon EKS 中将 EBS 卷从 gp2 迁移到 gp3?
我想将我的 Amazon Elastic Block Store (Amazon EBS) 卷类型从通用 SSD (gp2) 迁移到 Amazon Elastic Kubernetes Service (Amazon EKS) 中的通用 SSD (gp3)。
简短描述
您可以使用 Amazon EBS 容器存储接口 (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 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI。
在 Amazon EBS CSI 驱动程序中安装卷修改功能
卷修改功能在 Amazon EBS CSI 驱动程序版本 1.19.0 中可用。它由 Helm 图表 2.19.0 或 Amazon EKS 托管插件 v1.19.0-eksbuild.2 使用。此功能是作为一个名为 volumemodifier 的附加 sidecar 实现的。您必须在 Amazon EBS CSI 驱动程序中手动将其激活。有关详细信息,请参阅 GitHub 网站上的 Volume modification(卷修改)。
要启用 Amazon EKS 中的卷修改功能,请配置以下方法之一:
- 使用 Helm 进行自行管理的插件配置
- Amazon EKS 托管插件配置
使用 Helm 进行自行管理的插件配置
-
通过 Helm 图表安装自行管理的 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}" } ], ... } } -
验证附加的 sidecar 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 卷快照功能。您可以使用快照将永久卷从树内 gp2 StorageClass 迁移到 Amazon EBS CSI gp3 StorageClass。有关详细信息,请参阅 GitHub 网站上的 Volume snapshots(卷快照)。
要使用卷快照,请完成以下步骤:
- 安装 Amazon EBS CSI 驱动程序。
- 安装 VolumeSnapshotClass、VolumeSnapshotContent 和 VolumeSnapshot 对象。有关详细信息,请参阅 GitHub 网站上的 snapshotclass.yaml、volume-snapshot-content.yaml 和 snapshot.yaml。
- 使用这些对象从快照创建新的 gp3 类型的永久卷。有关详细信息,请参阅 Migrating Amazon EKS clusters from gp2 to gp3 EBS volumes(将 Amazon EKS 集群从 gp2 迁移到 gp3 EBS 卷)。
相关信息
- 语言
- 中文 (简体)
