Chuyển đến nội dung chính
  1. Bài viết/

Mở đầu: Câu chuyện về 2 cái Server, Port UDP và K3s

Hành trình xây dựng cụm K3s Hybrid Cloud từ một sự cố mạng dở khóc dở cười. Tài liệu hướng dẫn thực chiến K3s từ con số 0 dành cho những ai ‘vô tình’ có 2 cái server.

Khởi nguồn của một cụm Cluster bất đắc dĩ #

Mọi chuyện bắt đầu từ một sự cố có phần hơi… dở khóc dở cười.

Tôi có một dự án web cần deploy gấp. Thay vì lên mạng thuê VPS như bình thường, tôi nhắn tin cho một người anh trong ngành để hỏi xem có server nào đang trống không thì nhượng lại. Anh ấy quăng ngay thông tin một con server cho tôi, nhiệt tình, không chút do dự.

Nhưng đời không như mơ. Trong quá trình setup hạ tầng, tôi phát hiện ra con server này đang bị nhà mạng chặn hẳn inbound/outgoing kết nối UDP. Khổ nỗi, kiến trúc dự án của tôi lại bắt buộc phải sử dụng giao thức này. Dân hệ thống lâu năm thì hiểu: ISP thường mặc định khóa UDP để chặn các đợt khuếch đại DDoS. Không thể tự can thiệp từ phía hệ điều hành, anh bạn tôi đành phải tạo một ticket gửi thẳng cho bộ phận kỹ thuật của nhà cung cấp để yêu cầu mở port và đành ngồi chờ họ xử lý.

Đứng trước áp lực thời gian của dự án không thể chờ đợi thêm, tôi tặc lưỡi tự bỏ tiền túi ra mua luôn một con server mới tinh ở bên khác để chạy cho kịp tiến độ.

Sáng hôm sau, bộ phận kỹ thuật báo đã xử lý xong ticket. Tuy nhiên, họ chỉ có thể mở UDP cho dải IP trong nước, còn hướng bắn ra quốc tế vẫn bị chặn hoàn toàn. Nhưng điều khiến tôi tá hỏa hơn cả là lúc này tôi mới nhận ra một sự thật: Hóa ra cái con server bị lỗi port tối qua không phải là server cũ anh ấy có sẵn, mà là một con server mới tinh anh ấy vừa âm thầm bỏ tiền túi ra mua thêm để cho tôi thuê. Sự thật là anh ấy hoàn toàn không tính thêm bất kỳ chi phí nào và chỉ đơn thuần muốn giúp đỡ tôi cho kịp tiến độ dự án.

Sự nhiệt tình của người anh em cộng với cái “xui” dính policy mạng lúc đập hộp đã tạo ra một tình huống trớ trêu. Tất nhiên, tôi không thể từ chối tấm lòng đó, đành nhận luôn.

Và thế là, từ một kẻ đang vã mồ hôi tìm chỗ chứa một cái web app, tôi đột nhiên nắm trong tay 2 con server.

Để một server gánh hết phần việc trong khi một con máy cấu hình khủng nằm chơi là kiểu lãng phí tài nguyên không thể chấp nhận được. Trong đầu tôi lập tức nảy ra một kế hoạch: “Tại sao không nối hai cái máy này lại thành một cụm cluster, để chúng cùng gánh tải, chia sẻ tài nguyên và dự phòng cho nhau?”

Đó chính là khởi nguồn của chuỗi series này. Tôi tìm đến Kubernetes – tiêu chuẩn vàng của hệ thống phân tán. Nhưng ngay ngày đầu tiên triển khai, nó đã vả cho tôi một gáo nước lạnh vì quá nặng nề! Để chạy tầng control plane của hệ thống này, nó ngốn gần hết RAM và CPU của máy chủ, chẳng còn lại bao nhiêu không gian thực sự cho ứng dụng.

Giải pháp xuất hiện mang tên K3s – một phiên bản Kubernetes đã được vắt kiệt mỡ thừa, loại bỏ hàng triệu dòng code không cần thiết nhưng vẫn giữ nguyên vẹn sức mạnh cốt lõi của một hệ phân tán.

Đây là hành trình tôi bước từ thế giới của Docker sang thế giới của Kubernetes.

[!NOTE]

Dành cho những anh em tò mò về kiến trúc thực tế tôi đã dựng để giải quyết bài toán mạng oái oăm trên:

  • Vì port UDP bị chặn hướng đi quốc tế và ngay cả khi mở port outgoing thì lưu lượng cũng chỉ đi được trong nội địa. Điều này khiến kết nối VPN nội bộ rớt thảm hại và buộc hệ thống phải fallback về TCP. Do đó, tôi đã quyết định dùng Tailscale làm hạ tầng mạng lõi.
  • Để vượt rào và giảm độ trễ, tôi tự host luôn một DERP Server tĩnh ngay trên cụm K3s.
  • Sau khi mọi thứ đã thông suốt, tôi nối thẳng PC cá nhân ở nhà vào cluster này để gánh các tác vụ AI. Việc xài tạm GPU ở nhà giúp tôi tiết kiệm một khoản lớn chi phí đi thuê ngoài.

Đúng vậy, một cụm Hybrid Cloud kết hợp giữa VPS trên mây và phần cứng tại gia. Đây cũng là lần đầu tiên tôi thực sự bắt tay vào “nhào nặn” Kubernetes cho một dự án cá nhân. Do đó, chuỗi bài viết này không chỉ là nhật ký kiến trúc, mà còn là một bộ tài liệu hướng dẫn thực chiến K3s từ con số 0 dành cho những ai vô tình cố ý có 2 cái server.