Cài đặt Kubernetes nhẹ (K3s) trên VPS Linux: Giải pháp Orchestration tối ưu
Trong kỷ nguyên Cloud Native, việc chuyển đổi từ kiến trúc Monolithic hoặc Docker Compose đơn lẻ sang Container Orchestration là bước đi tất yếu. Tuy nhiên, với các Developer cá nhân hoặc doanh nghiệp SME sử dụng hạ tầng VPS giá rẻ tầm trung, việc cài đặt Kubernetes bản chuẩn (Mainline K8s) thường gặp nhiều trở ngại về tài nguyên. Nó khá nặng, phức tạp và thường xuyên chiếm dụng phần lớn RAM của hệ thống trước khi bạn kịp khởi chạy dịch vụ đầu tiên.
Bài viết này sẽ hướng dẫn cách cài đặt Kubernetes sử dụng K3s – một bản phân phối “nhỏ gọn” nhưng sở hữu sức mạnh vận hành tương đương bản chuẩn. Chúng ta sẽ không chỉ dừng lại ở việc cài đặt, mà còn đi sâu vào cấu hình mạng, lưu trữ và vận hành thực tế trên môi trường VPS Linux.
Tại sao K3s là giải pháp tối ưu cho VPS của bạn?
Trước khi đi vào dòng lệnh, chúng ta cần hiểu rõ bản chất kỹ thuật để đưa ra quyết định kiến trúc đúng đắn.
K3s là gì?
K3s là một bản phân phối Kubernetes được chứng nhận bởi CNCF (Cloud Native Computing Foundation), ban đầu do Rancher Labs phát triển. Nó không phải là một phiên bản “rút gọn tính năng”, mà là một phiên bản “tối ưu hóa cốt lõi” cho các môi trường Edge Computing và IoT.
Đội ngũ phát triển đã thực hiện các kỹ thuật sau để giảm dung lượng Binary xuống còn dưới 40MB:
- Loại bỏ mã nguồn cũ: Hàng triệu dòng code liên quan đến các driver lưu trữ (Storage Drivers) và Cloud Provider cũ không cần thiết đã bị lược bỏ.
- Hợp nhất tiến trình: Thay vì chạy nhiều tiến trình rời rạc, K3s đóng gói Server, Agent, Containerd, và Flannel vào một tiến trình duy nhất (Single Binary). Điều này giúp giảm đáng kể overhead của CPU và RAM.
- Thay thế etcd (Mặc định): K3s sử dụng SQLite làm backend lưu trữ mặc định, nhẹ hơn rất nhiều so với etcd nhưng vẫn đảm bảo hiệu năng cho các cụm (cluster) vừa và nhỏ.
Bảng so sánh kỹ thuật: K3s vs K8s (Kubeadm)
Dưới đây là bảng đối chiếu chi tiết để bạn thấy sự chênh lệch về tài nguyên:
| Đặc điểm | Kubernetes (Vanilla K8s) | K3s (Lightweight) |
| Dung lượng Binary | > 200 MB (Tổng các thành phần) | < 40 MB (1 file duy nhất) |
| Kiến trúc Runtime | Đa tiến trình (Multi-process) | Đơn tiến trình (Single-process) |
| Yêu cầu RAM Server | Khuyến nghị > 4 GB | Tối thiểu 2 GB (Khuyến nghị cho Production) |
| Yêu cầu RAM Agent | Khuyến nghị > 1 GB | Tối thiểu 512 MB |
| Cơ sở dữ liệu | etcd (Bắt buộc) | SQLite (Mặc định), hỗ trợ etcd, MySQL, MariaDB, PostgreSQL |
| Swap (Bộ nhớ ảo) | Bắt buộc TẮT | Hỗ trợ chạy khi BẬT Swap |
| Container Runtime | Phải tự cài (Xem thêm: Hướng dẫn cài đặt Docker trên VPS) | Tích hợp sẵn Containerd |
| Phù hợp cho | Doanh nghiệp lớn, Hạ tầng Cloud phức tạp, Team DevOps chuyên trách. | VPS cá nhân, Startup nhỏ, Edge Computing, IoT, Môi trường Dev/Test. |
Với bảng so sánh này, rõ ràng K3s là lựa chọn khả thi nhất nếu bạn muốn cài đặt Kubernetes trên các VPS giá rẻ (ví dụ: 2 vCPU, 2GB RAM). Nếu bạn là người mới, hãy tham khảo cách chọn VPS cho người mới bắt đầu để tìm cấu hình phù hợp nhất.
Chuẩn bị môi trường (Prerequisites)
Một hệ thống ổn định bắt đầu từ sự chuẩn bị kỹ lưỡng. Dù K3s khá linh hoạt, nhưng môi trường Production cần tuân thủ các quy tắc sau.
Cấu hình phần cứng tối ưu
Để đảm bảo hệ thống vận hành mượt mà:
- Server Node (Master): Nơi điều phối Cluster.
- CPU: 2 vCPU (Bạn có thể kiểm tra CPU VPS để xem mức độ chịu tải hiện tại).
- RAM: 2 GB trở lên.
- Disk: Nên sử dụng SSD vì hiệu năng của Database (SQLite/etcd) phụ thuộc lớn vào tốc độ I/O đĩa.
- Agent Node (Worker): Nơi chạy ứng dụng.
- CPU: 1 vCPU.
- RAM: 512 MB (Tối thiểu), 1 GB (Thoải mái).
Hệ điều hành & định danh
- OS: Ưu tiên Ubuntu 20.04/22.04/24.04 LTS hoặc các dòng RHEL/CentOS 7/8. Để thao tác tốt hơn, bạn nên nắm vững các lệnh Linux cơ bản.
- Hostname: Đây là yếu tố quan trọng. Mỗi Node trong cụm phải có hostname duy nhất.
- Lưu ý: Nếu bạn clone các VPS từ một snapshot, chúng thường bị trùng hostname. Hãy dùng lệnh
hostnamectl set-hostname <tên-mới>(tham khảo chi tiết cách thay đổi Hostname tại đây) để sửa lại, hoặc sử dụng cờ--with-node-idkhi cài đặt để K3s tự sinh ID ngẫu nhiên.
- Lưu ý: Nếu bạn clone các VPS từ một snapshot, chúng thường bị trùng hostname. Hãy dùng lệnh
Cấu hình Firewall (Quan trọng)
K3s yêu cầu mở một số port giao tiếp cụ thể. Nếu bạn dùng ufw hoặc firewalld, hãy chú ý mở các port sau. Bạn có thể xem bài viết so sánh iptables, nftables, firewalld và UFW để chọn công cụ phù hợp.
- TCP 6443: Kubernetes API Server (Cần mở cho tất cả các Node).
- UDP 8472: Flannel VXLAN (Cần mở để các Pod trên các Node khác nhau nhìn thấy nhau). Tuyệt đối không mở port này ra Public Internet, chỉ cho phép trong mạng nội bộ (Trusted Zone).
- TCP 10250: Kubelet Metrics.
- Trusted CIDR (Nếu dùng firewalld): Bạn nên thêm dải mạng của Pods (mặc định
10.42.0.0/16) và Services (mặc định10.43.0.0/16) vào vùng tin cậy (trusted zone) để traffic nội bộ không bị chặn. Nếu dùng Ubuntu, hãy xem hướng dẫn cấu hình UFW Ubuntu để thao tác chính xác.
Hướng dẫn cài đặt Kubernetes (K3s) chi tiết
Chúng ta sẽ đi qua quy trình cài đặt chuẩn cho mô hình Single-Node (Master kiêm Worker). Trước khi bắt đầu, hãy đảm bảo bạn đã có SSH Client để kết nối vào VPS.
Bước 1: Tinh chỉnh hệ thống trước cài đặt
Mặc dù K3s hỗ trợ chạy khi bật Swap, nhưng để tối ưu hiệu năng I/O, tôi vẫn khuyên bạn nên tắt Swap nếu VPS có trên 4GB RAM. Đừng quên thiết lập tự động update Ubuntu để hệ thống luôn được vá lỗi bảo mật mới nhất.
Cập nhật hệ thống:
sudo apt update && sudo apt upgrade -y
Bước 2: Thực thi script cài đặt tự động
Chúng ta sẽ sử dụng script cài đặt chính thức. Script này tự động phát hiện kiến trúc CPU, tạo systemd service và cài đặt các công cụ CLI cần thiết.
Chạy lệnh sau trên VPS:
curl -sfL https://get.k3s.io | sh -
Mẹo cấu hình nâng cao: Nếu bạn không muốn cài đặt Traefik (Ingress Controller mặc định) vì muốn tự cài Nginx Ingress sau này, hãy thêm biến môi trường vào lệnh cài đặt:
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik" sh -
Bước 3: Cấu hình quyền truy cập (Kubeconfig)
File cấu hình mặc định nằm tại /etc/rancher/k3s/k3s.yaml và chỉ root mới đọc được. Để thao tác thuận tiện hơn mà không cần sudo liên tục (hoặc vô hiệu hóa đăng nhập root để tăng bảo mật), bạn có thể phân quyền lại file này.
Cách 1: Copy ra thư mục user (Khuyên dùng):
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
export KUBECONFIG=~/.kube/config
Cách 2: Đổi quyền file gốc (Nhanh gọn cho môi trường test):
sudo chmod 644 /etc/rancher/k3s/k3s.yaml
Bước 4: Kiểm tra sức khỏe hệ thống
Xác minh việc cài đặt Kubernetes thành công:
kubectl get nodes
Kết quả mong đợi: Trạng thái Ready.
Kiểm tra các Pods hệ thống:
kubectl get pods -n kube-system
Kết quả mong đợi: Các Pod như coredns, local-path-provisioner, metrics-server đều ở trạng thái Running. Nếu gặp lỗi Pod không chạy, bạn có thể tham khảo cách sửa lỗi VPS bị treo hoặc tự reboot để chẩn đoán nguyên nhân.
Kiến trúc Cluster đa Node (Mở rộng)
Khả năng mở rộng là lý do chính khiến chúng ta chọn Kubernetes. K3s sử dụng cơ chế Token để xác thực các Node mới.
Lấy token từ Master
Trên Server Node, token được lưu tại vị trí sau:
sudo cat /var/lib/rancher/k3s/server/node-token
Hãy copy chuỗi ký tự này.
Gia nhập Worker Node
Trên VPS Worker mới, chạy lệnh cài đặt với tham số trỏ về Master:
curl -sfL https://get.k3s.io | K3S_URL=https://<MASTER_IP>:6443 K3S_TOKEN=<TOKEN_CUA_BAN> sh -
Ngay lập tức, K3s Agent sẽ thiết lập kết nối WebSocket tới Master và đăng ký Node.
Xử lý sự cố khi Rejoin: Nếu bạn xóa một Node và muốn thêm lại nó với cùng Hostname, đôi khi sẽ gặp lỗi xác thực. Điều này là do K3s lưu mật khẩu của Node cũ. Bạn cần xóa file /etc/rancher/node/password trên Agent và xóa Node cũ trên Master (kubectl delete node <tên-node>) trước khi chạy lại lệnh join.
Quản lý cấu hình & vận hành (Day-2 Operations)
Sau khi cài đặt, việc quản lý cấu hình tập trung là rất quan trọng để tối ưu hiệu năng VPS.
Sử dụng file config.yaml
Thay vì truyền hàng tá tham số vào dòng lệnh khi khởi động service, K3s hỗ trợ file cấu hình tại /etc/rancher/k3s/config.yaml.
Bạn có thể tạo file này để quản lý các thiết lập như disable traefik, đổi port, hay cấu hình database ngoài:
# Ví dụ nội dung file /etc/rancher/k3s/config.yaml
disable:
- traefik
node-label:
- "zone=asia"
Sau khi sửa, chỉ cần khởi động lại dịch vụ để áp dụng:
sudo systemctl restart k3s
Tùy chọn Database ngoài (External Datastore)
Mặc định K3s dùng SQLite. Tuy nhiên, nếu bạn muốn xây dựng cụm High Availability (HA) hoặc tách biệt tầng dữ liệu, K3s hỗ trợ kết nối trực tiếp tới:
- etcd (cho các cụm lớn).
- MySQL / MariaDB / PostgreSQL (Rất tiện lợi nếu bạn đã có sẵn hạ tầng DB SQL. Xem thêm: Cách cài đặt và cấu hình PostgreSQL trên Ubuntu).
Để kết nối, bạn chỉ cần thêm tham số --datastore-endpoint vào file config hoặc lệnh cài đặt.
Thực hành deploy ứng dụng
Hãy thử deploy một Web Server Nginx để kiểm chứng hệ thống Load Balancer tích hợp sẵn của K3s (Klipper LB). Bạn có thể tìm hiểu thêm về cách tối ưu Nginx cho WordPress nếu dự định chạy web tải cao.
Tạo Deployment:
kubectl create deployment nginx --image=nginx
Expose ra ngoài qua LoadBalancer:
kubectl expose deployment nginx --port=80 --type=LoadBalancer
Kiểm tra IP truy cập:
kubectl get svc
Nếu bạn thấy cột EXTERNAL-IP hiển thị IP của VPS, chúc mừng bạn! Bạn đã có một Cloud Private thu nhỏ ngay trên VPS của mình.
Mẹo tối ưu (Advanced Tips)
Dưới đây là những kinh nghiệm thực chiến giúp Cluster của bạn hoạt động bền bỉ và hiện đại hơn.
Sao lưu dữ liệu (Snapshot) là vô cùng quan trọng
Đừng đợi đến khi VPS bị lỗi ổ cứng mới lo backup. Bạn nên tham khảo 3 cách backup VPS phổ biến để có chiến lược an toàn. K3s tích hợp sẵn tính năng snapshot cho dữ liệu của cụm (etcd/SQLite).
- Snapshot thủ công:
k3s etcd-snapshot saveFile backup sẽ nằm tại:
/var/lib/rancher/k3s/server/db/snapshots/. Hãy tải file này về máy cá nhân hoặc đẩy lên Cloud Storage (S3) định kỳ. - Snapshot tự động: Mặc định K3s đã bật sẵn snapshot mỗi 12 giờ và giữ lại 5 bản gần nhất. Bạn có thể yên tâm hơn khi biết điều này.
Tiết kiệm chi phí với IPv6 (Dual-stack)
Đến năm 2026, giá thuê địa chỉ IPv4 tĩnh ngày càng cao. Nhiều nhà cung cấp VPS cung cấp IPv6 miễn phí. K3s hỗ trợ chạy song song IPv4/IPv6 (Dual-stack) rất tốt. Khi cài đặt, bạn có thể thêm cờ --cluster-cidr và --service-cidr bao gồm cả dải IPv6 để đón đầu xu hướng, giúp các Service của bạn có thể truy cập trực tiếp từ Internet qua IPv6 mà không cần NAT.
Nếu bạn đang dùng Proxy để ẩn danh hoặc test mạng, có thể tham khảo cách tạo Proxy IPv4 trên VPS Linux.
Xử lý giới hạn Docker Hub (Rate Limit)
Một vấn đề thường gặp khi chạy Kubernetes trên VPS dùng chung IP: Bạn bị Docker Hub chặn kéo Image do vượt quá giới hạn request. Thay vì đăng nhập thủ công trên từng Node, hãy cấu hình registries.yaml tại /etc/rancher/k3s/registries.yaml để sử dụng các Mirror (như Google Mirror hoặc Registry riêng):
mirrors:
"docker.io":
endpoint:
- "https://mirror.gcr.io"
Sau đó restart K3s. Điều này giúp tốc độ tải Image nhanh hơn và không bị chặn.
Nâng cấp K3s không gián đoạn (Zero Downtime)
Đừng ngại nâng cấp. K3s được thiết kế để nâng cấp bằng chính script cài đặt ban đầu. Khi có phiên bản mới, bạn chỉ cần chạy lại đúng lệnh cài đặt cũ (ví dụ: curl -sfL https://get.k3s.io | sh -). Script sẽ phát hiện binary mới, dừng service trong tích tắc, thay thế binary và khởi động lại mà không làm gián đoạn các Pod đang chạy. Đây là tính năng nổi bật giúp đảm bảo Uptime cao.
Trong quá trình vận hành lâu dài, nếu ổ cứng bị đầy, hãy dùng 7 lệnh Linux xử lý nhanh lỗi VPS đầy ổ cứng để dọn dẹp log và file rác.
Gateway API – Tương lai thay thế Ingress
Dù Ingress (Traefik) vẫn phổ biến, nhưng chuẩn Gateway API đang dần trở thành tiêu chuẩn mới trong năm 2026 để quản lý traffic phức tạp hơn. Nếu bạn là người thích công nghệ mới, hãy tìm hiểu về việc tích hợp Gateway API vào K3s để thay thế dần cho Ingress Controller truyền thống.
Khắc phục sự cố (Troubleshooting) & bảo mật
Vận hành VPS luôn tiềm ẩn rủi ro. Dưới đây là các vấn đề thường gặp:
Lỗi “CrashLoopBackOff” hoặc “ImagePullBackOff”
- ImagePullBackOff: VPS không kéo được Docker Image. Kiểm tra kết nối Internet hoặc Docker Hub có bị chặn không.
- CrashLoopBackOff: Ứng dụng khởi chạy rồi tắt ngay. Dùng lệnh
kubectl logs <tên-pod>để xem nguyên nhân (thường do thiếu biến môi trường hoặc lỗi code).
Lỗi Certificate (x509)
Nếu bạn để VPS tắt quá lâu hoặc đổi IP, chứng chỉ bảo mật của Cluster có thể bị lỗi.
- Khắc phục: Restart lại service K3s để nó tự tái tạo chứng chỉ:
systemctl restart k3s.
Gỡ cài đặt (Uninstall)
Nếu bạn muốn làm lại từ đầu (Reset sạch sẽ), K3s cung cấp script gỡ bỏ rất tiện lợi, xóa sạch cả các file rác.
Trên Server Node:
/usr/local/bin/k3s-uninstall.sh
Trên Agent Node:
/usr/local/bin/k3s-agent-uninstall.sh
Câu hỏi thường gặp (FAQ)
1. K3s có thể chạy trên VPS Windows không?
Không, K3s là ứng dụng native của Linux. Tuy nhiên, bạn có thể chạy nó trên nền tảng WSL2 (Windows Subsystem for Linux). Nếu bạn đang sở hữu VPS Windows, bạn nên cài đặt Docker Desktop hoặc sử dụng máy ảo Hyper-V bên trong.
2. Tôi có thể dùng K3s cho môi trường Production không?
Hoàn toàn được. K3s đã được chứng nhận CNCF Certified Kubernetes. Nó đủ bền bỉ để chạy Production, đặc biệt phù hợp cho các hệ thống Edge Computing hoặc các Cluster quy mô vừa và nhỏ.
3. Làm thế nào để truy cập Dashboard quản lý?
K3s mặc định chỉ cung cấp giao diện dòng lệnh (CLI). Để có giao diện web, bạn cần cài thêm Kubernetes Dashboard, Portainer hoặc sử dụng Rancher. Bạn có thể xem hướng dẫn cài đặt Portainer trong các bài viết về giám sát VPS Linux.
4. VPS 1GB RAM có chạy được K3s không?
Có, nhưng chỉ phù hợp cho Agent Node (Worker). Server Node (Master) nên có tối thiểu 2GB RAM để đảm bảo độ ổn định khi thực hiện các tác vụ quản trị.
5. Sự khác biệt giữa K3s, MicroK8s và Minikube là gì?
- Minikube: Chủ yếu dùng để học tập, chạy trên máy cá nhân, tạo máy ảo khá nặng nề.
- MicroK8s: Của Canonical (Ubuntu), chất lượng tốt nhưng cơ chế Snap đôi khi gây khó khăn trong tùy biến.
- K3s: Nhẹ nhất, đóng gói dạng binary đơn giản, khởi động cực nhanh, tối ưu nhất cho VPS cấu hình thấp.
Kết luận
Việc cài đặt Kubernetes trên VPS Linux chưa bao giờ đơn giản và nhẹ nhàng đến thế nhờ K3s. Với dung lượng chỉ khoảng 40MB và khả năng quản lý tài nguyên thông minh, K3s đã phá bỏ rào cản phần cứng, giúp mọi Developer đều có thể tiếp cận công nghệ Container Orchestration chuẩn công nghiệp.
Hệ thống này không chỉ phù hợp cho môi trường Lab, học tập mà hoàn toàn đủ sức mạnh để chạy các ứng dụng Production tại Edge hoặc các dự án Startup giai đoạn đầu. Để an tâm hơn trong quá trình sử dụng, đừng quên trang bị kiến thức về bảo mật VPS Linux từ A-Z.
Chúc các bạn triển khai thành công và có một hạ tầng vững chắc cho năm mới!







