2017-01-16 27 views
22

Tôi muốn biết cách định cấu hình công cụ này để bắt đầu với số lượng nút tối thiểu và tăng lên số lượng nút tối đa khi được yêu cầu.Làm thế nào để cấu hình autoscaling trên bệ docker?

Tôi có nên sử dụng một công cụ khác hoặc công cụ docker có thể giải quyết vấn đề này cho tôi không?

+0

Theo yêu cầu đề xuất/tính năng trong [reparm chính thức] (https://github.com/docker/swarmkit/issues/1663), [dockercloud -haproxy] (https://github.com/docker/dockercloud-haproxy#running-with-docker-swarmmode-swarm-mode) công cụ trông giống như nó hoạt động với Swarm ra khỏi hộp, nhưng tôi đã không xác nhận. – smeeb

+0

@smeeb hiện công cụ đó có bao gồm tự động tính toán không? – 030

+0

dockercloud-haproxy phân phối các yêu cầu cùng với các vùng chứa hiện tại, nó không hỗ trợ tự động mở rộng quy mô. – raarts

Trả lời

27

Câu trả lời ngắn: Hiện không có cách nào dễ dàng để thực hiện việc này với Docker Swarm ngay bây giờ.

Docker Swarm (hoặc chế độ Swarm) không hỗ trợ tự động chia tỷ lệ máy ngoài hộp. Bạn sẽ cần phải sử dụng một giải pháp khác cho điều đó như docker-machine để tạo máy (có đế cắm) trên cơ sở hạ tầng của bạn và liên kết chúng với cụm Swarm hiện có (với docker swarm join).

này sẽ liên quan đến rất nhiều kịch bản nhưng ý tưởng là để giám sát các cụm cho CPU/Memory/sử dụng Mạng (với top hoặc monit) và một khi nó vượt xa ngưỡng (nói 70% tổng nguồn cluster) , bạn kích hoạt một tập lệnh gọi docker-machine để mở rộng cụm. Sử dụng cùng ý tưởng bạn cũng có thể giảm tỷ lệ bằng cách tháoxóa nút (tốt nhất là Agent nút) từ cụm đám hiện có khi bạn ở dưới ngưỡng thấp hơn.

Bạn cần đảm bảo rằng bạn đang theo dõi việc sử dụng tài nguyên bền vững nếu bạn muốn sử dụng tiêu chí này hoặc bạn sẽ có cơ sở hạ tầng và phá hủy các nút từ những thay đổi thường xuyên và đột ngột trong việc sử dụng tài nguyên.

Bạn có thể xác định giới hạn dưới và giới hạn trên cho các máy trong cụm để giữ cho mọi thứ được kiểm soát.

Lưu ý rằng Swarm yêu cầu ít nhất 3 Manager nút (được đề nghị 5) để duy trì số đại biểu cho thuật toán Đồng thuận phân tán. Vì vậy, giới hạn thấp nhất được đề xuất tối thiểu là 5 nút (bạn có thể mở rộng với Agent các nút do tài nguyên đang được các dịch vụ sử dụng gia tăng).

Để một mức độ nào, bạn cũng có thể có một cái nhìn tại Docker InfraKit hoặc Terraform cho tự động hóa Cơ sở hạ tầnggiám sát sức khỏe.

Cập nhật: Hiện nay, một cross-platform autoscaler hứa hẹn hỗ trợ Swarm Chế độ nhiệm vụ tự động mở rộng quy mô: Orbiter. Mặc dù vẫn không có gì out-of-the-box chưa cho dịch vụ/máy autoscaling.

+0

Cảm ơn @abronan! Theo tôi hiểu, các nút có thể được mở rộng chỉ với các công cụ bên ngoài. Điều gì về container? có thể tự động cân bằng container không? Hoặc tôi có nên sử dụng một công cụ khác như kubernetes? –

+1

@CelsoAgra AFAIK, có lệnh 'docker service scale' (hoặc đối tác' docker-compose') nhưng bạn cũng phải kích hoạt tỷ lệ sử dụng số liệu thống kê cho các yêu cầu đến hoặc sử dụng cpu chẳng hạn. Kubernetes thực sự có một [pod autoscaler] (https://kubernetes.io/docs/user-guide/horizontal-pod-autoscaling/) dựa trên việc sử dụng tài nguyên để điều này có thể phù hợp với trường hợp sử dụng của bạn :) – abronan

+0

@abronan (hoặc bất kỳ ai) Bạn có biết liệu cộng đồng Docker có tích hợp tự động chia tỷ lệ được lên kế hoạch trên Lộ trình Docker không? Tôi cảm thấy như thế này sẽ là một tính năng được sử dụng rất nhiều nếu Docker hỗ trợ quyền này ... – smeeb

0

Theo số this issue on GitHub, tính năng tự động quy đổi không được hỗ trợ tại thời điểm này. Một trong những người tham gia cuộc thảo luận đã chỉ ra rằng:

Hiện không có. Swarm sử dụng Docker-Compose để mở rộng quy mô. Giám sát CPU/QPS là cần thiết để thực hiện tự động mở rộng quy mô. Swarm hiện chưa có .

Câu hỏi đã được hỏi nếu có vé hiện tại có thể được liên kết với câu hỏi này để tính năng này có thể được triển khai.

1

Mở rộng quy mô khá dễ dàng. Bạn chỉ có thể tiếp tục lên lịch các vùng chứa khi cần. Sau đó, bạn chỉ cần tạo một tập lệnh tìm kiếm vùng chứa đang chờ xử lý và mở rộng quy mô cụm. Ví dụ: nếu bạn đang sử dụng mẫu CloudFormation chính thức trên aws cho bầy đàn, bạn chỉ có thể thay đổi số mong muốn trên nhóm tự động. Ví dụ về tập lệnh lặp lại có thể trông giống như sau:

services=$(docker service ls --format '{{.ID}}') 
for service in $services; do 
    tasks=$(docker service ps $service --format '{{.ID}}') 
    for task in $tasks; do 
    if docker inspect $task --format '{{.Status}}' | grep 'insufficient resources' 1>/dev/null; then 
     scale-up-cmd 
    fi 
    done 
done 
Các vấn đề liên quan