1. Xác định yêu cầu cấu hình phần cứng tối thiểu
Để hệ thống Edge Computing hoạt động ổn định với K3s, KubeEdge và WireGuard, bạn cần phân bổ tài nguyên rõ ràng cho từng vai trò node.
Node Master (Cloud/Hub): Yêu cầu tối thiểu 2 vCPU, 4GB RAM, 50GB SSD. Node này sẽ chạy API Server, Controller Manager, Scheduler và các service quản lý mạng.
Node Worker (Edge Device): Yêu cầu tối thiểu 1 vCPU, 2GB RAM, 32GB SSD. Node này chạy Kubelet, Container Runtime (containerd) và Edge Core. Đối với Raspberry Pi 4/5, cần 4GB RAM trở lên để chạy mượt mà.
Để kiểm tra tài nguyên hiện có trên máy chủ hoặc máy ảo của bạn, chạy lệnh sau để xem CPU, RAM và Disk:
cat /proc/cpuinfo | grep "model name" | wc -l && free -h && df -h /
Kết quả mong đợi: Bạn sẽ thấy số lượng core CPU, tổng dung lượng RAM (ví dụ: 7.8G total) và dung lượng trống của ổ đĩa (ví dụ: 45G available). Nếu RAM dưới 2GB cho Node Worker, K3s sẽ khởi động rất chậm hoặc lỗi OOM (Out Of Memory).
2. Chuẩn bị và cài đặt Hệ điều hành (OS)
2.1. Lựa chọn và cài đặt Ubuntu Server 22.04 LTS
Ubuntu Server 22.04 LTS là lựa chọn tối ưu cho Node Master do cộng đồng hỗ trợ rộng rãi và tính tương thích cao với K3s. Đối với Raspberry Pi, hãy dùng Raspberry Pi OS 64-bit (Base image) hoặc Ubuntu Server for ARM64.
Cài đặt OS qua ISO hoặc SD Card. Trong quá trình cài đặt, đảm bảo bật SSH Server ngay từ đầu và cấu hình hostname theo quy ước: "k3s-master" cho node chính và "k3s-edge-01" cho node biên.
Sau khi cài đặt xong, cập nhật toàn bộ gói hệ thống để tránh xung đột phiên bản kernel:
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y
Kết quả mong đợi: Quá trình cập nhật chạy hoàn tất mà không có lỗi "failed to fetch" hoặc "unmet dependencies". Phiên bản kernel mới nhất được cài đặt sẵn.
2.2. Cấu hình Hostname và Network Static IP
Cần đặt địa chỉ IP tĩnh (Static IP) để đảm bảo Node Master và Node Worker luôn liên lạc được với nhau qua mạng LAN mà không bị thay đổi IP sau khi restart.
Trên Ubuntu 22.04, Netplan là công cụ cấu hình mạng mặc định. Chỉnh sửa file cấu hình mạng tại /etc/netplan/50-cloud-init.yaml (hoặc file .yaml khác có trong thư mục này).
Tạo nội dung file cấu hình mạng cho Node Master (ví dụ IP 192.168.1.10) như sau:
network:
version: 2
ethernets:
ens33:
addresses:
- 192.168.1.10/24
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8, 1.1.1.1]
dhcp4: false
Lưu ý: Thay "ens33" bằng tên interface thực tế của bạn (kiểm tra bằng lệnh `ip link`). Sau đó áp dụng cấu hình:
sudo netplan apply
Kết quả mong đợi: Lệnh `ip addr` trả về địa chỉ IP 192.168.1.10 cho interface ens33. Ping từ node khác đến IP này thành công.
3. Cài đặt các công cụ nền tảng
3.1. Cài đặt Docker Engine và Containerd
Mặc dù K3s mặc định sử dụng containerd, việc cài đặt Docker Engine giúp bạn debug và chạy các container đơn lẻ trước khi đưa vào Kubernetes. K3s sẽ tự quản lý containerd riêng, nhưng Docker CLI vẫn hữu ích.
Cài đặt Docker Engine phiên bản ổn định nhất:
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io -y
Khởi động lại dịch vụ Docker và kiểm tra trạng thái:
sudo systemctl enable docker && sudo systemctl start docker
docker version
Kết quả mong đợi: Client và Server version hiển thị cùng phiên bản (ví dụ: 24.0.x), không có lỗi kết nối socket.
3.2. Cài đặt kubectl (Kubernetes CLI)
kubectl là công cụ để tương tác với API Server của K3s. Cần cài đặt phiên bản tương thích với K3s sẽ được cài đặt ở phần sau.
Thêm repository Kubernetes và cài đặt kubectl:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/$(dpkg --print-architecture)/kubectl"
chmod +x kubectl && sudo mv kubectl /usr/local/bin/
kubectl version --client
Kết quả mong đợi: Lệnh trả về phiên bản client kubectl (ví dụ: v1.28.x) mà không báo lỗi "command not found".
3.3. Cài đặt Git và WireGuard
Git cần thiết để clone mã nguồn dự án và script tự động hóa. WireGuard là kernel module cần được cài đặt để tạo VPN tunnel giữa Cloud và Edge.
Cài đặt cả hai gói cùng lúc:
sudo apt install git wireguard -y
Kiểm tra module WireGuard đã được tải vào kernel chưa:
lsmod | grep wireguard
Kết quả mong đợi: Dòng đầu tiên hiển thị "wireguard" cùng với kích thước module (ví dụ: 135168). Nếu không có, chạy `sudo modprobe wireguard` để tải thủ công.
4. Cấu hình mạng LAN và SSH bảo mật
4.1. Cấu hình SSH Key-based Authentication
Để bảo mật truy cập, tuyệt đối không dùng password SSH. Cần tạo cặp khóa (keypair) và cấu hình SSH Server chỉ chấp nhận khóa công khai.
Tạo khóa SSH mới trên Node Master (nếu chưa có):
ssh-keygen -t ed25519 -C "k3s-master-key" -N "" -f ~/.ssh/id_ed25519_k3s
Sao chép khóa công khai sang Node Worker (Edge):
ssh-copy-id -i ~/.ssh/id_ed25519_k3s.pub k3s-edge-01
Chỉnh sửa file cấu hình SSH Server trên Node Worker (/etc/ssh/sshd_config) để tắt đăng nhập bằng mật khẩu:
sudo nano /etc/ssh/sshd_config
Trong file, tìm và sửa các dòng sau (bỏ comment # nếu cần):
PermitRootLogin prohibit-password
PasswordAuthentication no
PubkeyAuthentication yes
Khởi động lại dịch vụ SSH để áp dụng:
sudo systemctl restart sshd
Kết quả mong đợi: Bạn vẫn đăng nhập được vào Node Worker bằng `ssh k3s-edge-01` mà không cần nhập password. Nếu thử đăng nhập bằng password, hệ thống sẽ từ chối.
4.2. Mở cổng cần thiết cho K3s và WireGuard
K3s cần các cổng UDP và TCP để hoạt động. WireGuard cần cổng UDP để thiết lập tunnel. Cần mở các cổng này trên firewall (ufw).
Cấu hình UFW để cho phép SSH (22), K3s (6443 TCP, 10250 TCP, 8472 UDP cho CNI) và WireGuard (51820 UDP):
sudo ufw allow 22/tcp
sudo ufw allow 6443/tcp
sudo ufw allow 10250/tcp
sudo ufw allow 8472/udp
sudo ufw allow 51820/udp
sudo ufw allow from 192.168.1.0/24 to any
sudo ufw enable
Kiểm tra trạng thái firewall:
sudo ufw status verbose
Kết quả mong đợi: Status là "active". Các cổng 22, 6443, 10250, 8472, 51820 hiển thị trạng thái "ALLOW".
5. Kiểm tra khả năng tương thích phần cứng với K3s và KubeEdge
Trước khi cài đặt K3s, cần đảm bảo kernel hỗ trợ các tính năng cần thiết như overlay network, cgroup v2, và module wireguard.
Kiểm tra xem kernel có hỗ trợ module overlay (cần cho CNI) và br_netfilter (cần cho bridge networking) không:
lsmod | grep -E "overlay|br_netfilter"
Nếu thiếu module, cài đặt và tải chúng:
sudo modprobe br_netfilter
sudo modprobe overlay
sudo echo "br_netfilter" >> /etc/modules-load.d/k3s.conf
sudo echo "overlay" >> /etc/modules-load.d/k3s.conf
Để K3s hoạt động tốt, cần bật IP forwarding trong kernel. Chỉnh sửa file /etc/sysctl.conf hoặc tạo file mới:
cat
Áp dụng thay đổi ngay lập tức:
sudo sysctl --system
Kiểm tra xem IP forwarding đã bật chưa:
sysctl net.ipv4.ip_forward
Kết quả mong đợi: Lệnh trả về `net.ipv4.ip_forward = 1`. Nếu bằng 0, K3s sẽ không thể định tuyến lưu lượng giữa các pod.
Đối với Raspberry Pi hoặc thiết bị Edge yếu, kiểm tra xem kiến trúc ARM64 có được hỗ trợ bởi K3s không. K3s hỗ trợ ARM64 đầy đủ. Kiểm tra kiến trúc của máy:
uname -m
Kết quả mong đợi: Trả về "aarch64" (cho ARM64) hoặc "x86_64" (cho x64). Nếu là "armv7l" (ARM 32-bit), K3s có thể không hoạt động tốt, cần nâng cấp lên OS 64-bit.
Thực hiện lệnh kiểm tra tổng hợp trước khi vào phần 2:
echo "=== System Check ===" && echo "CPU: $(nproc)" && echo "RAM: $(free -h | awk '/^Mem:/ {print $2}')" && echo "Disk: $(df -h / | awk 'NR==2 {print $4}')" && echo "Kernel: $(uname -r)" && echo "WireGuard Module: $(lsmod | grep wireguard)" && echo "IP Forward: $(sysctl net.ipv4.ip_forward | awk '{print $3}')" && echo "Architecture: $(uname -m)"
Kết quả mong đợi: Tất cả các chỉ số đều nằm trong yêu cầu tối thiểu đã nêu ở mục 1, và IP Forward là 1. Môi trường đã sẵn sàng cho việc triển khai K3s.
Điều hướng series:
Mục lục: Series: Xây dựng nền tảng Edge Computing an toàn với K3s, KubeEdge và WireGuard cho IoT
Phần 2: Triển khai cụm K3s siêu nhẹ trên Node Master »