Kubernetes trên VPS: Xây dựng K3s Cluster với Budget dưới 50 USD/tháng
Giới thiệu
Kubernetes đã trở thành tiêu chuẩn de facto cho container orchestration, nhưng chi phí triển khai trên các nền tảng cloud managed như EKS, GKE hay AKS thường khá cao, đặc biệt đối với các dự án nhỏ hoặc startup. May mắn thay, K3s - phiên bản Kubernetes nhẹ từ Rancher Labs - cho phép chúng ta xây dựng một production-ready cluster trên VPS với chi phí dưới 50 USD/tháng.
Trong bài viết này, tôi sẽ hướng dẫn chi tiết cách thiết lập một K3s cluster hoàn chỉnh, từ lựa chọn VPS provider, cấu hình hệ thống, đến các best practices để đảm bảo cluster vận hành ổn định và bảo mật.
Tại sao chọn K3s thay vì Kubernetes đầy đủ?
K3s là một bản phân phối Kubernetes được thiết kế cho các môi trường có tài nguyên hạn chế. Dưới đây là những lý do khiến K3s trở thành lựa chọn lý tưởng cho VPS:
- Footprint nhỏ gọn: K3s chỉ cần khoảng 512MB RAM để chạy, so với 2-4GB của Kubernetes tiêu chuẩn
- Binary đơn giản: Toàn bộ K3s được đóng gói trong một binary dưới 100MB, dễ dàng cài đặt và quản lý
- Tương thích 100% với Kubernetes: K3s là Kubernetes được chứng nhận, hỗ trợ đầy đủ Kubernetes API
- Tích hợp sẵn: Đi kèm với Traefik ingress controller, local storage provider và embedded SQLite database
- Tối ưu cho edge và IoT: Thiết kế cho ARM64 và ARMv7, phù hợp với nhiều loại phần cứng
Lựa chọn VPS Provider và cấu hình phù hợp
Để xây dựng một cluster ổn định với budget 50 USD/tháng, tôi khuyến nghị cấu hình sau:
Kiến trúc cluster đề xuất
- 1 Control Plane Node: 2 vCPU, 4GB RAM, 40GB SSD (~20-25 USD/tháng)
- 2 Worker Nodes: 1 vCPU, 2GB RAM, 20GB SSD mỗi node (~10-12 USD/tháng mỗi node)
Tổng chi phí: 40-49 USD/tháng
VPS Providers được khuyến nghị
- DigitalOcean: Giao diện thân thiện, network ổn định, datacenter tại Singapore
- Linode (Akamai): Giá cạnh tranh, performance tốt, hỗ trợ 24/7
- Vultr: Nhiều lựa chọn datacenter, giá linh hoạt
- Hetzner: Giá rẻ nhất nhưng datacenter chủ yếu ở châu Âu
Lưu ý: Chọn datacenter gần với người dùng cuối để giảm latency. Đối với thị trường Việt Nam, Singapore hoặc Tokyo là lựa chọn tối ưu.
Cài đặt K3s Cluster từng bước
Bước 1: Chuẩn bị môi trường
Trên tất cả các nodes, thực hiện các bước sau:
Cập nhật hệ thống:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wgetTắt swap (bắt buộc cho Kubernetes):
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstabCấu hình firewall: Mở các ports cần thiết cho K3s communication.
Bước 2: Cài đặt Control Plane Node
Trên node control plane, chạy lệnh sau để cài đặt K3s:
curl -sfL https://get.k3s.io | sh -s - server \
--write-kubeconfig-mode 644 \
--disable traefik \
--node-taint CriticalAddonsOnly=true:NoExecuteGiải thích các flags:
--write-kubeconfig-mode 644: Cho phép đọc kubeconfig không cần sudo--disable traefik: Tắt Traefik mặc định nếu bạn muốn dùng ingress controller khác--node-taint: Ngăn pods thường chạy trên control plane
Sau khi cài đặt, lấy node token để join worker nodes:
sudo cat /var/lib/rancher/k3s/server/node-tokenBước 3: Join Worker Nodes
Trên mỗi worker node, chạy lệnh sau (thay thế CONTROL_PLANE_IP và NODE_TOKEN):
curl -sfL https://get.k3s.io | K3S_URL=https://CONTROL_PLANE_IP:6443 \
K3S_TOKEN=NODE_TOKEN sh -Kiểm tra cluster status từ control plane:
kubectl get nodesCấu hình bảo mật và tối ưu hóa
1. Thiết lập Network Policies
K3s sử dụng Flannel CNI mặc định. Cài đặt Calico để có network policy support:
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml2. Cấu hình Resource Limits
Luôn đặt resource requests và limits cho pods để tránh resource starvation:
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"3. Thiết lập Persistent Storage
K3s đi kèm với local-path provisioner. Để có storage class tốt hơn, cài đặt Longhorn:
kubectl apply -f https://raw.githubusercontent.com/longhorn/longhorn/master/deploy/longhorn.yaml4. Monitoring và Logging
Triển khai stack monitoring nhẹ với kube-prometheus-stack hoặc VictoriaMetrics để theo dõi cluster health. Đối với logging, sử dụng Loki thay vì ELK stack để tiết kiệm tài nguyên.
Best Practices cho Production
Backup và Disaster Recovery
K3s tự động backup etcd mỗi 12 giờ vào /var/lib/rancher/k3s/server/db/snapshots/. Thiết lập cronjob để sync backups ra external storage:
- Sử dụng Velero cho cluster-level backups
- Backup kubeconfig và certificates định kỳ
- Test restore procedure ít nhất mỗi tháng một lần
High Availability (Optional)
Nếu budget cho phép, nâng cấp lên HA cluster với 3 control plane nodes và external database (PostgreSQL hoặc MySQL) thay vì embedded SQLite.
Security Hardening
- Cập nhật thường xuyên: K3s release patches bảo mật định kỳ
- RBAC: Cấu hình Role-Based Access Control chặt chẽ
- Pod Security Standards: Enforce restricted pod security standards
- Network segmentation: Sử dụng NetworkPolicies để isolate workloads
- Secrets management: Cân nhắc sử dụng Sealed Secrets hoặc External Secrets Operator
Chi phí vận hành thực tế
Sau 6 tháng vận hành K3s cluster trên VPS, đây là breakdown chi phí của tôi:
- VPS hosting: 45 USD/tháng (3 nodes)
- Domain và SSL: 2 USD/tháng (Let's Encrypt miễn phí, chỉ tính domain)
- Backup storage: 1-2 USD/tháng (S3-compatible storage)
- Monitoring (optional): 0 USD (self-hosted)
Tổng: ~48 USD/tháng
So với AWS EKS (~73 USD chỉ cho control plane) hoặc GKE (~74 USD), đây là mức tiết kiệm đáng kể.
Kết luận
K3s trên VPS là giải pháp hoàn hảo cho các dự án cần Kubernetes nhưng có budget hạn chế. Với chi phí dưới 50 USD/tháng, bạn có thể vận hành một production-ready cluster đủ mạnh cho hầu hết các ứng dụng web và microservices.
Tuy nhiên, cần lưu ý rằng giải pháp này đòi hỏi kỹ năng vận hành và troubleshooting tốt hơn so với managed Kubernetes services. Bạn sẽ chịu trách nhiệm cho việc backup, security patching, và incident response.
Khuyến nghị: Bắt đầu với setup đơn giản, monitor kỹ performance và resource usage, sau đó scale dần theo nhu cầu thực tế. Đừng over-engineer từ đầu - K3s được thiết kế để đơn giản và hiệu quả.
