On-Demand Dagger Engines with Argo CD, EKS, and Karpenter
Bài tóm tắt Dagger 2024 2. Tăng trưởng Độ khó: Trung bình
Dagger · 2024 · 2. Tăng trưởng · Độ khó: Trung bình — bài gốc
Bài của nhà cung cấp, nửa hướng dẫn; mô tả cách chính Dagger chạy CI cho repo
dagger/dagger. Mọi số liệu là theo Dagger.
Bối cảnh
- Dagger Engine là thứ chạy pipeline CI (dựa trên BuildKit). Nâng cấp engine tại chỗ dễ gây gián đoạn, nên họ muốn developer tự chọn phiên bản engine trong workflow và phiên bản mới tự có sẵn khi phát hành.
- Hai cách scale: ngang (engine tạm, theo hàng đợi job, không có cache cục bộ bền giữa các lần chạy, rẻ khi ít dùng) và dọc (engine lớn sống lâu chạy phần lớn pipeline, có cache trên đĩa bền, đắt khi tải dao động). Bài chọn cách ngang.
Thay đổi chính
- Giao diện cho developer:
runs-on: dagger-v0-11-1; đổi phiên bản là đổi chuỗi đó. Bản tuỳ chọn thêm kích thước:dagger-v0-11-4-16c-32g. - Sinh hạ tầng theo phiên bản: Argo CD ApplicationSet với plugin đọc các release trên GitHub (từ một phiên bản tối thiểu, hỏi lại mỗi 120 giây) sinh một Application cho mỗi phiên bản: runner scale set của GitHub Actions, Dagger Engine (Helm chart), NodePool/NodeClass của Karpenter. Mỗi phiên bản có node riêng (taint chung + label
node-fortheo phiên bản), runner của phiên bản nào chỉ nói với engine cùng phiên bản. - Một engine mỗi node, nhiều runner: runner pod có request tài nguyên (1 core, 2 GB), engine không đặt giới hạn, để nhiều runner dùng chung cache của một engine. Một máy c6id.12xlarge chạy được khoảng 2 pipeline nặng (16 CPU mỗi cái) hoặc khoảng 30 job nhẹ (lint, scan, thông báo), hoặc trộn. Theo họ, pipeline thường nghẽn ở đĩa và CPU, nên chọn máy CPU đơn nhân mạnh có NVMe, để thư mục trạng thái của engine trên NVMe; chọn máy lớn (c6id.12xlarge/16xlarge) để nhiều job chung một cache hơn.
Kết quả (theo Dagger)
- Job được lập lịch nhanh hơn, engine tắt nhanh hơn; phiên bản mới tự có, mỗi workflow tự quyết khi nào nâng; chi phí EC2 giảm 80% sau khi chuyển (5/2024).
Vì sao
- Mỗi phiên bản engine là một nhóm hạ tầng riêng do dữ liệu (danh sách release) sinh ra, nên nâng cấp thành việc chọn phiên bản ở phía người dùng chứ không phải thao tác tại chỗ trên engine đang chạy (CI và build ở quy mô lớn).
- Gom nhiều job vào một engine trên một máy lớn đổi lấy cache dùng chung; co giãn node theo hàng đợi bỏ chi phí máy nhàn rỗi (Chi phí hạ tầng và build vs buy).
Bài học cho SWE
- Cho phép nhiều phiên bản hạ tầng CI cùng chạy và để người dùng chọn, thay vì nâng cấp tại chỗ cho mọi người cùng lúc.
- Đánh đổi cache với chi phí: máy lớn dùng chung cache tốt hơn nhưng chỉ đáng khi tải đủ dày.
- Đặt request tài nguyên ở runner (thứ developer chọn) chứ không ở engine dùng chung.
Liên quan
- Mercari 2026 (runner tạm và cache layer trên node) · Disney Hotstar 2020 (agent co giãn) · Railway 2025 (BuildKit)
- CI và build ở quy mô lớn · Chi phí hạ tầng và build vs buy
#CI runner#Dagger Engine#GitHub Actions Runner Controller#Argo CD ApplicationSet#Karpenter#EKS#NVMe#Horizontal vs vertical scaling#Version isolation
Được nhắc tới trong
Công ty (1)