Benchmarking ============ .. raw:: html CNPG kubectlプラグインは、CloudNativePGを使用してKubernetesでPostgreSQL展開をベンチマークする簡単な方法を提供します。 ベンチマークは、2つの側面に焦点を当てています。 - **データベース** 、 `pgbench `_ に依存すること - **ストレージ** `fio `_ に依存すること .. Note:: `pgbench` および`fio` は、ステージングまたは実稼働前環境で実行する必要があります。運用環境ではこれらのプラグインを使用しないでください。データベースと、同じ共有環境で実行される他のワークロード/アプリケーションに壊滅的な結果をもたらす可能性があります。   pgbench ^^^^^^^ ``kubectl`` CNPGプラグインコマンド ``pgbench`` は、既存のPostgresクラスターに対してユーザー定義の\ ``pgbench`` ジョブを実行します。 ``--dry-run`` フラグを介して、後の変更/実行のためにジョブのマニフェストを生成できます。 ``pgbench`` を使用した一般的なコマンド構造は次のとおりです。 .. code:: shell kubectl cnpg pgbench \ -n \ --job-name \ --db-name \ -- .. Note:: `pgbench `_ を参照してください。 ジョブで使用される特定のオプションについては、   この例では、 ``pgbench`` OLTPのような目的で、スケールファクター1000を使用して\ ``cluster-example`` という名前の\ ``Cluster`` の\ ``app`` データベースを初期化する\ ``pgbench-init`` というジョブを作成します。 .. code:: shell kubectl cnpg pgbench \ --job-name pgbench-init \ cluster-example \ -- --initialize --scale 1000 .. Note:: これにより、100000000レコードを含むデータベースが生成され、ディスク上に約13GBの領域が必要です。   ジョブの進行状況は次の方法で確認できます。 .. code:: shell kubectl logs jobs/pgbench-run 次の例では、単一の接続を使用して、以前に初期化されたデータベースに対して30秒間\ ``pgbench`` を実行する\ ``pgbench-run`` というジョブを作成します。 .. code:: shell kubectl cnpg pgbench \ --job-name pgbench-run \ cluster-example \ -- --time 30 --client 1 --jobs 1 次の例では、 ``--db-name`` フラグと\ ``pgbench`` 名前空間を使用して、既存のデータベースに対して\ ``pgbench`` を実行します。 .. code:: shell kubectl cnpg pgbench \ --db-name pgbench \ --job-name pgbench-job \ cluster-example \ -- --time 30 --client 1 --jobs 1 デフォルトでは、ジョブに有効期限はありません。 ``--ttl`` フラグを使用して自動削除を有効にできます。ジョブは指定された期間秒単位で削除されます。 .. code:: shell kubectl cnpg pgbench \ --job-name pgbench-run \ --ttl 600 \ cluster-example \ -- --time 30 --client 1 --jobs 1 特定のワーカーノードで\ ``pgbench`` ジョブを実行する場合は、 ``--node-selector`` オプションを使用できます。 ``workload=pgbench`` ラベルを持つノードで以前の初期化ジョブを実行する場合、次のことを実行できます。 .. code:: shell kubectl cnpg pgbench \ --db-name pgbench \ --job-name pgbench-init \ --node-selector workload=pgbench \ cluster-example \ -- --initialize --scale 1000 ジョブステータスは、次のコマンドを実行して取得できます。 :: kubectl get job/pgbench-job -n NAME COMPLETIONS DURATION AGE job-name 1/1 15s 41s ジョブが完了すると、次のことを実行して結果を収集できます。 :: kubectl logs job/pgbench-job -n fio ^^^ kubectl CNPGプラグインコマンド ``fio`` は、デフォルト値と読み取り操作を使用してfioジョブを実行します。 ``--dry-run`` フラグを介して、後の変更/実行のためにジョブのマニフェストを生成できます。 .. Note:: kubectlプラグインコマンド`fio` は、ConfigMapを使用して事前定義されたfioジョブ値を使用してデプロイメントを作成します。カスタムジョブ値を提供する場合は、 `--dry-run` フラグを使用してマニフェストを生成し、生成されたConfigMapでカスタムジョブ値を提供することをお勧めします。   デフォルトの使用例 .. code:: shell kubectl cnpg fio カスタム値を使用した例 .. code:: shell kubectl cnpg fio \ -n \ --storageClass \ --pvcSize ``fio`` 名前空間の\ ``standard`` および\ ``pvcSize: 2Gi`` という名前の\ ``StorageClass`` に対して\ ``fio`` コマンドを実行する方法の例 .. code:: shell kubectl cnpg fio fio-job \ -n fio \ --storageClass standard \ --pvcSize 2Gi 展開ステータスは、次のコマンドを実行して取得できます。 .. code:: shell kubectl get deployment/fio-job -n fio NAME READY UP-TO-DATE AVAILABLE AGE fio-job 1/1 1 1 14s kubectlプラグインコマンド\ ``fio`` を実行した後。 それは次のことを行います。 1. PVCを作成する 2. fioジョブの構成を表すConfigMapを作成します 3. 単一のポッドで構成されるfio展開を作成し、PVCでfioを実行し、ベンチマークの完了後にグラフを作成し、ウェブサーバーで生成されたファイルの提供を開始します。そのためには、 `fio-tools `_ イメージを使用します。 デプロイメントによって作成されたポッドは、結果の提供を開始すると準備が整います。デプロイメントによって作成されるポッドのポートを転送できます :: kubectl port-forward -n deployment/ 8000 次に、ブラウザを使用して\ ``http://localhost:8000/`` に接続してデータを取得します。 PostgreSQLワークロードをエミュレートするために、デフォルトの8kブロックサイズが選択されました。使用可能なIOPSの量を制限するディスクは、このパラメーターを変更すると、非常に異なるスループット値を示す場合があります。 以下は、専用のKubernetesノードにマウントされたローカルディスクへのシークエンシャル書き込みの図の例1時間ベンチマーク。 .. figure:: /images/write_bw.1-2Draw.png :width: 70% :alt: Sequential writes bandwidth Sequential writes bandwidth すべてのテストが完了したら、fio展開とリソースを次の方法で削除できます。 .. code:: shell kubectl cnpg fio --dry-run | kubectl delete -f - fio展開の作成に使用したものと同じ名前を使用して、必要に応じて名前空間を追加します。