私の理解では、Kubernetesで、Horizontal Pod Autoscalerを使用するときに、targetCPUUtilizationPercentage
フィールドが50%に設定されていて、すべてのポッドのレプリカの平均CPU使用率がその値を超えると、HPAはより多くのレプリカを作成します。平均CPUがしばらくの間50%を下回ると、レプリカの数が減少します。
これは私がよくわからない部分です:
ポッドのCPU使用率が0%ではなく10%の場合、HPAは引き続きレプリカを終了しますか?
10%のCPUはそれほど多くありませんが、0%ではないため、現在そのポッドでいくつかのタスクが実行されています。それが長時間続くタスク(数秒)であり、HPAがポッドを終了することを決定した場合、そのタスクは終了しません。
HPAは、ポッドのCPU使用率が0%の場合にのみポッドを終了しますか、それとも値がtargetCPUUtilizationPercentage
を下回っていることを確認すると、ポッドを終了しますか?
HPAはどのポッドを削除するかをどのように決定しますか?
ありがとうございました!
ですから、そこには2つの質問があり、1つずつ取り上げさせていただきます。最初の部分-レプリカセット内のポッドが消費している場合、たとえば10%の場合、Kubernetesはそのポッドを強制終了しますか?答えは「はい」です。 Kubernetesは個々のポッドを調べているのではなく、そのレプリカセット内のすべてのポッドにわたるそのメトリックの平均を調べています。また、スケールダウンは段階的です ここで説明されているように
質問の2番目の部分-ポッドが強制終了されようとしていて、まだいくつかの要求を処理しているときに、アプリケーションはどのように正常に動作しますか?これは ポッド終了の猶予期間 で処理できます。また、 PreStop
フック -を実装するとさらに効果的です。これにより、停止などを実行できます。着信リクエストを受け取りますが、既存のリクエストを処理します。これの実装は、使用している言語ランタイムによって異なるため、ここでは詳しく説明しません。
最後に、考慮すべき1つのシナリオは、ポッドが実行されていたVMが突然ダウンした場合)PreStopフックを実行する機会がない場合です!アプリケーションは、障害を処理するのに十分な堅牢性が必要だと思います。