2017-09-20 21 views
5

Trong Docker Swarm bạn có thể đặt yêu cầu hệ thống tối đa như sau:Làm thế nào để Thiết lập Cấu hình tối thiểu container Sử dụng Docker Swarm

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

Tôi có một container có yêu cầu hệ thống tối thiểu là 2 lõi CPU và 4GB RAM đó là kích thước chính xác của các nút trong Docker Swarm của tôi. Điều này có nghĩa là khi vùng chứa này đang chạy, nó cần phải là vùng chứa duy nhất chạy trên nút đó.

Tuy nhiên, khi tôi chạy vùng chứa cùng với những người khác, các vùng chứa khác được đặt trên cùng một nút. Làm thế nào tôi có thể đảm bảo rằng Docker cung cấp cho container này một mức tối thiểu của CPU và RAM?

Cập nhật

tôi thêm reservations theo đề nghị của @yamenk, tuy nhiên tôi vẫn nhận container khác bắt đầu trên cùng một nút mà gây ra vấn đề hiệu suất cho container Tôi cố gắng để bảo vệ:

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

Trả lời

3

Cập nhật

Rõ ràng ảnh hưởng của việc đặt trước bộ nhớ trong bệ đỡ không được tài liệu hóa và chúng hoạt động như một nỗ lực tốt nhất. Để hiểu được tác dụng của bộ nhớ lá cờ đặt phòng, kiểm tra documentation:

Khi đặt phòng bộ nhớ được thiết lập, Docker phát hiện tranh chấp bộ nhớ hoặc bộ nhớ và các lực lượng container thấp để hạn chế tiêu thụ của họ đến một giới hạn đặt phòng.

đặt phòng Memory

...

là một tính năng mềm giới hạn và không đảm bảo giới hạn sẽ không được vượt quá. Thay vào đó, tính năng này cố gắng đảm bảo rằng, khi bộ nhớ bị chi phối nhiều, bộ nhớ được cấp phát dựa trên về các gợi ý/thiết lập đặt trước.

Để thực thi không có vùng chứa nào khác chạy trên cùng một nút, bạn cần đặt ràng buộc dịch vụ. Những gì bạn có thể làm là cung cấp cho các nút trong các nhãn cụ thể của từng nhóm và sử dụng các nhãn này để lên lịch các dịch vụ chỉ chạy trên các nút có các nhãn cụ thể đó.

như mô tả here, nhãn nút có thể được thêm vào một nút bằng cách sử dụng lệnh:

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

Sau đó, bên trong ngăn xếp tập tin của bạn, bạn có thể hạn chế các container để chạy trên các nút chỉ có nhãn chỉ định, và khác vùng chứa để tránh các nút có nhãn 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 

Nếu bạn muốn bắt đầu bản sao của tôi-dịch vụ trên nhiều nút, và vẫn có một container chạy trên mỗi nút, bạn cần phải thiết lập các chế độ toàn cầu của my-dịch vụ, và thêm cùng một nhãn để hạch nơi bạn muốn một container để chạy.

Chế độ toàn cầu đảm bảo rằng đúng một container sẽ chạy mỗi nút đó đáp ứng các hạn chế về dịch vụ:

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

Cũ Trả lời:

Bạn có thể cài đặt tài nguyên như vậy:

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

Tôi đã thêm 'đặt chỗ', tuy nhiên tôi vẫn nhận các thùng chứa khác bắt đầu trên cùng một nút gây ra các vấn đề hiệu suất cho vùng chứa mà tôi đang cố gắng bảo vệ. –

+1

@MuhammadRehanSaeed cập nhật câu trả lời – yamenk

+0

"nỗ lực tốt nhất" Đó là những gì tôi lo sợ. Hạn chế là tốt đẹp nhưng yêu cầu thêm công việc. –

Các vấn đề liên quan