Cách rẻ nhất và dễ nhất để chạy quy trình Docker định kỳ


7

Tôi có một quy trình Python được neo mà khách hàng muốn chạy một hoặc hai lần một tháng. Nó gọi một số API của Google và lưu trữ kết quả trong Google Sheet. Nó không chấp nhận yêu cầu mạng. Tôi muốn cung cấp một "nút ma thuật" sẽ quay thùng chứa Docker và sau đó tắt mọi thứ.

Một số nền tảng: Trước đây tôi đã triển khai điều này cho một cá thể vi AWS EC2 thông qua Docker Cloud. Khách hàng của tôi có tài khoản Docker Cloud và có thể chạy container theo yêu cầu, tương đối không đau. Có hai vấn đề với quy trình công việc này:

  1. Ví dụ EC2 được cung cấp (máy chủ Docker) đã hoạt động 24/7, cho dù bộ chứa Docker có chạy hay không. Điều này trở nên đắt đỏ.
  2. Docker đám mây đóng cửa một tháng trước.

Các lựa chọn thay thế dường như là các dịch vụ Google và AWS Kubernetes. Đặt phòng của tôi là họ sẽ quá phức tạp để khách hàng của tôi sử dụng. Khuyên bảo?


Quá trình này kéo dài bao lâu?
PrestonM

Nướng mã trăn của bạn vào lambda AWS
Tensibai

@PrestonM, khoảng 25 phút của hàng trăm cuộc gọi API mạng được điều chỉnh.
asciimo

@Tensibai, tôi đã xem xét điều đó, nhưng khách hàng của tôi sẽ cần một tài khoản AWS và sẽ cần học cách khởi chạy lambda. Chắc chắn một lựa chọn, nhưng tôi đã có đầy đủ chức năng, container này di Docker rằng tôi nên có thể chỉ cần ném lên trên đám mây :)
asciimo

1
Họ sẽ không cần phải hiểu Lambda, bạn có thể cung cấp cho họ một nút nút RÚT thông qua API Gateway, S3 hoặc bất kỳ trình kích hoạt được hỗ trợ nào khác. Phải nói rằng, 25 phút là khoảng 5 lần quá dài cho một lời mời Lambda: P
Tim Malone

Câu trả lời:


3

AWS cung cấp fargate ngay bây giờ, được quản lý bởi họ chứ không phải là một dịch vụ như ECS mà bạn đã chạy các máy chủ và họ quản lý mặt phẳng điều khiển. Fargate về cơ bản là "máy chủ" ECS. Bạn có thể sử dụng một chiếc đồng hồ đám mây được lên lịch ngay cả để thỉnh thoảng chạy một cái gì đó theo lịch trình trên cụm ECS rộng lớn. Do đó, bạn chỉ trả tiền cho những gì bạn đang sử dụng. Một cái gì đó để xem xét là fargate đắt hơn một chút so với ECS chạy trên thể hiện EC2 của riêng bạn, nhưng nếu bạn thường xuyên chạy, bạn có thể sẽ thấy một khoản tiết kiệm cận biên khá cao.

Một lựa chọn khác là tự động hóa một cái gì đó tương tự. Vì vậy, hãy tạo một cụm ECS với ASG sao lưu nó và điều chỉnh tỷ lệ để phù hợp với nhu cầu ECS, sau đó sử dụng cloudwatch để khởi chạy container. ECS sau đó có thể mở rộng quy mô lên xuống, nhưng điều này có thể khó khăn vì phương pháp này thường được sử dụng để tự động hóa các cụm ECS dựa trên trình kích hoạt cloutwatch, do đó bạn có thể phải hack xung quanh trong cloudwatch và có thể hack cùng một tập lệnh lambda, vì về mặt kỹ thuật không sử dụng nó theo cách nó dự định. Cuối cùng, điều này có thể là hiệu quả nhất về chi phí, nhưng trong trường hợp của bạn, tiết kiệm chi phí có thể không đáng kể.

Theo tôi, Kubernetes là một cây búa nặng mười tấn mà bạn đang sử dụng để treo một bức tranh trên tường. Đó là cách quá mức cần thiết.

Bạn có thể khám phá 2 tùy chọn đó và xem liệu chúng có hiệu quả về chi phí và đủ dễ quản lý hay không. Việc điều phối container khác thường là quá mức cần thiết, ECS có lợi thế (thường là nhược điểm) là đơn giản ngu ngốc và bạn trả rất ít và về cơ bản không có chi phí hoạt động cho máy bay điều khiển.


2

Cách rẻ nhất là sử dụng Sổ đăng ký Container của Heroku .

Nó hoàn toàn miễn phí, dễ sử dụng và triển khai (Bạn thậm chí không cần heroku CLI, chỉ cần docker đẩy hình ảnh của bạn đến registry.heroku.com bằng mã thông báo xác thực của bạn)

Nó có thể không phải là tốt nhất mặc dù dựa trên ý kiến ​​của bạn tôi nghĩ rằng nó sẽ tốt cho bạn, xem khuyết điểm ở đây .

Một lựa chọn rẻ tiền khác là hyper.sh .


2

Bạn có thể kết hợp mạnh mẽ của ZappaHug để chuyển đổi mã của mình trong chức năng AWS Lambda không có máy chủ chỉ thêm một trình trang trí vào chức năng chính của quy trình python của bạn

import hug
[...]

@hug.get('/your_endpoint_name')
def your_function_name():
    """Here goes your code"""
    [...]
    return "Function finished sucesfully"

Sau này, bạn có thể triển khai lên AWS Lambda zappa deploy prodvà bạn sẽ chỉ cần gọi URL được trả lại hai lần một tháng.


1

Mặc dù tôi thường đồng ý với các câu trả lời khác rằng Kubernetes là quá mức cần thiết, KubeSail đơn giản hóa nó càng nhiều càng tốt để giúp dễ dàng chạy các tác vụ như của bạn. Có một cấp miễn phí sẽ cho phép bạn điều hành công việc của mình vô thời hạn. Bạn chỉ cần đăng nhập bằng GitHub, lấy cấu hình Kube của bạn và sau đó bạn có thể sử dụng như sau:

apiVersion: batch/v1
kind: Job
metadata:
  name: my-python-script
spec:
  template:
    spec:
      containers:
      - name: my-python-script
        image: asciimo/my-python-image

Chỉ cần lưu ở trên để my-job.yaml, thay thế image: asciimo/my-python-imagebằng tên hình ảnh của bạn trên dockerhub (hoặc đăng ký khác), sau đó chạy

kubectl apply -f my-job.yaml

Nếu bạn muốn tìm hiểu thêm về Jobs, tài liệu Kubernetes chứa nhiều thông tin và tùy chọn hơn: https://kubernetes.io/docs/con accept / workloads / controlers / jobs-run-to-compionion /

Tiết lộ đầy đủ, tôi là một trong những người sáng lập KubeSail



0

Mô-đun ec2 có thể có chức năng cần thiết (khởi chạy, chạy một số tác vụ và sau đó chấm dứt chúng) ngoài luồng . Và thậm chí có mẫu playbook.

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.