Cài K3s trên Fedora Server: Build Cluster Kubernetes “ngon – bổ – rẻ” cho Home Lab

Fedora tutorial - IT technology blog
Fedora tutorial - IT technology blog

Tại sao combo K3s và Fedora Server lại đáng thử?

Sau nửa năm vọc vạch K3s trên con Fedora Server cũ đặt ở góc bàn, mình nhận ra một điều: Bạn không cần một dàn server khủng để học Kubernetes. Nếu muốn chạy side-project mà không muốn cúng tiền cho cloud hay nhìn cảnh control plane ngốn sạch RAM, K3s chính là cứu cánh.

K3s là bản rút gọn của Kubernetes do Rancher Labs phát triển. Họ lược bỏ các driver cloud dư thừa, đóng gói mọi thứ vào một file binary duy nhất chưa đầy 100MB. Trong khi K8s nguyên bản ngốn gần 2GB RAM chỉ để “thở”, K3s chỉ cần khoảng 512MB là chạy ổn định.

Về phần Fedora Server, đây là distro mình tin dùng hơn 2 năm qua. Nó cung cấp Kernel mới nhất, hỗ trợ Btrfs cực tốt và có hệ thống SELinux bảo mật rất chặt chẽ. Sự kết hợp giữa một distro hiện đại và một công cụ tối ưu như K3s mang lại trải nghiệm rất mượt mà cho anh em dev.

Chuẩn bị hệ thống

Bạn cần một máy Fedora Server (phiên bản 39 hoặc 40 mới nhất). Hãy đảm bảo máy có ít nhất 1 vCPU và 1GB RAM để hệ thống hoạt động thoải mái nhất.

1. Cập nhật hệ thống

Đừng bao giờ bỏ qua bước này để tránh xung đột package:

sudo dnf update -y

2. Cấu hình Firewall thông minh

Fedora mặc định chặn hầu hết các cổng. Thay vì tắt hẳn firewall (rất thiếu an toàn), chúng ta chỉ mở đúng những gì cần thiết. K3s cần port 6443 cho API Server và một số port cho network plugin:

# Mở port API Server và Kubelet
sudo firewall-cmd --permanent --add-port=6443/tcp 
sudo firewall-cmd --permanent --add-port=10250/tcp

# Mở port cho Flannel VXLAN (mặc định)
sudo firewall-cmd --permanent --add-port=8472/udp

# Áp dụng thay đổi
sudo firewall-cmd --reload

3. Xử lý SELinux đúng cách

Nhiều hướng dẫn thường bảo bạn tắt SELinux, nhưng mình khuyên là không nên. Chúng ta sẽ cài đặt policy để K3s chạy an toàn mà không bị hệ thống chặn lại:

sudo dnf install -y container-selinux selinux-policy-base
sudo dnf install -y https://rpm.rancher.io/k3s/stable/common/centos/7/noarch/k3s-selinux-1.5-1.el7.noarch.rpm

Cài đặt K3s trong một nốt nhạc

Việc cài đặt K3s cực kỳ đơn giản. Bạn chỉ cần thực thi script từ Rancher, nó sẽ tự động nhận diện hệ thống và cấu hình mọi thứ:

curl -sfL https://get.k3s.io | sh -

Chỉ mất khoảng 60 giây để script tải binary và thiết lập systemd service. Sau khi chạy xong, hãy kiểm tra xem cluster đã “sống” chưa:

sudo systemctl status k3s

Nếu bạn thấy trạng thái active (running) màu xanh, chúc mừng, cluster của bạn đã sẵn sàng phục vụ.

Cấu hình quyền truy cập cho User thường

Mặc định file k3s.yaml chỉ root mới đọc được. Để gõ lệnh kubectl bằng user thường mà không cần sudo, bạn thực hiện các lệnh sau:

mkdir ~/.kube
sudo cp /etc/rancher/k3s/k3s.yaml ~/.kube/config
sudo chown $USER:$USER ~/.kube/config
chmod 600 ~/.kube/config
echo "export KUBECONFIG=~/.kube/config" >> ~/.bashrc
source ~/.bashrc

Bây giờ, hãy thử kiểm tra node bằng lệnh: kubectl get nodes. Bạn sẽ thấy node Fedora của mình đang ở trạng thái Ready.

Triển khai thử ứng dụng thực tế

Hãy thử deploy một web server Nginx để kiểm tra khả năng điều phối của cluster. K3s đã tích hợp sẵn Traefik làm Ingress Controller, giúp việc expose ứng dụng ra internet cực kỳ dễ dàng.

Tạo file nginx-demo.yaml với giới hạn tài nguyên cụ thể (best practice):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        resources:
          limits:
            memory: "128Mi"
            cpu: "200m"
        ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-svc
spec:
  selector:
    app: nginx
  ports:
    - port: 80
      targetPort: 80

Triển khai bằng lệnh: kubectl apply -f nginx-demo.yaml. Sau vài giây, bạn sẽ thấy 2 pod Nginx chạy phăm phăm.

Kinh nghiệm thực chiến sau 6 tháng

Quản lý cluster nhỏ cũng cần những mẹo riêng để hệ thống không bị “đơ” giữa chừng:

  • Đừng quên Swap: Fedora Server dùng zRAM. Tuy nhiên, nếu chạy nhiều app, bạn nên tạo thêm 1-2GB swap file trên ổ đĩa để tránh tình trạng Out of Memory (OOM).
  • Dùng K9s: Đây là công cụ cứu cánh cho mình. Thay vì gõ lệnh kubectl dài dòng, K9s cung cấp giao diện terminal trực quan để bạn xem log và quản lý pod nhanh gấp 5 lần.
  • Cập nhật: Khi muốn nâng cấp K3s, bạn chỉ cần chạy lại script cài đặt ban đầu. Hệ thống sẽ tự cập nhật binary mà không làm gián đoạn các ứng dụng đang chạy.

Kết luận

K3s trên Fedora Server là lựa chọn tuyệt vời để cân bằng giữa hiệu năng và tài nguyên. Bạn có một môi trường Kubernetes thực thụ để học tập và triển khai dự án cá nhân với chi phí vận hành gần như bằng không.

Nếu trong quá trình cài đặt bạn gặp lỗi về network hay phân quyền SELinux, hãy để lại comment bên dưới nhé. Mình sẽ cùng anh em gỡ rối!

Share: