ベンチマーク¶
CNPG kubectl プラグインは、CloudNativePG を使用して Kubernetes での PostgreSQL デプロイのベンチマークを簡単に行う方法を提供します。
ベンチマークは、次の 2 つの側面に重点を置いています。
pgbench によるデータベースのベンチマーク に依存する データベース
fio によるストレージのベンチマーク に依存する ストレージ
重要
pgbench および fio は、ステージングまたは実稼働前の環境で実行する必要があります。これらのプラグインを本番環境で使用しないでください。同じ共有環境で実行されるデータベースや他のワークロード/アプリケーションに壊滅的な結果をもたらす可能性があるためです。
pgbench¶
kubectl CNPG プラグイン コマンド pgbench は、既存の Postgres
クラスターでユーザー定義の pgbench ジョブを実行します。このコマンドは
--dry-run フラグも受け入れます。これにより、適用せずにジョブ
マニフェストが出力されます。
使用例:
kubectl cnpg pgbench \
-n <namespace> <cluster-name> \
--pgbench-job-name <pgbench-job> \
--db-name <db-name> \
-- --time 30 --client 1 --jobs 1
pgbench 名前空間で cluster-example という名前の Cluster
に対して pgbench を実行する方法の例:
kubectl cnpg pgbench \
-n pgbench cluster-example \
--pgbench-job-name pgbench-job \
-- --time 30 --client 1 --jobs 1
--db-name フラグと pgbench
名前空間を使用して、既存のデータベースで pgbench を実行する方法の例:
kubectl cnpg pgbench \
-n pgbench cluster-example \
--db-name pgbench \
--pgbench-job-name pgbench-job \
-- --time 30 --client 1 --jobs 1
ジョブのステータスは、次を実行して取得できます。
kubectl get job/pgbench-job -n <namespace>
NAME COMPLETIONS DURATION AGE
pgbench-job-name 1/1 15s 41s
ジョブが完了したら、次を実行して結果を収集できます。
kubectl logs job/pgbench-job -n <namespace>
フィオ¶
kubectl CNPG プラグイン コマンド fio
は、デフォルト値と読み取り操作で fio ジョブを実行します。このコマンドは
--dry-run フラグも受け入れます。これにより、適用せずに fio
マニフェストが出力されます。
注釈
kubectl プラグイン コマンド fio は、ConfigMap を使用して事前定義された fio ジョブ値でデプロイを作成します。カスタム ジョブ値を提供する場合は、--dry-run フラグを使用してマニフェストを生成し、生成された ConfigMap でカスタム ジョブ値を提供することをお勧めします。
使用例:
デフォルト
kubectl cnpg fio <fio-name>
``` と値
```shell
kubectl cnpg fio <fio-name> \
-n <namespace> \
--storageClass <name> \
--pvcSize <size>
fio 名前空間の standard および pvcSize: 2Gi という名前の
StorageClass に対して fio コマンドを実行する方法の例:
kubectl cnpg fio fio-job \
-n fio \
--storageClass standard \
--pvcSize 2Gi
デプロイのステータスは、次を実行して取得できます。
kubectl get deployment/fio-job -n fio
NAME READY UP-TO-DATE AVAILABLE AGE
fio-job 1/1 1 1 14s
kubectl プラグイン コマンド fio を実行した後。
そうなる:
PVC を作成する
fio ジョブの構成を表す ConfigMap を作成する
PVC で fio を実行する単一の Pod で構成される fio デプロイメントを作成し、ベンチマークの完了後にグラフを作成し、生成されたファイルの Web サーバーでの提供を開始します。そのために fio-tools <https://github.com/wallnerryan/fio-tools>`__ イメージを使用します。
結果の提供を開始すると、デプロイによって作成された Pod の準備が整います。デプロイによって作成されたポッドのポートを転送できます
kubectl port-forward -n <namespace> deployment/<fio-name> 8000
次に、ブラウザーを使用して http://localhost:8000/
に接続し、データを取得します。
PostgreSQL ワークロードをエミュレートするために、デフォルトの 8k ブロック サイズが選択されています。使用可能な IOPS の量を制限するディスクは、このパラメーターを変更すると、非常に異なるスループット値を示す可能性があります。
以下は、専用の Kubernetes ノードにマウントされたローカル ディスクへの順次書き込みの例の図です (1 時間のベンチマーク)。
![]()
Sequential writes bandwidth¶
すべてのテストが完了したら、次の方法で fio のデプロイとリソースを削除できます。
shell kubectl cnpg fio <fio-job-name> --dry-run | kubectl delete -f -
fio
デプロイメントの作成に使用したものと同じ名前を使用し、該当する場合は名前空間を追加してください。