Kubernetesクラスター上で実行されるアプリケーションのパフォーマンスは、使用しているストレージ(Persistent Volume)の入出力性能に大きく依存します。オープンソースツールの Dbench を利用することで、FIO(Flexible I/O Tester)ベースのベンチマークを自動化し、IOPS、帯域幅、およびレイテンシを簡単に測定できます。
1. ストレージクラスの確認
まず、テスト対象となるストレージクラス(StorageClass)の名前を確認します。
kubectl get storageclasses
2. ベンチマーク用マニフェストの構成
以下の storage-benchmark.yaml は、Dbenchを実行するための標準的なJob構成例です。環境に合わせて storageClassName と storage(容量)を適宜変更してください。
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