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
- Theo Fly.io, hệ đặt chỗ kiểu thị trường "nhanh hơn và ngu hơn" đồng thuận toàn cục; cái giá là nền tảng làm ít việc hơn cho người dùng. Đặt K8s lên trên như một plugin trả lại phần "robot reconcile" cho ai cần (Nền tảng nội bộ cho service (đường ray chung), Tự động hoá vận hành và auto-remediation).
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
#Fly Kubernetes#K3s#Virtual Kubelet#kine#Fly Machines API#Market-based scheduler#Global consensus#Nomad#Declarative reconcile
Được nhắc tới trong
Công ty (1)