イメージの取得中に、Podで pull QPS exceeded エラーが発生するのはなぜですか?
ポッドの起動時に、 pull QPS exceeded といったメッセージが表示され、イメージのプル操作がスロットリングされていることを示すエラーが発生する場合があります。
コンテナ・イメージをプルする必要があるポッドをデプロイすると、次のような症状が見られることがある:
- Podの起動中に「
pull QPS exceeded」を含むエラーメッセージが表示される - 画像の取り出しに時間がかかる(特に複数の大きな画像を取り出した場合
- ポッドが
Runningの状態に到達するのに予想以上に時間がかかる - 画像のプルオペレーションがスロットルまたはレート制限されているように見える
pull QPS exceeded エラーが発生し、画像の取得が遅くなる最も可能性の高い原因は、VPCワーカーノードのディスクI/O帯域幅の上限に達していることです。
VPCワーカーノードの帯域幅制限は、設定によって異なります:
- 標準ワーカーノード(セカンダリストレージなし) :ディスクI/Oオペレーションは 393 Mbps (49 MB/秒) に制限されます
- セカンダリストレージを持つワーカーノード :選択したストレージ階層に応じて帯域幅の上限が高くなる
複数のポッドが同時に大きなコンテナイメージを取り出そうとした場合:
- 各画像プル操作でディスクI/O帯域幅が消費される
- 帯域幅の需要を合わせると、49MB/秒の制限がすぐに飽和します
- 制限に達すると、画像の引き抜き動作が大幅に遅くなる
- Kubernetes 操作の処理速度を制限するため、
pull QPS exceededのエラーが発生する可能性があります
VPC ワーカーノードの帯域幅制限に達しているかどうかを確認するには、 IBM Cloud の監視機能を使用します。
ディスクI/O帯域幅のチェック
-
クラスタの OpenShift コンソールで Observe → Metrics に移動します。
-
以下の Prometheus クエリーを使用して、ディスクの読み取りと書き込みのレートを監視する:
irate(node_disk_read_bytes_total[2m]) + irate(node_disk_written_bytes_total[2m]) -
結果を解釈する:
- 49M (49 MB/秒) に近づくか、またはそれ以上の値を示すデバイスがあれば、帯域幅の限界に達しています。
- 画像プル操作中に、この限界値または限界値付近の値が持続した場合、帯域幅の飽和が確認される。
- この制限値へのスパイクが複数回発生した場合は、帯域幅の制約が繰り返されたことを示す。
画像の引き込み時間をチェック
また、画像の引き込み時間を直接確認することもできる:
oc get events -A | grep -E "Successfully pulled image"
このコマンドは、各画像のプルにかかった時間を表示し、遅いプルを特定するのに役立ちます。
問題の解決
主要なソリューションセカンダリストレージでワーカープールを使用する
推奨されるソリューションは、セカンダリストレージが接続されたワーカープールを使用することです。 10iops-tier 、セカンダリストレージはブートディスクと競合しない専用のI/O帯域幅を提供するため、同時イメージプルのスループットが大幅に向上し、ポッドの起動時間が短縮されます。
-
セカンダリストレージで 新しいワーカープールを作成する。
- 新しいワーカープールを作成するときは、セカンダリストレージを持つフレーバーを選択します。
- 最適なパフォーマンスを得るには、
10iops-tierストレージオプションのいずれかを使用します。
-
ワークロードの移行 を新しいプールに移す。
-
マイグレーション完了後、 古いワーカープールを排水し、削除する。
その他の考慮事項
セカンダリー・ストレージへのアップグレードが第一の解決策だが、それ以外にも方法はある:
- 画像サイズを小さくする
- 多段階ビルドを使用し、レイヤーを最小限に抑える
- 画像キャッシュの使用
- ワーカーノードによく使われる画像を事前にプル
- 最適化 imagePullPolicy
- 不要なプルを減らすためにポッドの仕様を設定します:
imagePullPolicy: IfNotPresentを使って、ノードにまだ画像が存在しない場合のみ画像を取り出します。- 特に毎回最新バージョンを引っ張り出す必要がない限り、
imagePullPolicy: Always。 - 本番ワークロードでは、
latestではなく、特定の画像タグを使用し、IfNotPresentと組み合わせることで、プルを最小限に抑えることができます。
- モニタリングとアラートの設定
- 49MB/秒に近づく高いディスクI/Oレートが持続した場合のアラートを設定する。
- デプロイメントメトリクスの一環として、イメージのプル時間を監視します。
- ポッドの起動時間を追跡し、パフォーマンスの低下を特定する。