Hướng Dẫn Cài K3s Trên VPS Ubuntu Cực Nhẹ Từ A-Z Cho Newbie
Cách cài K3s trên VPS Ubuntu luôn là bài toán đau đầu cho người muốn chạy Kubernetes nhưng chỉ có tài nguyên khiêm tốn, vì bản Kubernetes gốc quá nặng, đòi hỏi RAM lớn và chi phí thuê máy chủ đội lên từng ngày. K3s sinh ra để giải quyết đúng nỗi đau này: một […]
Cách cài K3s trên VPS Ubuntu luôn là bài toán đau đầu cho người muốn chạy Kubernetes nhưng chỉ có tài nguyên khiêm tốn, vì bản Kubernetes gốc quá nặng, đòi hỏi RAM lớn và chi phí thuê máy chủ đội lên từng ngày. K3s sinh ra để giải quyết đúng nỗi đau này: một bản phân phối Kubernetes siêu nhẹ, gói gọn trong một file binary dưới 40MB mà vẫn đủ sức vận hành cluster thật. Bài viết dưới đây sẽ dẫn bạn đi từ khâu chuẩn bị môi trường, cài đặt từng bước lệnh, cho đến mẹo tối ưu khi triển khai trên các gói ThueVPSGiaRe.vn.
1. K3s là gì và tại sao nên lựa chọn thay vì Kubernetes gốc?
K3s là phiên bản phân phối Kubernetes siêu nhẹ được chứng nhận bởi CNCF (Cloud Native Computing Foundation), được thiết kế nguyên bản bởi Rancher Labs nhằm phục vụ môi trường Edge, IoT và các máy chủ có tài nguyên giới hạn. Thay vì lược bỏ các API thiết yếu, K3s tinh giản triệt để mã nguồn thừa nhằm mang lại hiệu năng cao nhất trên phần cứng nhỏ gọn.

Để đưa kích thước tệp thực thi (binary) xuống dưới 40MB, đội ngũ kỹ thuật của dự án đã ứng dụng các cải tiến kiến trúc mang tính đột phá:
- Lược bỏ driver di sản và Cloud Provider ngoài: Gỡ bỏ toàn bộ các khối lệnh cũ không dùng đến, chỉ giữ lại giao diện CSI và CNI tiêu chuẩn, giúp hệ thống vận hành tinh gọn.
- Hợp nhất thành một tệp thực thi duy nhất: Gói gọn toàn bộ API Server, Scheduler, Controller Manager, Containerd, Flannel và Kubelet vào một tiến trình đơn, giảm đáng kể độ trễ giao tiếp bộ nhớ và overhead CPU.
- Thay thế etcd bằng SQLite theo mặc định: Tránh được việc tiêu hao tài nguyên đĩa và bộ nhớ lớn từ etcd đối với các cụm đơn máy chủ hoặc cụm quy mô vừa.
| Tiêu chí so sánh | Kubernetes thuần (K8s / Kubeadm) | K3s (Lightweight Distribution) |
|---|---|---|
| Dung lượng binary | > 200MB (tách biệt từng thành phần) | < 40MB (một file binary duy nhất) |
| Mô hình tiến trình | Đa tiến trình độc lập (Multi-process) | Đơn tiến trình hợp nhất (Single-process) |
| Yêu cầu RAM Server (Master) | Tối thiểu 4GB RAM trở lên | Khoảng 2GB RAM cho Production |
| Yêu cầu RAM Agent (Worker) | Khuyến nghị từ 1GB – 2GB RAM | Tối thiểu chỉ từ 512MB RAM |
| Cơ sở dữ liệu lưu trạng thái | Bắt buộc sử dụng etcd | Mặc định SQLite; hỗ trợ MySQL, PostgreSQL, etcd |
| Chính sách bộ nhớ ảo Swap | Bắt buộc phải tắt Swap hoàn toàn | Có thể vận hành bình thường khi bật Swap |
| Container Runtime đi kèm | Người dùng tự thiết lập bên ngoài | Nhúng sẵn containerd tối ưu hóa |
| Đối tượng mục tiêu | Tập đoàn lớn, hạ tầng đa đám mây phức tạp | VPS cá nhân, startup nhỏ, dev/test, edge nodes |
Nhờ những tối ưu này, nếu bạn muốn nắm bắt kiến trúc điều phối Kubernetes mà không phải bỏ ra chi phí duy trì phần cứng đắt đỏ, K3s chính là lời giải hoàn hảo nhất trên nền tảng VPS cá nhân.
2. Yêu cầu chuẩn bị môi trường VPS Ubuntu trước khi cài đặt K3s
Trước khi bắt tay vào cấu hình dịch vụ, việc chuẩn bị một nền tảng máy chủ đạt tiêu chuẩn kỹ thuật sẽ giúp hạn chế tối đa các lỗi khó gỡ về mạng hay giới hạn dung lượng trong quá trình cluster vận hành.

