将 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

准备工作

在迁移卷之前,请完成以下步骤。

确定要迁移的卷

查找使用 Gen-1 块存储配置文件的 PVC。

  1. 列出群集中的所有块存储 PVC。

    oc get pvc --all-namespaces -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name,STORAGECLASS:.spec.storageClassName,STATUS:.status.phase | grep vpc-block
    
  2. 从 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
    

检查当前音量配置

  1. 查看当前块卷配置文件和配置。

    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
    
  2. 请注意输出结果中的以下数值。 您将使用这些信息来验证迁移是否成功。

    • 简介:5iops-tier ( Gen-1 )
    • 生成存储:1
    • 可调节 IOPS:false

开始迁移

迁移过程在后台运行,同时卷仍连接到 pod 上,应用程序继续运行。 IOPS 会自动调整为 SDP 默认值,整个过程通常需要 5-15 分钟。

  1. 启动向 SDP 配置文件的迁移。

    ibmcloud is volume-job-create $VOLUME_ID --profile sdp
    

监控迁移进度

  1. 检查迁移任务的状态。 如果输出显示 Status: updatingBusy: true,则迁移正在进行中。 当输出显示 Status: availableBusy: false 时,迁移完成。

    ibmcloud is volume-jobs $VOLUME_ID
    
  2. 检查音量状态。

    watch -n 30 "ibmcloud is vol $VOLUME_ID | grep -E 'Status|Busy|Profile'"
    

    迁移过程中的输出示例

    Status                  updating
    Busy                    true
    Profile                 5iops-tier
    

验证迁移完成

  1. 确认卷正在使用 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
    
  2. 验证以下成功指标:

    • 概要文件: sdp
    • 生成存储:2
    • 可调节 IOPS:true
    • IOPS:增加(例如从 3000 到 4000)
    • 带宽:改进

更新 PersistentVolume 元数据

  1. 更新光伏元数据,以反映 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"}
    ]'
    
  2. 验证更新。

    oc get pv $PV_NAME -o jsonpath='{.spec.storageClassName}'
    

    预期输出

    ibmc-vpc-block-sdp
    

    PVC 继续显示 StorageClass 的原始名称。 这种行为是意料之中的,因为 PVC 中的 storageClassName 字段是不可变的。 实际存储配置文件由 PV 决定,您在此步骤中更新了 PV。

验证您的应用程序

验证迁移后应用程序是否正常运行。

  1. 检查 Pod 状态。 请确认所有 Pod 均处于“Running”状态。

    oc get pods -n <namespace>
    
  2. 验证卷附件。 确认卷已正确加载。

    oc describe pod <pod-name> -n <namespace> | grep -A 5 "Volumes:"
    
  3. 检查应用程序日志。 查找与存储或 I/O 操作有关的任何错误。

    oc logs <pod-name> -n <namespace> --tail=50
    
  4. 测试应用程序端点(如适用)。 验证应用程序是否正确响应。

    curl -I https://<app-endpoint>/health
    

创建 Gen-2 StorageClass

创建用于配置新卷的 SDP StorageClass。

  1. 为 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
    
  2. 应用 StorageClass。

    oc apply -f storageclass-sdp.yaml
    
  3. 验证 StorageClass 的创建。

    oc get storageclass ibmc-vpc-block-sdp-general
    

调整 IOPS 和吞吐量以优化性能

迁移完成后,您可以根据工作负载的要求动态调整 IOPS 和吞吐量(带宽)。

  • 一般工作负载从 5,000 IOPS 开始。
  • 数据库使用 10,000 或更高的 IOPS。
  • 监控使用情况,并根据实际需求进行调整。

更新 IOPS

  1. 增加 IOPS,提高性能。

    ibmcloud is volume-update $VOLUME_ID --iops 8000
    
  2. 验证 IOPS 的更新情况。

    ibmcloud is vol $VOLUME_ID | grep IOPS
    

更新吞吐量(带宽)

迁移到 SDP 配置文件后,卷会获得默认的带宽分配。 您可以增加带宽,以提升I/O密集型工作负载的吞吐量。

  1. 检查当前的带宽分配情况。

    ibmcloud is vol $VOLUME_ID | grep Bandwidth
    
  2. 增加带宽以提高吞吐量。 使用 --bandwidth 选项,以Mbps为单位指定所需的带宽。

    ibmcloud is volume-update $VOLUME_ID --bandwidth 2000
    
  3. 验证带宽更新。

    ibmcloud is vol $VOLUME_ID | grep Bandwidth
    

    带宽值表示该卷所能达到的最大吞吐量(单位:MB/s)。 更高的带宽值可为数据密集型操作提供更好的性能。

故障诊断

迁移卡在更新状态

如果迁移状态保持在 updating 上超过 30 分钟,请完成以下步骤。 请注意,较大的卷迁移时间较长,可能会在 updating 状态下保持 45 分钟。

  1. 查看工作详情。

    ibmcloud is volume-jobs $VOLUME_ID
    
  2. 检查卷状态,查看是否有错误或警告。

    ibmcloud is vol $VOLUME_ID | grep -E "Status|Busy"
    
  3. 再等 15 分钟,因为大容量迁移需要更长的时间。

  4. 查看 IBM Cloud 状态页面,了解 VPC 服务问题。

  5. 如果迁移卡住超过 1 小时,请联系 IBM 支持部门并提供任务 ID。

PVC 显示旧 StorageClass

如果 PVC 在迁移后仍引用 Gen-1 StorageClass,则预计会出现这种行为,无需采取任何措施。 PVC storageClassName 字段不可更改。 实际存储配置文件由 PV 决定,您在前面的步骤中已经更新了 PV。 功能不受影响。

  1. 确认 PV(而非 PVC)是否正确。

    oc get pv $PV_NAME -o jsonpath='{.spec.storageClassName}'
    

    预期输出

    ibmc-vpc-block-sdp
    

性能没有改善

如果迁移后性能没有提高,请完成以下步骤。

  1. 检查实际 IOPS 分配情况。

    ibmcloud is vol $VOLUME_ID | grep IOPS
    
  2. 检查音量配置文件。

    ibmcloud is vol $VOLUME_ID | grep Profile
    
  3. 增加 IOPS 分配。

    ibmcloud is volume-update $VOLUME_ID --iops 10000
    
  4. 验证更新。

    ibmcloud is vol $VOLUME_ID | grep IOPS
    

后续步骤

完成迁移后,请考虑以下后续步骤。

  • 重复本教程,迁移其他卷。
  • 监控卷性能,并根据需要调整 IOPS。
  • 更新部署模板,将 Gen-2 StorageClasses 用于新卷。
  • 审查 Block Storage 容量和性能,为优化提供指导。