Thay Kubernetes bằng systemd (2024)
(blog.yaakov.online)- Tác giả chia sẻ trải nghiệm thất vọng với độ phức tạp và mức tiêu tốn tài nguyên của Kubernetes khi vận hành máy chủ cá nhân, và đã thay thế bằng tổ hợp systemd và Podman
- Kubernetes hấp dẫn nhờ GitOps và tự động hóa, nhưng trong môi trường quy mô nhỏ thì lại là một hệ thống quá nặng
- Tận dụng tính năng tự động cập nhật của Podman và khả năng tạo service systemd có thể triển khai đơn giản các chức năng cốt lõi vốn có của Kubernetes
- Bài viết cũng giải thích tự động chạy service ở cấp người dùng bằng cách kết hợp systemctl và loginctl, đồng thời nhấn mạnh rằng mức tiêu thụ tài nguyên trên VPS đã giảm mạnh
- Tuy vậy, bài viết cũng đề cập rằng tích hợp systemd của Podman sắp được thay thế bằng một cách làm mới có tên "Quadlet"
Mở đầu: Lần đầu gặp Kubernetes
- Tác giả giới thiệu trải nghiệm thử nghiệm Kubernetes vào năm 2018, khi cố gắng dựng một cụm trên NUC cá nhân
- Kubernetes phức tạp, nhưng về cơ bản hoạt động theo một cấu trúc vòng lặp lặp lại như sau:
- Xác định trạng thái hiện tại → tính toán trạng thái mong muốn → tính toán khác biệt → áp dụng
- Các tính năng tự động hóa dùng nhiều thành phần như cert-manager đã để lại ấn tượng rất mạnh
Yêu cầu tài nguyên quá mức của Kubernetes
- Trên máy chủ cá nhân (NUC), Kubernetes gây ra mức sử dụng CPU liên tục, tiếng ồn quạt và nhiệt lượng tăng cao
- Nhiều bản phân phối khác nhau như Azure, MicroK8s, K3S cũng tiêu tốn tài nguyên đáng kể
- MicroK8s: dùng 12% CPU (VPS 2vCPU)
- K3S: dùng 6% CPU (Ampere A1 2vCPU)
Sự cám dỗ của tự động hóa GitOps
- Với các công cụ như Flux, việc tự động hóa triển khai dựa trên Git trở nên rất thuận tiện
- Chỉ cần push image container lên GitHub, máy chủ sẽ tự động triển khai phiên bản ứng dụng mới nhất
- Tuy nhiên, nếu không có Kubernetes thì việc triển khai kiểu tự động hóa như vậy là rất khó
Sự xuất hiện của Podman và systemd
- Podman là công cụ thay thế Docker và có chức năng chuyển container thành service systemd
- Có thể tự động tạo file service thông qua
podman generate systemd - Có thể tự động cập nhật image mỗi ngày một lần thông qua thẻ
io.containers.autoupdate - Tham khảo phương pháp này từ Fedora Magazine, tác giả đã thành công trong việc xây dựng một môi trường thay thế Kubernetes
Ba thành phần cần thiết
-
systemctl --user enable mycontainer.service- Thiết lập để container tự động chạy khi đăng nhập
-
loginctl enable-linger- Thiết lập để phiên người dùng được kích hoạt khi máy chủ khởi động
-
Tính năng auto-update của Podman
- Chỉ với ba thành phần này, tác giả có thể thay thế 99% chức năng mà Kubernetes cung cấp bằng một giải pháp đơn giản và nhẹ hơn
Kết quả di chuyển
- Tác giả đã di chuyển toàn bộ dịch vụ từ VPS cũ sang VPS mới
- Tài nguyên giảm còn một nửa nhưng hiệu năng lại tốt hơn, mật độ dịch vụ tăng lên và chi phí cũng giảm
Việc cần làm tiếp theo: Quadlet
- Đáng tiếc là tích hợp systemd của Podman sắp bị loại bỏ
- Thay vào đó, nó sẽ chuyển sang một cách định nghĩa mới là file Quadlet
- Bài viết kết lại bằng lưu ý rằng cần chuẩn bị để học công nghệ mới này
1 bình luận
Ý kiến trên Hacker News
Nếu chỉ xem Kubernetes như công cụ để chạy và cập nhật image container, thì đó có thể là dùng quá mức cần thiết
Đã từng thử vận hành vài website nhỏ bằng Docker, nhưng việc cập nhật image và kiểm thử khá khó khăn
rsyncthay đổi sang host triển khai rồi chạy script triển khaiKhông có vấn đề gì với việc quản lý cụm Kubernetes, nhưng với các dự án cá nhân thì khó dùng vì yêu cầu tài nguyên
docker compose, và dùng tính năng khám phá container của Traefik thay cho Ingresscrontabthay cho CronJobsSystemd giải quyết được nhiều vấn đề và không nên bị xem nhẹ
homed/homectlmở rộng quản lý người dùng,mountstự động mount ổ đĩa,bootđiều khiển khởi động/dừng dịch vụ,timersthay thế cronsystemctl editVận hành homelab bằng podman-systemd, và mỗi lần tìm hiểu một biến thể Kubernetes mới thì không có thêm phiền phức nào đáng kể
Dùng Quadlet để quản lý container bên trong systemd là bước tiếp theo
Đã tạo Skate để xây dựng một hệ thống hỗ trợ multi-host và manifest Kubernetes
Có thể dùng lệnh docker compose và Caddy để tự động lấy chứng chỉ
docker compose up -d --pull alwaysscpvàsshSystemd hiện cũng cung cấp ParticleOS, bản phân phối OS được hỗ trợ chính thức cho workflow bất biến
Cho rằng việc triển khai lên một máy chủ đơn không nên phức tạp, nên đã viết một công cụ tên là Harbormaster