2.1. Cấu hình phần cứng tối thiểu và khuyến nghị
Tùy theo vai trò của từng máy chủ trong mô hình triển khai, bạn cần lưu ý định mức tài nguyên như sau:
- Server Node (Master Node): Đảm nhận quản lý trạng thái cụm. Khuyến nghị tối thiểu 2 vCPU và 2GB RAM. Ổ cứng nên sử dụng loại SSD hoặc NVMe do các thao tác ghi dữ liệu của SQLite/etcd đòi hỏi tốc độ I/O cao.
- Agent Node (Worker Node): Đảm nhận khởi chạy các Pod container ứng dụng. Cần tối thiểu 1 vCPU và 512MB RAM (mức 1GB RAM giúp máy chạy ổn định hơn nhiều khi có tải).
2.2. Hệ điều hành và quy tắc đặt tên máy chủ (Hostname)
Bạn nên ưu tiên sử dụng các bản phân phối Ubuntu LTS như Ubuntu 20.04, Ubuntu 22.04 hoặc phiên bản mới Ubuntu 24.04 LTS. Việc thao tác trực tiếp trên giao diện dòng lệnh sẽ rất nhanh chóng nếu bạn đã nắm chắc các lệnh Linux căn bản.
Lưu ý quan trọng về Hostname: Toàn bộ các node trong cùng một cluster K3s bắt buộc phải mang Hostname riêng biệt. Nếu bạn nhân bản (clone) VPS từ bản sao lưu trước đó, các máy con rất dễ bị trùng tên khiến K3s từ chối nhận diện worker. Bạn hãy áp dụng cách thay đổi hostname trên Ubuntu bằng lệnh hostnamectl set-hostname <ten-node-moi> hoặc chỉ định thêm cờ --with-node-id khi cài đặt để hệ thống tự phát sinh định danh duy nhất.
2.3. Quy tắc mở cổng tường lửa (Firewall)
Để các thành phần trong cụm K3s có thể trao đổi dữ liệu với nhau mà không gặp lỗi nghẽn cổng, bạn cần cấu hình mở các cổng kết nối chính xác khi thiết lập tường lửa UFW trên Ubuntu:
- Cổng TCP 6443: K3s API Server. Bắt buộc mở để các node worker liên lạc với master và máy trạm quản trị từ xa thông qua kubectl.
- Cổng UDP 8472: Giao thức Flannel VXLAN dùng cho mạng overlay giữa các Pod. Cảnh báo an toàn: Tuyệt đối chỉ mở cổng này trong mạng nội bộ giữa các node, không mở rộng ra toàn mạng Internet công cộng.
- Cổng TCP 10250: Kubelet Metrics, thu thập chỉ số hiệu năng cụm.
- Dải IP nội bộ Pod và Service: Dải mạng mặc định của Pod là
10.42.0.0/16và Service là10.43.0.0/16. Hãy cấu hình tường lửa đưa hai dải mạng này vào vùng đáng tin cậy (trusted zone) để lưu lượng nội bộ không bị chặn nhầm.
3. Quy trình từng bước cài đặt K3s trên máy chủ Ubuntu
Sau khi hoàn tất chuẩn bị hạ tầng mạng và đăng nhập vào máy chủ qua SSH với tài khoản quản trị có quyền sudo, chúng ta sẽ bắt đầu thiết lập cụm K3s Single-Node.
Bước 1: Cập nhật gói phần mềm hệ sinh thái
Đảm bảo các gói cơ bản của hệ điều hành được cập nhật bản vá ổn định nhất:
sudo apt update && sudo apt upgrade -y
Gợi ý hiệu năng: Mặc dù K3s chấp nhận chạy chung với Swap, nhưng nếu VPS của bạn có dung lượng RAM dồi dào (từ 4GB trở lên), việc tắt Swap sẽ giúp giảm thiểu rủi ro nghẽn I/O khi ổ đĩa phải hoán đổi dữ liệu bộ nhớ liên tục.

