2017-03-10 11 views
0

多くのCPUを使用するアプリケーションがあります。私はKubernetesで作業負荷を小規模な作業の中に分散する方法として考えていました。その後、いくつかのCPU制限付きポッドを作成しました。 DockerにはCPU集約型プロセスを実行するすべてのコンテナ間でCPUの総量が分配されるという制約があります(https://docs.docker.com/engine/reference/run/#cpu-share-constraint)。そのため、各ポッドは、Dockerが単独でリソースを共有しているので、必要なCPUの総量を使用することはできません。Kubernetes/Dockerで分散CPUを大量に使用するプロセス

例:クラスタ全体で利用可能な80個のCPUコアとKubernetesプラットフォーム

のTest1:

環境

  • コンテキスト:5つのCPUコア
  • プロセスに限定1つのポッド:1 1つのポッドで実行される1つのプロセス
  • 継続時間:1つのプロセスが終了0:02:05

Test2を:

  • コンテキスト:5つのCPUコアに限ら12個のポッド各
  • プロセス:すべてのポッド
  • 期間に各実行プロセス12:それは午後12時03分55秒の平均を取りそれぞれを処理する

これは、CPUリソースを要求する複数のコンテナがある場合、CPU使用率が影響を受けてから処理時間が長くなることを意味します。

Dockerは私が必要としているように使用されることはないと思います。

このシナリオでは、Dockerコンテナの代わりにVMを使用する方が良いと思いますが、DockerやKubernetesの設定を変更する方法がありますか?

有用なコメントがあれば幸いです。

答えて

0

クラスタの設定や実際に処理していることが分かりませんので、正確な答えは得られません。しかし、私は違いは、CPUシェアの制約があなたが思っていることをしていないためだと思う。

リンクされたドッキングウィンドウのドキュメントから:CPU集約型のプロセスが動作しているときの割合のみ適用されます

。 1つのコンテナ内のタスクがアイドル状態の場合、他のコンテナはCPUの残り時間を使用できます。

これは、そのホスト上で実行されている他に何もありません場合は5、にCPU-株式を制限していても、あなたの最初のテストでは、それがCPUを100%まで、CPU使用率で成長し続けることを意味しそのホスト上の時間が使い果たされる。

12プロセッサの場合、これらの各コンテナは実際にはCPUリソースのホスト上の他のコンテナと競合しているため、ホストシステムのCPU全体の一部しか受信されません。彼らはそれぞれ合計CPU時間の等しい割合を受け取りますが、そのシェアはCPU時間のすべてを受け取るよりも少なくなります。

CPU共有を使用してリソースを制限するのではなく、--cpuのフラグを使用できます。これにより、実際に達成しようとしていると思うCPU使用制限が与えられます。

コンテナが使用できるCPUリソースの量を指定します。たとえば、ホストマシンに2つのCPUがあり、--cpus = "1.5"を設定した場合、コンテナは最大でも1つのCPUにアクセスできることが保証されます。これは、--cpu-period = "100000"と--cpu-quota = "150000"の設定と同じです。 Docker 1.13以降で利用可能です。

Docker Resource Constraints Documentation

関連する問題