Gen-1 から Gen-2 プロファイルへの Block Storage for VPC ボリュームの移行

仮想プライベートクラウド

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 プロファイル 」を参照してください。

開始前に

ボリュームを移行する前に、以下の手順を完了してください。

  • IBM Cloud CLI をインストールします。
  • クラスタに kubectl または oc アクセスできることを確認してください。
  • VPC Block CSI Driverアドオンのバージョンが 5.0 以降であることを確認してください。 バージョンを確認するには、次のコマンドを実行してください。 IBM MobileFirst Platform Command Line Interface
    	kubectl get deployment -n kube-system vpc-block-csi-controller -o jsonpath='{.spec.template.spec.containers[0].image}'
    
  • VPC Block CSI Driverアドオンがインストールされていることを確認します。 詳細については、 VPC Block CSI Driverアドオンのインストールを 参照してください。
  • VPC Block CSI Driverアドオンが設定されていることを確認します。 詳細については、 VPC Block CSI Driverアドオンの設定を 参照してください。
  • VPC Block CSI Driverアドオンが実行されていることを確認します。 詳細については、 VPC Block CSI Driverアドオンの検証を 参照してください。
  • VPC Block CSI Driverアドオンが最新であることを確認してください。 詳細については、 VPC Block CSI Driverアドオンのアップグレードを 参照してください。
  • 現在のパフォーマンス要件を文書化する。
  • データのバックアップまたはスナップショットを作成します。 詳細については、 Block Storage for VPC クラスタ・アドオンによるスナップショットの設定を 参照してください。

マイグレーション対象のボリュームを特定する

Gen-1 ブロック・ストレージ・プロファイルを使用しているPVCを探す。

  1. クラスタ内のすべてのブロック・ストレージPVCをリストします。

    kubectl 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=$(kubectl get pvc <pvc-name> -n <namespace> -o jsonpath='{.spec.volumeName}')
    VOLUME_ID=$(kubectl 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

マイグレーションを開始します

マイグレーション・プロセスはバックグラウンドで実行され、ボリュームはポッドに接続されたまま、アプリケーションは実行され続けます。 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. PV メタデータを更新し、 Gen-2 プロファイルを反映させる。

    kubectl 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. 更新を検証します。

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

    予期される出力

    ibmc-vpc-block-sdp
    

    PVCにはオリジナルの StorageClass。 PVCの storageClassName フィールドは不変なので、この動作は予想される。 実際のストレージプロファイルは、このステップで更新したPVによって決定される。

アプリケーションの検証

移行後、アプリケーションが正しく機能していることを確認します。

  1. ポッドの状況を確認します。 すべてのポッドが「 Running 」状態にあることを確認してください。

    kubectl get pods -n <namespace>
    
  2. ボリュームのアタッチメントを確認する。 ボリュームが正しくマウントされていることを確認する。

    kubectl describe pod <pod-name> -n <namespace> | grep -A 5 "Volumes:"
    
  3. アプリケーションのログを確認する。 ストレージやI/O操作に関するエラーを探す。

    kubectl 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 を適用する。

    kubectl apply -f storageclass-sdp.yaml
    
  3. StorageClass の作成を確認してください。

    kubectl 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. VPCサービスの問題については、 IBM Cloud ステータスページを確認してください。

  5. 移行が1時間以上止まっている場合は、ジョブIDを明記の上、 IBM サポートまでご連絡ください。

PVCは古い StorageClass

移行後もPVCが Gen-1 StorageClass。 PVC storageClassName フィールドは不変である。 実際のストレージプロファイルは、前のステップで更新したPVによって決定される。 機能に影響はない。

  1. PV(PVCではない)が正しいことを確認する。

    kubectl 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 容量とパフォーマンスを見直し、最適化の指針を得る。