Bước 2: Chạy lệnh cài đặt tự động bằng Official Script
Dự án K3s cung cấp sẵn bộ script tự động nhận diện cấu trúc CPU của máy chủ, khởi tạo systemd service và thiết lập sẵn môi trường containerd. Bạn chỉ cần thực thi lệnh sau:
curl -sfL https://get.k3s.io | sh -
Tùy biến Ingress Controller: Theo mặc định, K3s tự động kích hoạt Traefik làm Ingress mặc định. Nếu bạn có ý định tự cấu hình Nginx Ingress Controller hoặc tự quản lý hạ tầng web riêng giống như khi cài đặt Docker trên môi trường Ubuntu, hãy vô hiệu hóa Traefik bằng tùy chọn sau:
curl -sfL https://get.k3s.io | INSTALL_K3S_EXEC="--disable=traefik" sh -

Bước 3: Phân quyền truy cập tệp Kubeconfig
Tệp chứng thực quyền quản trị được lưu tại /etc/rancher/k3s/k3s.yaml và chỉ cho phép user root đọc. Nhằm mục đích thao tác thuận tiện bằng tài khoản thường mà không phải gõ tiền tố sudo liên tục, bạn hãy chuyển cấu hình về thư mục home của user:
mkdir -p ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $(id -u):$(id -g) ~/.kube/config
export KUBECONFIG=~/.kube/config
Nếu chỉ đang dựng môi trường test nhanh, bạn cũng có thể mở quyền đọc trực tiếp trên file gốc bằng lệnh: sudo chmod 644 /etc/rancher/k3s/k3s.yaml.
Bước 4: Kiểm tra trạng thái hoạt động của cụm
Thực hiện xác thực xem node chủ đã sẵn sàng tiếp nhận điều phối hay chưa:
kubectl get nodes
Trạng thái node cần hiển thị là Ready. Kế tiếp, hãy kiểm tra danh sách các tiến trình dịch vụ lõi:
kubectl get pods -n kube-system
Toàn bộ các Pod nền tảng như coredns, local-path-provisioner, và metrics-server phải ở trạng thái Running để đảm bảo hệ thống vận hành trơn tru.

4. Thiết lập mở rộng cụm Multi-Node (Server & Worker)
Một trong những ưu điểm sáng giá nhất của Kubernetes là tính năng kết nối nhiều máy chủ thành một thể thống nhất. Trong K3s, cơ chế xác thực gia nhập node mới được bảo vệ bằng Token chia sẻ an toàn.
4.1. Lấy mã Token xác thực trên Server Node
Trên máy chủ Server (Master), bạn chạy lệnh kiểm tra chuỗi token được tự động khởi tạo:
sudo cat /var/lib/rancher/k3s/server/node-token
Hãy sao chép chuỗi mã hóa kết quả để chuẩn bị kết nối từ các máy chủ Worker.

