2017-04-06 7 views
0

私は最終的に実行したい1000の同一のポッドを持っていると言いますが、ノードリソースは10個のポッドだけを並行して実行できます。利用可能なリソースより多くのポッドをスケジュールする

各ポッドは、正常に終了すると最終的にはRCを削除するので、十分な時間があれば、すべてのポッドを実行する必要があります。

すべての1000個のポッドを同時にスケジュールすると、最初は990個が保留中です。 The schedulerは、ビジーなループ上のすべての990ポッドをスケジューリングしようとし、実行中の10個のポッドの1つが取り外された後でのみ、特定のポッドに対して操作が成功します。

私の状況では、このビジーループはスケジューラのすべてのリソースを利用する可能性が高いため、理想的なものとは限りません。 kubernetesによってネイティブに提供されるこれに対する代替ソリューションはありますか?あなたが対処できるよりも多くのポッドをスケジューリングするというこの特定の動作は、kubernetesが最適化するものではないことは明らかです。

+1

あなたのポッドで変なことをしているようです。ここでジョブを使用する方が理にかなっていますか? –

+0

ユースケースについて詳しく説明する必要があります。なぜなら、1000個の同一のポッドを次々と実行することは意味をなさないからです。 –

+0

@ PixelElephant:私は仕事が存在することを知らなかったことが判明し、それはまさに私が望んでいたものです。それを回答として投稿したい場合は、私はそれを受け入れることを嬉しく思います! – Gabriel

答えて

1

このタイプのワークロードは、Jobリソースに適しています。

あなたが実行するポッドの固定数を持っているので、これを行う最も簡単な方法は、あなたが、その後.spec.parallelismを通じて、同時に実行されているポッドの数を制御することができ1000

.spec.completionsセットでジョブを作成することになります。デフォルトではこれは1に設定されています。つまり、一度に1つのポッドしか実行されませんが、より高い値に設定すると、ジョブの処理が速くなります(ノードが処理できる限界である10など)。

関連する問題