Cách tốt nhất để khởi chạy 100 máy Docker giống hệt nhau trên AWS?


7

Tôi cần phải làm một số thử nghiệm quy mô lớn trên một hệ thống. Hệ thống bao gồm 2 phần chính: Trình quản lý và Nút. Sẽ chỉ có một máy chủ quản lý, nhưng 100 nút. Cả trình quản lý và các nút đều là hình ảnh Docker.

Tôi muốn có thể tạo ra một thiết lập trên AWS, trong đó một phiên bản của người quản lý và 100 phiên bản (một phiên bản cho mỗi máy chủ) của nút được bắt đầu.

Tôi sẽ sử dụng cái gì cho việc này? Người quản lý và các nút sẽ có thể giao tiếp với nhau và các nút không được tải cân bằng theo bất kỳ cách nào. Vì vậy, họ cần một IP nội bộ chuyên dụng mà người quản lý có thể giao tiếp.

Tôi đã xem ECS và CloudFormation + EC2 với AMI tùy chỉnh, nhưng tôi không chắc chắn con đường nào sẽ đi.

Lý tưởng nhất là tôi muốn một kịch bản mà thỉnh thoảng tôi có thể chạy để khởi chạy các máy chủ và đóng chúng xuống một cách dễ dàng.

Bất kỳ đề xuất nào về những gì tôi có thể làm trên AWS để khởi chạy thiết lập này một cách dễ dàng?

Câu trả lời:


4

Nhìn vào AWS Fargate - nó cho phép bạn chạy các thùng chứa Docker của mình mà không cần phải quay các phiên bản EC2 cho cụm ECS. Bạn chỉ cần lên lịch cho các Nhiệm vụ (hoặc Dịch vụ), mỗi lần nhận là địa chỉ IP riêng và họ có thể nói chuyện với nhau.

Bạn cũng có thể sử dụng AWS Service Discovery để tạo điều kiện đăng ký và tra cứu địa chỉ IP của nhiệm vụ.

BTW Lưu ý rằng giới hạn đồng thời Fargate mặc định là 20 Nhiệm vụ / Dịch vụ - nếu bạn cần 100 người trong số họ, bạn sẽ phải tăng một vé hỗ trợ tăng Giới hạn Dịch vụ.

Chúng tôi đã nâng nó lên tới 200 nhiệm vụ đồng thời vì quá trình xử lý của chúng tôi chạy song song hơn 160 container, tất cả đều có trên Fargate mà không cần một EC2 nào để quản lý.

Cập nhật - cách quay 100 container

Tôi có thể cho bạn biết cách chúng tôi thực hiện với Fargate - trong đường ống CI / CD của chúng tôi, chúng tôi xây dựng hình ảnh chứa và tải lên ECR. Một phần của nguồn cũng là mẫu CloudFormation (CFN) và trong giai đoạn Triển khai của đường ống, chúng tôi tạo / cập nhật ngăn xếp CFN để tạo ECS TaskDefDef với tất cả các tham số vùng chứa.

Sau đó, chúng tôi đã có một công việc lập lịch được viết bằng Python và được kích hoạt bởi CloudWatch Event (công cụ lập lịch giống như cron) tìm kiếm ARN xác định nhiệm vụ và chạy hơn 160 nhiệm vụ từ nhiệm vụ duy nhất đó. Bạn có thể cung cấp cho mỗi Tác vụ một tham số bổ sung hoặc ghi đè một số cấu hình, v.v. Hoặc không và chỉ cần xoay nó lên.

Chúng tôi đã từng sử dụng EC2 / ECS và trước tiên phải thực hiện thêm một bước - mở rộng nhóm Tự động ECS ​​thành hàng chục nút để hỗ trợ khối lượng công việc của chúng tôi và sau đó ở quy mô cuối cùng trở về 0. Khác với điều đó giống như bạn chạy nó trên Fargate hoặc trên EC2 / ECS.

Mong rằng sẽ giúp :)


Tôi cũng đã xem Fargate, nhưng các nút đang chạy mô phỏng, vì vậy tôi không chắc liệu nó có "xấu" không khi tôi không thể kiểm soát kích thước cá thể của chúng. Nhưng không phải thiết lập ban đầu của ECS / EC2 so với ECS / Fargate khá giống nhau, ngoài việc bạn không phải nghĩ về EC2?
Xe đẩy

@Trolley đã cập nhật câu trả lời với phương pháp quay vòng hơn 160 container của chúng tôi.
MLu

@Trolley Fargate dự trữ CPU và Bộ nhớ cho các thùng chứa của bạn - chúng tôi đã không quan sát thấy bất kỳ sự suy giảm nào về hiệu suất trên Fargate so với EC2.
MLu

1

Tại sao bạn không sử dụng Terraform cho mục đích này? Nó có thể khởi chạy bao nhiêu trường hợp bạn muốn, tạo mạng cho bạn, tạo nhóm bảo mật, ECS, IAM hoặc bất cứ điều gì bạn muốn tạo và chấm dứt dễ dàng khi bạn muốn. Điều này được sử dụng rộng rãi trong công nghiệp bây giờ.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.