2.4. etcd についての推奨されるプラクティス
大規模で密度の高いクラスターの場合に、キースペースが過剰に拡大し、スペースのクォータを超過すると、etcd は低下するパフォーマンスの影響を受ける可能性があります。データストアの領域を解放するには、デフラグを含む etcd の定期的なメンテナーンスを行う必要があります。Prometheus で etcd メトリクスを監視し、etcd がクラスター全体でのアラームを出す前にこのデフラグを実行することを強くお勧めします。いったんアラームが出されると、クラスターはキーの読み取りと削除のみを許可するメンテナーンスモードに切り替わります。監視する主要なメトリクスには、現在のクォータ制限である etcd_server_quota_backend_bytes
、 履歴のコンパクト化後の実際のデータベース使用状況を示す etcd_mvcc_db_total_size_in_use_in_bytes
、およびデフラグを待機する空き領域を含むデータベースのサイズを示す etcd_debugging_mvcc_db_total_size_in_bytes
が含まれます。etcd のデフラグについての手順は、etcd データのデフラグ
セクションを参照してください。
etcd はデータをディスクに書き込むため、そのパフォーマンスはディスクのパフォーマンスに大きく依存します。etcd はディスク上でプロポーザルを永続化させます。他のプロセスからのディスクおよびディスクのアクティビティーにより、fsync のレイテンシーが長くなる可能性があり、etcd がハートビートをミスし、時間通りに新規プロポーザルをディスクにコミットできなくなる可能性があり、要求のタイムアウトや一時的なリーダーが失われる可能性があります。低レイテンシーおよび高スループットの SSD/NVMe ディスクがサポートするマシンで etcd を実行することが強く推奨されます。
デプロイされた OpenShift Container Platform クラスターでモニターする主要なメトリクスの一部は、etcd ディスクの write ahead log 期間の p99 と etcd リーダーの変更数です。Prometheus を使用してこれらのメトリクスを追跡します。etcd_disk_wal_fsync_duration_seconds_bucket
は etcd ディスク fsync の期間を報告し、etcd_server_leader_changes_seen_total
はリーダーの変更を報告します。低速なディスクを除外し、ディスクが適度に高速であることを確認するには、etcd_disk_wal_fsync_duration_seconds_bucket
の 99 パーセンタイルは 10ms 未満である必要があります。
I/O ベンチマークツールの fio は、OpenShift クラスターの作成前後に etcd のハードウェアを検証するために使用できます。fio を実行し、結果を分析します。
podman や docker などのコンテナーランタイムが test 下のマシンにインストールされ、etcd がデータを書き込むパス (/var/lib/etcd) がある場合は、以下を実行します。
手順
podman を使用する場合は、以下を実行します。
$ sudo podman run --volume /var/lib/etcd:/var/lib/etcd:Z quay.io/openshift-scale/etcd-perf
または、docker を使用している場合は以下を実行します。
$ sudo docker run --volume /var/lib/etcd:/var/lib/etcd:Z quay.io/openshift-scale/etcd-perf
この出力では、実行からキャプチャーされた fsync メトリクスの 99 パーセンタイルの比較でディスクが 10ms 未満かどうかを確認して、ディスクの速度が etcd をホストするのに十分であるかどうかを報告します。
etcd はすべてのメンバー間で要求を複製します。そのため、そのパフォーマンスはネットワーク入出力 (IO) のレイテンシーによって大きく変わります。ネットワークのレイテンシーが高くなると、etcd のハートビートの時間は選択のタイムアウトよりも長くなり、クラスターに中断をもたらすリーダーの選択が発生します。デプロイされた OpenShift Container Platform クラスターでのモニターの主要なメトリクスは、各 etcd クラスターメンバーの etcd ネットワークピアレイテンシーの 99 番目のパーセンタイルになります。Prometheus を使用してメトリクスを追跡します。histogram_quantile(0.99, rate(etcd_network_peer_round_trip_time_seconds_bucket[2m]))
は、メンバー間のクライアント要求の複製を終了するまでの etcd のラウンドトリップタイムを報告します。これは 50 ミリ秒未満である必要があります。