Kubernetesの永続ボリューム(PV)におけるストレージ性能ベンチマークの実施手法

Kubernetesクラスター上で実行されるアプリケーションのパフォーマンスは、使用しているストレージ(Persistent Volume)の入出力性能に大きく依存します。オープンソースツールの Dbench を利用することで、FIO(Flexible I/O Tester)ベースのベンチマークを自動化し、IOPS、帯域幅、およびレイテンシを簡単に測定できます。

1. ストレージクラスの確認

まず、テスト対象となるストレージクラス(StorageClass)の名前を確認します。

kubectl get storageclasses

2. ベンチマーク用マニフェストの構成

以下の storage-benchmark.yaml は、Dbenchを実行するための標準的なJob構成例です。環境に合わせて storageClassNamestorage(容量)を適宜変更してください。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: storage-perf-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1000Gi
  storageClassName: standard # ここを環境に合わせて変更
---
apiVersion: batch/v1
kind: Job
metadata:
  name: storage-perf-tester
spec:
  template:
    spec:
      containers:
      - name: dbench
        image: leeliu/dbench:latest
        imagePullPolicy: IfNotPresent
        env:
          - name: DBENCH_MOUNTPOINT
            value: /data
          - name: FIO_SIZE
            value: 1G
        volumeMounts:
        - name: storage-volume
          mountPath: /data
      restartPolicy: Never
      volumes:
      - name: storage-volume
        persistentVolumeClaim:
          claimName: storage-perf-pvc
  backoffLimit: 4

3. ベンチマークの実行と監視

作成したマニフェストをデプロイし、実行ログを追跡します。

kubectl apply -f storage-benchmark.yaml

プロビジョニングが完了すると、Jobが実行されます。ログを表示して進捗を確認します。

kubectl logs -f job/storage-perf-tester

ベンチマークには約2.5分〜5分程度かかります。以下の項目が順次テストされます。

  • ランダム読込/書込 IOPS
  • 読込/書込 帯域幅 (MB/s)
  • 読込/書込 レイテンシ
  • シーケンシャル読込/書込 速度

4. 結果の解析

テスト完了後、以下のようなサマリーが表示されます。

==================
= Dbench Summary =
==================
Random Read/Write IOPS: 82.4k/61.2k. BW: 540MiB/s / 510MiB/s
Average Latency (usec) Read/Write: 175.20/72.40
Sequential Read/Write: 550MiB/s / 525MiB/s
Mixed Random Read/Write IOPS: 45.2k/15.8k

主な指標の意味は以下の通りです:

  • Random Read/Write IOPS: 1秒あたりの入出力操作数。データベースなどのランダムアクセス性能に直結します。
  • BW (Bandwidth): スループット。大量のデータ転送速度を示します。
  • Average Latency (usec): 応答時間(マイクロ秒)。値が小さいほど応答性が高いことを意味します。

5. 注意事項とトラブルシューティング

  • PVCがPendingのままになる場合: 指定した storageClassName が正しいか、またはクラウドプロバイダーのクォータ制限に達していないか確認してください。
  • ディスクサイズによる性能変化: AWS EBSやGCP Persistent Diskなどのクラウドストレージでは、割り当てる容量(GiB)に比例してIOPSパフォーマンスが向上する傾向があります。必要に応じて 1000Gi 以上のサイズで再テストを検討してください。
  • クリーンアップ: テスト終了後は、リソースを削除してコストの発生を防ぎます。
kubectl delete -f storage-benchmark.yaml

タグ: Kubernetes fio StorageClass PersistentVolume benchmark

6月28日 01:01 投稿