Introducing Fly Kubernetes

Bài tóm tắt Fly.io 2023 3. Quy mô lớn Độ khó: Trung bình

Fly.io · 2023 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Bài ra mắt sản phẩm (beta). Đọc cùng Fly.io 2023 (vì sao Fly.io bỏ scheduler toàn cục).

Bối cảnh

  • Fly.io chạy container dưới dạng microVM (Firecracker) trên máy tự đặt ở hàng chục region. Lúc đầu dùng Nomad, kèm proxy Anycast tự viết bằng Rust và mạng riêng WireGuard/IPv6 trên eBPF.
  • Theo Fly.io, đặc trưng của orchestrator "chuẩn" là scheduler toàn cục biết chỗ trống trên mọi máy. Với hơn 200.000 ứng dụng trên mọi châu lục (2023), độ trễ ánh sáng làm việc giữ một bức tranh toàn cục chính xác trở nên khó. Thêm nữa, scheduler muốn bin-packing tối ưu nên có khi đặt app ở Rio khi khách xin São Paulo.
  • Họ đã thay đồng thuận toàn cục bằng trạng thái cục bộ trên mỗi máy (mỗi máy là nguồn sự thật cho app trên nó) và một "scheduler" kiểu thị trường đấu giá tài nguyên trong region. Lời gọi Fly Machines API có thể thất bại chứ không tự đi tìm chỗ khác như Nomad hay K8s.

Thay đổi chính

  • Phần "tìm chỗ khác, thử lại" được tách khỏi orchestrator và giao cho thành phần phía trên: thường là CLI flyctl, nhưng ai cũng có thể dựng orchestrator riêng trên API.
  • FKS = K3s + Virtual Kubelet: Virtual Kubelet đăng ký với K8s như một node nhưng chuyển API của kubelet đi nơi khác; ở đây mỗi Pod thành một Fly Machine (CreatePod → POST /apps/{app}/machines). K3s dùng kine thay etcd bằng SQLite nên chạy được trên một máy không có trạng thái phân tán. Mỗi cluster là K3s + Virtual Kubelet trên một Fly Machine; không cần node cấp riêng, kube-proxy, CNI vì nền tảng đã lo.
  • Người dùng được khai báo trạng thái đầy đủ (replica, autoscaling, volume) và để K8s reconcile (máy chết thì tự dựng lại), thay vì fly.toml.

Vì sao

Bài học cho SWE

  • Tách lớp: một API đơn giản, dự đoán được, có thể thất bại; logic thử lại/đặt lại chỗ để ở lớp trên.
  • Virtual Kubelet cho phép dùng công cụ K8s trên một nền tảng không phải K8s.
  • Control plane nhỏ (một máy, SQLite) đủ cho cluster của một khách khi dữ liệu thật nằm ở nền tảng dưới.

Liên quan