Migrating Large-Scale Interactive Compute Workloads to Kubernetes Without Disruption
Bài tóm tắt Uber 2025 4. Điều chỉnh Độ khó: Trung bình
Uber · 2025 · 4. Điều chỉnh · Độ khó: Trung bình — bài gốc
Bối cảnh
- DSW (Data Science Workbench): nền tảng notebook (Jupyter, RStudio) cho data scientist, ML engineer. Mỗi phiên là một container riêng, cho phép user tự cài package.
- Uber đang hội tụ về Kubernetes cho batch, stateless và storage, thay cho Peloton (orchestrator tự xây trên Mesos), theo các nguyên tắc của dự án Crane và việc dời hạ tầng dữ liệu lên GCP:
- chạy được cả on-prem lẫn cloud, không khoá nhà cung cấp;
- host đồng nhất, dựng zone tự động;
- dời năng lực lên cloud qua một nền tảng orchestration duy nhất.
- Vướng mắc trên Peloton: DSW chạy trên cụm riêng theo zone (zone hỏng là sập hẳn); cụm DSW quá tải trong khi cụm khác thừa; NFS mount cần nhóm host riêng.
Thay đổi chính
- Phiên DSW mô hình hoá thành Kubernetes Job thay vì viết CRD riêng (CRD linh hoạt hơn nhưng tốn công duy trì; tầng federation sẵn hỗ trợ Job):
- parallelism 1;
- completions 1.024 (phiên không bao giờ "xong");
restartPolicy: Nevervới backoffLimit cao;hostNetwork+ service mesh; mount secret và danh tính SPIRE.
- Federator (tầng federation cho batch): DSW không gửi thẳng vào cụm nữa mà gửi qua một dịch vụ cấp region.
- chọn cụm theo tài nguyên và nhu cầu, nên tải đều hơn;
- một cụm hay zone hỏng không làm sập DSW;
- thêm, bớt cụm mà team DSW không phải tham gia.
- NFS: Kubernetes của Uber lúc đầu chưa cho cài CSI driver, nên giữ cách mount cũ nhưng áp lên cả cụm, bỏ nhóm host riêng.
- Không làm mất môi trường của user:
- chuyển giữa orchestrator buộc restart container (mất bộ nhớ, đĩa cục bộ, package đã cài);
- Docker checkpoint và volume snapshot không dùng được hoặc không đủ nhanh;
- giữ toàn bộ môi trường trên NFS thì quá nhiều file nhỏ, tốn IOPS;
- giải pháp: theo dõi thư mục cài package bằng inotify (có debounce), ghi danh sách package cài/gỡ lên NFS, và tự cài lại khi phiên khởi động. Thêm API restart để báo user, checkpoint, tắt trên Peloton, dựng lại trên Kubernetes.
- Giữ trải nghiệm quan sát: nhân bản trạng thái gần realtime từ etcd sang Cassandra để giữ 30 ngày lịch sử trong Compute UI (UI của Peloton đổi tên); xem sandbox và log trực tiếp, lưu trữ log của pod đã kết thúc.
Kết quả (theo Uber)
Hàng nghìn phiên tương tác của hơn 2.000 user (bài nhắc khoảng 3.500 phiên) được chuyển mà không có gián đoạn lớn hay khiếu nại. DSW là một trong các workload batch đầu tiên chuyển hẳn sang Kubernetes.
Bài học cho SWE
- Tầng federation phía trên các cụm đổi "gửi việc vào cụm X" thành "gửi việc vào region": vừa HA vừa cân tải, và tách team nền tảng khỏi vòng đời cụm (Nền tảng nội bộ cho service (đường ray chung)).
- Migration workload có trạng thái của người dùng: tìm thứ user thật sự đau khi mất (package đã cài) rồi bảo tồn đúng thứ đó, thay vì cố checkpoint cả container (Migration không downtime).
- Đổi nền tảng thì phải giữ cả công cụ quan sát mà user quen dùng.
- Cùng mạch "tự xây rồi quay về chuẩn ngành": Peloton → Kubernetes, giống Twitter Gizzard → Vitess.
Liên quan
Được nhắc tới trong
Công ty (1)