Triển khai Cloud Core và Cloud Hub trên K3s Master
Bước đầu tiên là cài đặt thành phần điều khiển (Cloud Core) và cầu nối (Cloud Hub) vào cụm K3s đã sẵn sàng ở Phần 2. Cloud Core đóng vai trò là API server mở rộng để quản lý các node Edge, trong khi Cloud Hub xử lý định tuyến và kết nối MQTT.
Chúng ta sẽ sử dụng Helm để cài đặt KubeEdge vào namespace kubeedge. Điều này đảm bảo các thành phần chạy tách biệt khỏi workload nghiệp vụ.
sudo kubectl create namespace kubeedge
Namespace kubeedge được tạo thành công, sẵn sàng để chứa các pod của KubeEdge.
Tiếp theo, thêm repository Helm chính thức của KubeEdge và cập nhật source.
helm repo add kubeedge https://kubeedge.github.io/charts
helm repo update
Repository được thêm vào và danh sách chart được cập nhật, sẵn sàng để deploy phiên bản mới nhất.
Triển khai KubeEdge với cấu hình mặc định nhưng chỉ định namespace. Lệnh này sẽ deploy Cloud Core, Cloud Hub và các controller liên quan.
helm install kubeedge kubeedge/kubeedge --namespace kubeedge
Chờ vài giây để Helm deploy các resource. Khi lệnh kết thúc, các pod của Cloud Core và Cloud Hub đang ở trạng thái Running.
Verify Cloud Core và Cloud Hub
Để xác minh thành phần Cloud đã hoạt động, kiểm tra trạng thái của tất cả các pod trong namespace kubeedge.
kubectl get pods -n kubeedge
Đầu ra phải hiển thị các pod như cloudcore, cloudhub và kubeedge-apiserver với trạng thái Running và RESTARTS bằng 0.
Cấu hình KubeEdge để nhận diện thiết bị Edge
Cloud Core cần được cấu hình để chấp nhận kết nối từ các node Edge thông qua giao thức MQTT. Mặc định, Cloud Hub lắng nghe trên port 1883. Chúng ta cần đảm bảo Cloud Core biết cách định tuyến yêu cầu từ các node Edge.
Truy cập vào file cấu hình cloudcore.yaml trong ConfigMap để điều chỉnh các tham số kết nối, đặc biệt là phần modules liên quan đến MQTT và EdgeHub.
kubectl edit cm cloudcore-config -n kubeedge
File cấu hình được mở trong trình soạn thảo (vi). Bạn cần chú ý đến phần modules và đảm bảo mqtt được bật.
Đảm bảo cấu hình trong phần modules có nội dung như sau (nếu bị thiếu, hãy bổ sung):
modules:
cloudHub:
enable: true
mode: "quic" # Hoặc "mqtt" tùy môi trường, mặc định là mqtt
mqttConfig:
listenPort: 1883
enableWebSocket: false
edgeHub:
enable: true
mode: "mqtt"
mqttConfig:
listenPort: 1883
Lưu và thoát trình soạn thảo. Pod cloudcore sẽ tự động reload cấu hình hoặc bạn cần restart pod để áp dụng thay đổi nếu cần thiết.
kubectl rollout restart deployment cloudcore -n kubeedge
Pod Cloud Core được khởi động lại để tải lại cấu hình mới. Trạng thái quay về Running sau vài giây.
Triển khai EdgeCore trên các thiết bị IoT (Worker Nodes)
EdgeCore là agent chạy trên các thiết bị Edge (Worker Nodes). Nó chịu trách nhiệm quản lý container runtime (containerd) và duy trì kết nối với Cloud Hub.
Trên mỗi node IoT (Worker Node), chúng ta cần cài đặt EdgeCore. Giả sử bạn đang SSH vào node Edge này. Đầu tiên, tải script cài đặt tự động từ repository KubeEdge.
curl -s https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/scripts/install.sh | bash -s -- --version=1.12.0
Script sẽ tự động tải các binary cần thiết, tạo systemd service và khởi động EdgeCore. Quá trình này có thể mất vài phút tùy thuộc vào tốc độ mạng.
Để cấu hình EdgeCore kết nối đúng với Cloud Hub của chúng ta, cần chỉnh sửa file cấu hình edgecore.yaml.
sudo nano /etc/edgecore.yaml
Mở file cấu hình và tìm phần modules. Thay đổi hubConfig để trỏ đến IP của K3s Master Node. Đây là bước quan trọng nhất để thiết lập đường truyền.
Giả sử IP của K3s Master là 192.168.1.10. Cập nhật nội dung trong modules.edgeHub.hubConfig:
modules:
edgeHub:
enable: true
mode: "mqtt"
hubConfig:
hubServer: "192.168.1.10"
hubPort: 1883
hubProtocol: "mqtt"
hubMode: "auto"
Lưu file và thoát. Sau đó khởi động lại dịch vụ EdgeCore để áp dụng cấu hình mới.
sudo systemctl restart edgecore
Dịch vụ EdgeCore đã khởi động lại. Nó sẽ bắt đầu cố gắng kết nối với Cloud Hub tại địa chỉ đã cấu hình.
Verify kết nối EdgeCore
Trên node Edge, kiểm tra trạng thái của dịch vụ EdgeCore.
sudo systemctl status edgecore
Trạng thái phải hiển thị active (running). Nếu có lỗi, hãy kiểm tra log.
Kiểm tra log để xem EdgeCore đã handshake thành công với Cloud Hub chưa.
sudo journalctl -u edgecore -f
Bạn sẽ thấy các log ghi nhận việc kết nối MQTT thành công với Cloud Hub và đăng ký node vào hệ thống.
Cấu hình kết nối MQTT giữa Edge và Cloud
Sau khi EdgeCore đã kết nối vật lý với Cloud Hub, chúng ta cần đảm bảo rằng Cloud Core nhận diện được node này như một phần của cụm Kubernetes.
Trên Node Master, KubeEdge sử dụng một controller để lắng nghe các sự kiện từ EdgeCore và ánh xạ chúng vào Kubernetes API. Khi EdgeCore kết nối thành công, nó sẽ gửi thông tin node.
Tuy nhiên, để Edge Core có thể pull image và chạy workload, chúng ta cần cấu hình cloudcore để chấp nhận node này. Trong phiên bản mới, KubeEdge tự động phát hiện node nếu EdgeCore đăng ký đúng.
Để kiểm tra kênh MQTT, chúng ta có thể sử dụng công cụ mosquitto_pub hoặc kiểm tra trực tiếp log của Cloud Hub.
Trên Node Master, xem log của Cloud Hub để xác nhận node Edge đã gửi yêu cầu kết nối.
kubectl logs -n kubeedge deployment/cloudhub -c cloudhub | grep "subscribe" | tail -n 5
Log sẽ hiển thị các thông điệp subscribe từ các topic MQTT tương ứng với node Edge, chứng tỏ đường truyền MQTT đã thông.
Để cấu hình MQTT cho việc điều khiển thiết bị (Device Model), chúng ta cần tạo một file device.yaml để mô tả thiết bị IoT. File này sẽ được áp dụng trên Master Node để EdgeCore biết cách tương tác.
Tạo file cấu hình thiết bị mẫu (ví dụ: cảm biến nhiệt độ) tại thư mục làm việc trên Master Node.
cat > /root/device-sample.yaml
File device-sample.yaml đã được tạo với nội dung hoàn chỉnh, mô tả thiết bị cảm biến nhiệt độ giao tiếp qua MQTT.
Áp dụng cấu hình này vào Kubernetes để Cloud Core phân phối xuống EdgeCore.
kubectl apply -f /root/device-sample.yaml
ConfigMap device-config đã được tạo thành công. EdgeCore sẽ tự động tải xuống và đăng ký thiết bị này.
Xác minh trạng thái kết nối của các node Edge trên Dashboard
Bước cuối cùng là xác nhận node Edge đã được Kubernetes nhận diện chính thức như một Worker Node trong cụm.
Trên Node Master, liệt kê tất cả các node trong cụm K3s/Kubernetes.
kubectl get nodes
Đầu ra sẽ hiển thị K3s Master và Node Edge (với hostname bạn đã đặt). Trạng thái của Node Edge phải là Ready. Nếu thấy NotReady, hãy kiểm tra lại log EdgeCore và firewall.
Kiểm tra chi tiết trạng thái của node Edge để xem các thông số phiên bản và phiên bản kubelet/kubeedge.
kubectl describe node
Thay bằng hostname thực tế của node IoT. Đầu ra sẽ hiển thị thông tin chi tiết về CPU, RAM, điều kiện (Conditions) và các container đang chạy trên node đó.
Để xác minh EdgeCore đã đăng ký thành công các thiết bị (Device), kiểm tra Custom Resource Definition (CRD) của KubeEdge.
kubectl get devices -n default
Lệnh này sẽ liệt kê các thiết bị IoT đã được đăng ký. Bạn sẽ thấy temperature-sensor-01 với trạng thái Online hoặc Offline tùy thuộc vào kết nối MQTT thực tế.
Để xem trạng thái chi tiết của thiết bị, mô tả object device.
kubectl describe devices temperature-sensor-01 -n default
Đầu ra hiển thị thông tin về protocol, các thuộc tính (properties) và các hoạt động (operations) đã được đồng bộ từ Cloud Core xuống EdgeCore. Nếu mọi thứ hiển thị đúng, quá trình cài đặt KubeEdge đã hoàn tất.
Đ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
Phần 4: Xây dựng mạng riêng ảo an toàn với WireGuard »