4.2. Khởi tạo Agent trên Worker Node để gia nhập cụm
Đăng nhập vào VPS thứ hai (đóng vai trò Agent Node) và chạy script kết nối trỏ trực tiếp về IP của Master Node:
curl -sfL https://get.k3s.io | K3S_URL=https://<IP_MASTER_NODE>:6443 K3S_TOKEN=<CHUOI_TOKEN_CUA_BAN> sh -
Sau khi dòng lệnh hoàn tất, K3s Agent sẽ tự động tạo kết nối kênh WebSocket mã hóa tới Master Node và đăng ký tài nguyên vào cluster.
Kinh nghiệm xử lý lỗi Rejoin Node: Khi bạn loại bỏ một Node cũ và muốn kết nối lại bằng chính Hostname đó, K3s có thể báo lỗi từ chối do mật khẩu lưu trữ trước đó không khớp. Để khắc phục, bạn cần xóa tệp /etc/rancher/node/password trên Worker Node, đồng thời chạy lệnh dọn dẹp node trên Master: kubectl delete node <ten-node> rồi mới tiến hành chạy lại lệnh join.
5. Quản lý cấu hình tập trung và kết nối Database ngoài
Thay vì nhồi nhét quá nhiều tham số khởi động vào systemd service, K3s hỗ trợ việc định nghĩa hạ tầng thông qua tệp cấu hình tập trung vô cùng chuyên nghiệp.
5.1. Tối ưu thông số qua tệp config.yaml
Bạn có thể tạo hoặc tùy chỉnh tệp cấu hình tại đường dẫn /etc/rancher/k3s/config.yaml trên Server Node để kiểm soát các cờ tham số:
# Ví dụ cấu hình tại /etc/rancher/k3s/config.yaml
disable:
- traefik
node-label:
- "region=vietnam"
- "env=production"
Mỗi khi thay đổi nội dung file, chỉ cần áp dụng lại bằng lệnh khởi động dịch vụ: sudo systemctl restart k3s.
5.2. Sử dụng External Datastore cho mô hình High Availability
Khi hệ thống mở rộng và đòi hỏi tính sẵn sàng cao (HA), bạn có thể chuyển đổi backend từ SQLite mặc định sang các cơ sở dữ liệu quan hệ mạnh mẽ hoặc cụm etcd độc lập. K3s hỗ trợ kết nối trực tiếp với MySQL, MariaDB hoặc PostgreSQL thông qua cờ --datastore-endpoint.
Nếu bạn đã có sẵn hạ tầng DB dựa trên hướng dẫn cài đặt cơ sở dữ liệu PostgreSQL, bạn chỉ việc cung cấp connection string trong tệp cấu hình để K3s quản lý trạng thái phân tán một cách hoàn hảo.
6. Thực hành triển khai ứng dụng Nginx với Load Balancer tích hợp
K3s được tích hợp sẵn Klipper LB, một bộ cân bằng tải dịch vụ cực nhẹ giúp chuyển tiếp lưu lượng từ cổng máy chủ vật lý vào mạng dịch vụ bên trong cluster mà không đòi hỏi nhà cung cấp Cloud phải hỗ trợ dịch vụ LB ngoài.
Hãy tiến hành triển khai thử một ứng dụng web server Nginx:
kubectl create deployment nginx-demo --image=nginx
Kế tiếp, xuất bản deployment này ra ngoài Internet thông qua cơ chế LoadBalancer:
kubectl expose deployment nginx-demo --port=80 --type=LoadBalancer
Kiểm tra kết quả tiếp nhận IP ngoại vi:
kubectl get svc nginx-demo
Khi cột EXTERNAL-IP hiển thị chính địa chỉ IP Public của VPS, bạn có thể mở trình duyệt và truy cập trực tiếp qua cổng 80 để xem trang chào mừng chuẩn của Nginx.
7. Các kỹ thuật tối ưu hóa và kinh nghiệm vận hành nâng cao
Để duy trì cluster hoạt động ổn định dài lâu mà không gặp sự cố quá tải, bạn nên áp dụng các mẹo vận hành thực chiến sau đây:
- Chiến lược Snapshot và Backup định kỳ: Bên cạnh việc sao lưu dữ liệu VPS định kỳ ở tầng máy chủ, K3s cho phép tạo bản chụp trạng thái tức thì bằng lệnh
k3s etcd-snapshot save. Mặc định K3s tự sao lưu mỗi 12 tiếng một lần và lưu 5 bản chụp gần nhất tại thư mục/var/lib/rancher/k3s/server/db/snapshots/. - Cấu hình mạng Dual-stack (IPv4 & IPv6): Nhằm đón đầu xu thế và tận dụng tối đa tài nguyên IP tĩnh giá tốt, bạn có thể khai báo thêm dải mạng IPv6 cho cả Pod CIDR và Service CIDR trong file cấu hình K3s, giúp các microservices giao tiếp trực tiếp ra ngoài Internet mà không cần kỹ thuật NAT phức tạp.
- Thiết lập Registry Mirror tránh Rate Limit: Khi kéo image quá nhiều lần từ Docker Hub trên một địa chỉ IP dùng chung, bạn có thể bị giới hạn lượt tải. Hãy tạo tệp
/etc/rancher/k3s/registries.yamlvà chỉ định các mirror nội bộ hoặc Google Mirror (https://mirror.gcr.io) để tăng tốc độ tải container. - Nâng cấp phiên bản Zero-Downtime: K3s hỗ trợ nâng cấp phiên bản mới chỉ bằng việc chạy lại chính script cài đặt gốc. Quá trình này sẽ nạp binary mới và khởi động lại dịch vụ K3s trong tích tắc mà hoàn toàn không ngắt quãng hoạt động của các Pod đang chạy.
- Đón đầu xu hướng Gateway API: Chuẩn Gateway API đang dần hoàn thiện nhằm thay thế mô hình Ingress Controller truyền thống, hỗ trợ định tuyến lưu lượng phức tạp hơn giữa các ứng dụng hiện đại.
8. Hướng dẫn xử lý sự cố phổ biến và cách gỡ cài đặt K3s sạch sẽ
Trong môi trường production, bạn có thể đối mặt với một số lỗi hệ thống điển hình. Sau đây là phương án xử lý nhanh nhất:
8.1. Khắc phục trạng thái ImagePullBackOff và CrashLoopBackOff
Nếu Pod rơi vào lỗi ImagePullBackOff, nguyên nhân chủ yếu do đường truyền mạng bị gián đoạn, sai tên image hoặc bị hạn chế request từ kho lưu trữ. Trường hợp gặp lỗi CrashLoopBackOff, ứng dụng đã được khởi động nhưng lập tức thoát đột ngột; bạn hãy dùng lệnh kubectl logs <ten-pod> hoặc kubectl describe pod <ten-pod> để kiểm tra mã lỗi và các biến môi trường cấu hình bị thiếu.
8.2. Sự cố chứng chỉ bảo mật x509
Nếu VPS bị tạm ngắt trong thời gian dài hoặc máy chủ thay đổi địa chỉ IP Public đột ngột, các chứng chỉ nội bộ x509 có thể bị sai lệch ngày hiệu lực. Giải pháp đơn giản nhất là khởi động lại dịch vụ hệ thống bằng lệnh sudo systemctl restart k3s để tiến trình tự động gia hạn và tái cấp phát chứng chỉ mới tương thích.
8.3. Gỡ cài đặt K3s hoàn toàn khỏi hệ thống
Nếu cần đặt lại môi trường hoặc xóa sạch K3s để cài đặt lại từ đầu, K3s cung cấp sẵn bộ script gỡ bỏ toàn diện mà không để lại tệp rác trong hệ thống:
Thực hiện trên Server Node:
/usr/local/bin/k3s-uninstall.sh
Thực hiện trên Agent Worker Node:
/usr/local/bin/k3s-agent-uninstall.sh
Tối ưu hóa hành trình làm chủ Kubernetes của bạn
Nắm vững cách cài K3s trên VPS Ubuntu mang lại cho bạn khả năng kiểm soát tuyệt đối hạ tầng microservices của mình với chi phí tài nguyên thấp kỷ lục. Việc hiểu rõ cơ chế thu gọn binary, cấu hình cổng mạng chính xác và thiết lập hệ thống lưu trữ phân tán sẽ giúp bạn tự tin vận hành các dự án cá nhân hay môi trường thử nghiệm chuyên nghiệp. Đừng ngần ngại khởi tạo ngay một máy chủ ảo tiêu chuẩn để thực hành và cảm nhận sự linh hoạt vượt trội mà K3s mang lại.
Cần một VPS giá rẻ để bắt đầu?
Chọn cấu hình vừa đủ nhu cầu, ưu tiên chi phí dễ tiếp cận và khả năng quản trị riêng.
Lưu ý kỹ thuật: Toàn bộ nội dung hướng dẫn trên mang tính chất tham khảo thực tế. Cú pháp dòng lệnh, cổng dịch vụ và các tham số môi trường có thể có sự khác biệt nhỏ tùy thuộc vào phiên bản Ubuntu, bản cập nhật K3s mới nhất hoặc thiết lập mạng cụ thể của nhà cung cấp hạ tầng. Quản trị viên nên chủ động kiểm thử trong môi trường dev và thực hiện sao lưu toàn vẹn dữ liệu trước khi đưa vào vận hành thực tế.



