2017-09-20 6 views
5

を使用して最小コンテナの要件を設定するには:どのようにあなたがそうのような最大のシステム要件を設定することができますドッカースウォームでドッカースウォーム

my-service 
    image: hello-world 
    deploy: 
    resources: 
     limits: 
     cpus: '2' 
     memory: 4GB 

私は2つのCPUコアの最小システム要件を持つコンテナを持っていると4GBのRAMでありますDocker Swarmのノードの正確なサイズつまり、このコンテナが実行されているときは、そのノードで実行されている唯一のコンテナである必要があります。

しかし、コンテナを他のコンテナと一緒に実行すると、他のコンテナが同じノードに配置されます。 Dockerがこのコンテナに最低レベルのCPUとRAMを与えるようにするにはどうすればよいですか?

更新

@yamenkにより示唆されるように、私はしかし、私はまだ私が保護しようとしているコンテナのパフォーマンスの問題が発生し、同じノード上で起動する他のコンテナを取得し、reservationsを追加しました:

my-service 
    image: hello-world 
    deploy: 
    resources: 
     reservations: 
     cpus: '2' 
     memory: 4GB 

答えて

3

更新

明らかに、ドッカーswarmのメモリ予約の効果はあまりよく記録されておらず、彼らはベストエフォートとして働いています。メモリ予約フラグの効果を理解するために、チェックdocumentation

メモリ予約が設定されている

、ドッカーが 予約限界まで自分の消費を制限するために、メモリの競合や 低メモリと力のコンテナを検出します。

...

メモリ予約はソフトリミット機能であり、制限を超えることはないだろう を保証するものではありません。代わりに、この機能は、メモリが大量に競合する場合、予約ヒント/セットアップで に基づいてメモリが割り当てられるように、 を保証しようとします。

他のコンテナが同じノード上で実行されないようにするには、サービス制約を設定する必要があります。あなたができることは、特定のラベル群のノードを与え、これらのラベルを使用して、特定のラベルを持つノード上でのみサービスを実行することです。次に、あなたのスタックファイル内に、あなただけの指定されたラベルを持つノード上で実行するためのコンテナを制限し、他のことができ

docker node update --label-add hello-world=yes <node-name> 

としては、ノードラベルは、コマンドを使用してノードに追加することができ、hereをdecribedコンテナを使用して、hello-world=yesというラベルの付いたノードを回避します。

my-service: 
    image: hello-world 
    deploy: 
    placement: 
     constraints: 
     - node.labels.hello-world == yes 

other-service: 
    ... 
    deploy: 
    placement: 
     constraints: 
     - node.labels.hello-world == no 

あなたが複数のノード上で、私のサービスのレプリカを開始し、今でも各ノードの一つの容器を実行しているしたい場合、あなたは私のサービスのグローバルモードを設定し、ノードに同じラベルを追加する必要がありますコンテナを実行する場所。

my-service: 
    image: hello-world 
    deploy: 
    mode: global 
    placement: 
     constraints: 
     - node.labels.hello-world == yes 

旧回答:

はあなたのようなリソース予約を設定することができます。

グローバルモードは、1個のコンテナがサービス上の制約を満たす各ノードを実行することを保証します

version: '3' 
services: 
    redis: 
    image: redis:alpine 
    deploy: 
     resources: 
     reservations: 
      cpus: '1' 
      memory: 20M 
+0

「予約」を追加しましたが、同じノード上で起動している他のコンテナを取得して、保護しようとしているコンテナのパフォーマンス上の問題を引き起こします。 –

+1

@MuhammadRehanSaeed更新の回答 – yamenk

+0

"ベストエフォート"それは私が恐れていたものです。制約は素晴らしいですが、余分な作業が必要です。 –

関連する問題