将 Block Storage for VPC 卷从 Gen-1 迁移到 Gen-2 配置文件
虚拟私有云
将 Block Storage for VPC 卷从第 1 代(基于层级)配置文件迁移到第 2 代(软件定义性能)配置文件,以利用更高的性能、动态 IOPS 调整和更好的成本优化。
了解世代概况
Block Storage for VPC 已从第 1 代(基于层级)发展到第 2 代(软件定义性能)配置文件。
- 第 1 代(分级)
- IOPS 根据卷大小计算。 更多信息,请参阅 Block Storage 配置文件。
- 第 2 代(SDP)
- 自定义 IOPS 与卷大小无关。 更多信息,请参阅 SDP Block Storage 配置文件。
有关块存储配置文件及其功能的最新详细信息,请参阅 Block Storage profiles。
准备工作
在迁移卷之前,请完成以下步骤。
- 安装 IBM Cloud CLI。
- 确保您有
kubectl或oc访问群集的权限。 - 确认 VPC Block CSI 驱动程序插件的版本为 5.0 或更高。 要查看版本,请运行以下命令 IBM MobileFirst Platform Command Line Interface
oc get deployment -n kube-system vpc-block-csi-controller -o jsonpath='{.spec.template.spec.containers[0].image}' - 确保已安装 VPC Block CSI 驱动程序插件。 更多信息,请参阅 安装 VPC Block CSI 驱动程序插件。
- 确保已配置 VPC Block CSI 驱动程序插件。 更多信息,请参阅 配置 VPC 块 CSI 驱动程序插件。
- 确保运行 VPC Block CSI 驱动程序插件。 有关更多信息,请参阅 验证 VPC 块 CSI 驱动程序插件。
- 确保 VPC Block CSI 驱动程序插件为最新版本。 更多信息,请参阅 升级 VPC 块 CSI 驱动程序插件。
- 记录当前的性能要求。
- 创建数据备份或快照。 有关详细信息,请参阅 使用 Block Storage for VPC 群集插件设置快照。
确定要迁移的卷
查找使用 Gen-1 块存储配置文件的 PVC。
-
列出群集中的所有块存储 PVC。
oc get pvc --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,STORAGECLASS:.spec.storageClassName,STATUS:.status.phase | grep vpc-block -
从 PVC 获取 VPC 卷 ID。
PV_NAME=$(oc get pvc <pvc-name> -n <namespace> -o jsonpath='{.spec.volumeName}') VOLUME_ID=$(oc get pv $PV_NAME -o jsonpath='{.spec.csi.volumeHandle}') echo "Volume ID: $VOLUME_ID"示例输出
Volume ID: r026-3afe630d-1a47-482c-aade-e37f5e0bb9f4
检查当前音量配置
-
查看当前块卷配置文件和配置。
ibmcloud is vol $VOLUME_ID迁移前的输出示例
ID r026-3afe630d-1a47-482c-aade-e37f5e0bb9f4 Name pvc-d4a2b016-a5e4-46de-9214-a64f5fc8e344 Status available Attachment state attached Capacity 100 IOPS 3000 Bandwidth(Mbps) 393 Profile 5iops-tier Storage Generation 1 Adjustable IOPS false Busy false -
请注意输出结果中的以下数值。 您将使用这些信息来验证迁移是否成功。
- 简介:
5iops-tier( Gen-1 ) - 生成存储:
1 - 可调节 IOPS:
false
- 简介:
开始迁移
迁移过程在后台运行,同时卷仍连接到 pod 上,应用程序继续运行。 IOPS 会自动调整为 SDP 默认值,整个过程通常需要 5-15 分钟。
-
启动向 SDP 配置文件的迁移。
ibmcloud is volume-job-create $VOLUME_ID --profile sdp
监控迁移进度
-
检查迁移任务的状态。 如果输出显示
Status: updating和Busy: true,则迁移正在进行中。 当输出显示Status: available和Busy: false时,迁移完成。ibmcloud is volume-jobs $VOLUME_ID -
检查音量状态。
watch -n 30 "ibmcloud is vol $VOLUME_ID | grep -E 'Status|Busy|Profile'"迁移过程中的输出示例
Status updating Busy true Profile 5iops-tier
验证迁移完成
-
确认卷正在使用 Gen-2 配置文件。
ibmcloud is vol $VOLUME_ID迁移后的输出示例
ID r026-3afe630d-1a47-482c-aade-e37f5e0bb9f4 Name pvc-d4a2b016-a5e4-46de-9214-a64f5fc8e344 Status available Attachment state attached Capacity 100 IOPS 4000 Bandwidth(Mbps) 1000 Profile sdp Storage Generation 2 Adjustable IOPS true Adjustable Capacity States unattached,attached Adjustable IOPS States unattached,attached Busy false -
验证以下成功指标:
- 概要文件:
sdp - 生成存储:
2 - 可调节 IOPS:
true - IOPS:增加(例如从 3000 到 4000)
- 带宽:改进
- 概要文件:
更新 PersistentVolume 元数据
-
更新光伏元数据,以反映 Gen-2 配置文件。
oc patch pv $PV_NAME --type='json' -p='[ {"op": "replace", "path": "/spec/storageClassName", "value": "ibmc-vpc-block-sdp"}, {"op": "replace", "path": "/spec/csi/volumeAttributes/profile", "value": "sdp"}, {"op": "replace", "path": "/spec/csi/volumeAttributes/iops", "value": "4000"} ]' -
验证更新。
oc get pv $PV_NAME -o jsonpath='{.spec.storageClassName}'预期输出
ibmc-vpc-block-sdpPVC 继续显示 StorageClass 的原始名称。 这种行为是意料之中的,因为 PVC 中的
storageClassName字段是不可变的。 实际存储配置文件由 PV 决定,您在此步骤中更新了 PV。
验证您的应用程序
验证迁移后应用程序是否正常运行。
-
检查 Pod 状态。 请确认所有 Pod 均处于“
Running”状态。oc get pods -n <namespace> -
验证卷附件。 确认卷已正确加载。
oc describe pod <pod-name> -n <namespace> | grep -A 5 "Volumes:" -
检查应用程序日志。 查找与存储或 I/O 操作有关的任何错误。
oc logs <pod-name> -n <namespace> --tail=50 -
测试应用程序端点(如适用)。 验证应用程序是否正确响应。
curl -I https://<app-endpoint>/health
创建 Gen-2 StorageClass
创建用于配置新卷的 SDP StorageClass。
-
为 StorageClass 创建一个YAML文件。 将以下配置保存为
storageclass-sdp.yaml。apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-vpc-block-sdp-general labels: app: ibm-vpc-block-csi-driver provisioner: vpc.block.csi.ibm.io parameters: profile: "sdp" iops: "5000" csi.storage.k8s.io/fstype: "ext4" billingType: "hourly" encrypted: "false" region: "" zone: "" tags: "generation:2,profile:sdp" reclaimPolicy: Delete allowVolumeExpansion: true volumeBindingMode: WaitForFirstConsumer -
应用 StorageClass。
oc apply -f storageclass-sdp.yaml -
验证 StorageClass 的创建。
oc get storageclass ibmc-vpc-block-sdp-general
调整 IOPS 和吞吐量以优化性能
迁移完成后,您可以根据工作负载的要求动态调整 IOPS 和吞吐量(带宽)。
- 一般工作负载从 5,000 IOPS 开始。
- 数据库使用 10,000 或更高的 IOPS。
- 监控使用情况,并根据实际需求进行调整。
更新 IOPS
-
增加 IOPS,提高性能。
ibmcloud is volume-update $VOLUME_ID --iops 8000 -
验证 IOPS 的更新情况。
ibmcloud is vol $VOLUME_ID | grep IOPS
更新吞吐量(带宽)
迁移到 SDP 配置文件后,卷会获得默认的带宽分配。 您可以增加带宽,以提升I/O密集型工作负载的吞吐量。
-
检查当前的带宽分配情况。
ibmcloud is vol $VOLUME_ID | grep Bandwidth -
增加带宽以提高吞吐量。 使用
--bandwidth选项,以Mbps为单位指定所需的带宽。ibmcloud is volume-update $VOLUME_ID --bandwidth 2000 -
验证带宽更新。
ibmcloud is vol $VOLUME_ID | grep Bandwidth带宽值表示该卷所能达到的最大吞吐量(单位:MB/s)。 更高的带宽值可为数据密集型操作提供更好的性能。
故障诊断
迁移卡在更新状态
如果迁移状态保持在 updating 上超过 30 分钟,请完成以下步骤。 请注意,较大的卷迁移时间较长,可能会在 updating 状态下保持 45 分钟。
-
查看工作详情。
ibmcloud is volume-jobs $VOLUME_ID -
检查卷状态,查看是否有错误或警告。
ibmcloud is vol $VOLUME_ID | grep -E "Status|Busy" -
再等 15 分钟,因为大容量迁移需要更长的时间。
-
查看 IBM Cloud 状态页面,了解 VPC 服务问题。
-
如果迁移卡住超过 1 小时,请联系 IBM 支持部门并提供任务 ID。
PVC 显示旧 StorageClass
如果 PVC 在迁移后仍引用 Gen-1 StorageClass,则预计会出现这种行为,无需采取任何措施。 PVC storageClassName 字段不可更改。 实际存储配置文件由 PV 决定,您在前面的步骤中已经更新了 PV。 功能不受影响。
-
确认 PV(而非 PVC)是否正确。
oc get pv $PV_NAME -o jsonpath='{.spec.storageClassName}'预期输出
ibmc-vpc-block-sdp
性能没有改善
如果迁移后性能没有提高,请完成以下步骤。
-
检查实际 IOPS 分配情况。
ibmcloud is vol $VOLUME_ID | grep IOPS -
检查音量配置文件。
ibmcloud is vol $VOLUME_ID | grep Profile -
增加 IOPS 分配。
ibmcloud is volume-update $VOLUME_ID --iops 10000 -
验证更新。
ibmcloud is vol $VOLUME_ID | grep IOPS
后续步骤
完成迁移后,请考虑以下后续步骤。
- 重复本教程,迁移其他卷。
- 监控卷性能,并根据需要调整 IOPS。
- 更新部署模板,将 Gen-2 StorageClasses 用于新卷。
- 审查 Block Storage 容量和性能,为优化提供指导。