Cài đặt MicroK8s trên Ubuntu: Giải pháp Kubernetes ‘nhẹ gánh’ cho Dev và Lab

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

Tại sao nên chọn MicroK8s thay vì K8s truyền thống hay Minikube?

Nếu đã từng “vật lộn” với kubeadm để cài Kubernetes, bạn sẽ hiểu cảm giác phải quản lý hàng tá chứng chỉ TLS và cấu hình mạng phức tạp. Với nhu cầu dựng Lab hoặc Dev trên Ubuntu, chúng ta cần một công cụ nhanh, gọn và không gây “rác” hệ thống. MicroK8s chính là câu trả lời.

Nhiều người thường chọn Minikube theo thói quen. Tuy nhiên, MicroK8s của Canonical mang lại sự đồng bộ tuyệt vời với Ubuntu. Thay vì chạy qua một lớp máy ảo (VM) cồng kềnh, MicroK8s chạy trực tiếp trên host, giúp tiết kiệm khoảng 1-2GB RAM ngay khi khởi động. Mình đã chạy thử cụm này trên một VPS giá rẻ chỉ có 2 vCPU và 4GB RAM; kết quả là hệ thống vẫn phản hồi cực kỳ mượt mà.

Sức mạnh của MicroK8s nằm ở triết lý “Zero-ops”. Mọi thành phần từ Dashboard đến Ingress đều được đóng gói sẵn. Bạn chỉ cần bật chúng lên bằng một câu lệnh duy nhất thay vì phải đi tìm file YAML trên GitHub.

Chuẩn bị môi trường

Bạn cần một máy Ubuntu (hỗ trợ tốt nhất từ bản 20.04 đến 24.04). Về phần cứng, hãy đảm bảo máy có ít nhất 4GB RAM. Nếu chạy dưới mức này, các Pod hệ thống sẽ rất dễ rơi vào trạng thái OOM (Out of Memory) khi bạn triển khai thêm ứng dụng.

Bước 1: Cài đặt qua Snap

MicroK8s được phân phối chính thức qua Snap, giúp việc cập nhật và quản lý phiên bản trở nên cực kỳ đơn giản:

sudo snap install microk8s --classic --channel=1.28/stable

Quá trình này thường mất chưa đầy 2 phút tùy vào tốc độ mạng của bạn.

Bước 2: Cấu hình quyền truy cập

Để không phải gõ sudo mỗi khi thực hiện lệnh, hãy thêm user của bạn vào nhóm quản trị của MicroK8s:

sudo usermod -a -G microk8s $USER
sudo chown -f -R $USER ~/.kube
newgrp microk8s

Lệnh newgrp giúp áp dụng quyền mới ngay lập tức mà không cần khởi động lại máy.

Bước 3: Xác nhận trạng thái

Hãy kiểm tra xem các dịch vụ lõi đã sẵn sàng phục vụ chưa:

microk8s status --wait-ready

Khi màn hình hiển thị “microk8s is running”, cụm K8s node đơn của bạn đã chính thức hoạt động.

Kích hoạt Add-ons: Biến MicroK8s thành cụm K8s thực thụ

Mặc định, MicroK8s chỉ cài đặt những gì tối thiểu nhất để giữ hệ thống nhẹ. Để làm việc thực tế, bạn cần kích hoạt các tính năng bổ trợ.

Các Add-ons không thể thiếu

Mình luôn ưu tiên 4 thành phần sau cho mọi dự án Lab:

  • DNS: Giúp các service nội bộ giao tiếp với nhau qua tên gọi thay vì IP.
  • Storage: Cung cấp khả năng lưu trữ dữ liệu bền vững (Persistent Volume).
  • Ingress: Cổng điều hướng traffic từ bên ngoài vào các dịch vụ bên trong.
  • Dashboard: Giao diện web trực quan để theo dõi tài nguyên.
microk8s enable dns storage ingress dashboard

Mẹo nhỏ: Tạo Alias cho kubectl

Việc gõ microk8s kubectl khá tốn thời gian. Hãy tạo một alias để thao tác chuyên nghiệp hơn:

echo "alias kubectl='microk8s kubectl'" >> ~/.bashrc
source ~/.bashrc

Triển khai thử nghiệm ứng dụng Nginx

Để kiểm chứng hệ thống, chúng ta sẽ chạy một web server Nginx và expose nó ra ngoài qua NodePort.

# Tạo deployment với 2 bản sao
kubectl create deployment web-demo --image=nginx --replicas=2

# Expose port 80 của container ra port ngẫu nhiên trên máy host
kubectl expose deployment web-demo --type=NodePort --port=80

Dùng lệnh kubectl get services để tìm port vừa tạo (thường là dải 3xxxx). Mở trình duyệt và truy cập localhost:3xxxx, bạn sẽ thấy trang chào mừng của Nginx.

Kinh nghiệm “xương máu” khi vận hành

Sau một thời gian dài sử dụng MicroK8s trên Ubuntu, mình rút ra vài lưu ý quan trọng:

  • Xung đột Firewall: Đây là lỗi phổ biến nhất. Nếu các Pod không thể kết nối Internet, hãy kiểm tra UFW. Bạn cần cho phép traffic trên interface cni0 bằng lệnh: sudo ufw allow in on cni0 && sudo ufw allow out on cni0.
  • Dọn dẹp bộ nhớ: Snap thường lưu lại các bản cũ gây tốn ổ cứng. Hãy chạy snap set system refresh.retain=2 để giới hạn số bản lưu trữ, tránh tình trạng đầy disk sau vài tháng.
  • Xử lý khi treo: Nếu bạn dùng Laptop và thường xuyên gập máy (Sleep), MicroK8s có thể bị mất kết nối mạng nội bộ. Cách nhanh nhất là restart lại dịch vụ: microk8s stop && microk8s start.

Triển khai Kubernetes không nhất thiết phải là một quá trình phức tạp. Với MicroK8s, bạn có thể tập trung hoàn toàn vào việc đóng gói ứng dụng thay vì loay hoay với hạ tầng. Chúc các bạn dựng Lab thành công!

Share: