1. 首页 > Linux教程 > 正文

Linux教程FG558-大规模K8s边缘计算与IoT集成

Part01-基础概念与理论知识

1.1 边缘计算概述

边缘计算是一种将计算、存储和网络资源部署在靠近数据源或用户的网络边缘的计算模式。它可以减少数据传输延迟,提高响应速度,降低带宽成本,学习交流加群风哥微信: itpux-com增强数据安全性。

边缘计算的核心优势包括:

  • 低延迟:数据处理靠近数据源,减少网络传输时间
  • 高带宽:减少数据传输量,降低网络拥塞
  • 数据安全:敏感数据在本地处理,减少数据泄露风险
  • 可靠性:即使在网络中断的情况下,边缘设备仍能正常工作
  • 可扩展性:支持大规模设备接入和管理

1.2 IoT技术基础

物联网(Internet of Things,IoT)是指通过网络连接各种物理设备,实现设备间的通信和数据交换。IoT设备包括传感器、执行器、摄像头、智能设备等。

IoT技术的核心组件包括:

  • 设备层:各种IoT设备,如传感器、执行器等
  • 通信层:设备间的通信协议,如MQTT、CoAP、LoRaWAN等
  • 平台层:IoT平台,用于设备管理、数据处理和应用开发
  • 应用层:基于IoT数据的应用,如智能监控、预测性维护等

1.3 K8s边缘计算解决方案

Kubernetes边缘计算解决方案是将K8s的容器编排能力扩展到边缘设备,实现边缘节点的管理和应用部署。主要的K8s边缘计算项目包括:

  • K3s:Rancher开发的轻量级K8s发行版,专为边缘设备设计
  • MicroK8s:Canonical开发的轻量级K8s发行版,适合边缘和IoT场景
  • OpenYurt:阿里巴巴开发的K8s边缘计算平台
  • EdgeMesh:边缘服务网格解决方案

Part02-生产环境规划与建议

2.1 边缘节点规划

边缘节点规划需要考虑以下因素:

  • 硬件资源:根据边缘设备的计算能力选择合适的K8s发行版
  • 网络连接:考虑边缘节点的网络带宽和稳定性
  • 部署模式:选择集中式管理还是分布式管理
  • 扩展性:考虑未来边缘节点的扩展需求
  • 维护成本:选择易于维护和管理的解决方案

2.2 IoT设备管理

IoT设备管理的关键考虑因素:

  • 设备注册与认证:确保只有授权设备能够接入系统
  • 设备状态监控:实时监控设备的运行状态和健康状况
  • 固件更新:远程更新设备固件,修复安全漏洞和添加新功能
  • 数据采集与处理:高效采集和处理设备产生的数据
  • 设备生命周期管理:管理设备的整个生命周期,从注册到退役

2.3 网络与安全规划

网络规划:

  • 选择合适的通信协议,如MQTT、CoAP、LoRaWAN等
  • 设计可靠的网络拓扑,确保设备间的通信顺畅
  • 考虑网络分区和隔离,提高系统的安全性
  • 实现网络冗余,确保系统的可靠性

安全规划:

  • 实现设备认证和授权机制
  • 加密设备间的通信
  • 学习交流加群风哥QQ113257174

  • 定期更新设备固件,修复安全漏洞
  • 建立安全监控和事件响应机制
  • 实施网络访问控制,限制未授权访问

风哥提示:在边缘计算和IoT场景中,安全是至关重要的,需要采取多层次的安全措施,保护设备、数据和网络。

Part03-生产环境项目实施方案

from PG视频:www.itpux.com

以K3s为例,实施方案如下:

3.1 安装K3s服务器

# 安装K3s服务器
$ curl -sfL https://get.k3s.io | sh –

# 验证K3s安装
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
edge-server Ready control-plane,master 5m v1.28.0+k3s1

# 查看K3s服务状态
$ systemctl status k3s
● k3s.service – Lightweight Kubernetes
Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2026-04-03 10:00:00 CST; 5min ago
Docs: https://k3s.io
Process: 12345 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
Process: 12346 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
Main PID: 12347 (k3s-server)
Tasks: 70 (limit: 4915)
Memory: 256.0M
CPU: 15.0%
CGroup: /system.slice/k3s.service
├─12347 /usr/local/bin/k3s server
└─12348 containerd

3.2 加入边缘节点

# 获取K3s服务器的token
$ cat /var/lib/rancher/k3s/server/node-token
K10384729837465839204837294872938472938472938472938472938472938

# 在边缘节点上安装K3s agent
$ curl -sfL https://get.k3s.io | K3S_URL=https://192.168.1.100:6443 K3S_TOKEN=K10384729837465839204837294872938472938472938472938472938472938 sh –

# 验证边缘节点加入
$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
edge-server Ready control-plane,master 10m v1.28.0+k3s1
edge-node1 Ready 5m v1.28.0+k3s1
edge-node2 Ready 3m v1.28.0+k3s1

3.3 部署IoT应用

# 部署MQTT broker
$ kubectl apply -f – << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: mosquitto namespace: default spec: replicas: 1 selector: matchLabels: app: mosquitto template: metadata: labels: app: mosquitto spec: containers: - name: mosquitto image: eclipse-mosquitto:2.0 ports: - containerPort: 1883 - containerPort: 9001 volumeMounts: - name: mosquitto-config mountPath: /mosquitto/config/mosquitto.conf subPath: mosquitto.conf volumes: - name: mosquitto-config configMap: name: mosquitto-config --- apiVersion: v1 kind: ConfigMap metadata: name: mosquitto-config namespace: default data: mosquitto.conf: | listener 1883 listener 9001 protocol websockets allow_anonymous true --- apiVersion: v1 kind: Service metadata: name: mosquitto namespace: default spec: selector: app: mosquitto ports: - port: 1883 targetPort: 1883 name: mqtt - port: 9001 targetPort: 9001 name: websockets type: NodePort EOF # 部署IoT数据处理服务 $ kubectl apply -f - << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: iot-processor namespace: default spec: replicas: 2 selector: matchLabels: app: iot-processor template: metadata: labels: app: iot-processor spec: containers: - name: iot-processor image: harbor.fgedu.net.cn/library/iot-processor:v1.0.0 ports: - containerPort: 8080 env: - name: MQTT_BROKER value: "mosquitto:1883" - name: DATABASE_URL value: "mongodb://mongodb:27017/iot" resources: requests: cpu: "100m" memory: "256Mi" limits: cpu: "500m" memory: "512Mi" --- apiVersion: v1 kind: Service metadata: name: iot-processor namespace: default spec: selector: app: iot-processor ports: - port: 80 targetPort: 8080 EOF # 部署MongoDB数据库 $ kubectl apply -f - << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: mongodb namespace: default spec: replicas: 1 selector: matchLabels: app: mongodb template: metadata: labels: app: mongodb spec: containers: - name: mongodb image: mongo:5.0 ports: - containerPort: 27017 volumeMounts: - name: mongo-data mountPath: /data/db volumes: - name: mongo-data persistentVolumeClaim: claimName: mongo-pvc --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mongo-pvc namespace: default spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi --- apiVersion: v1 kind: Service metadata: name: mongodb namespace: default spec: selector: app: mongodb ports: - port: 27017 targetPort: 27017 EOF

3.4 配置边缘节点调度

# 为边缘节点添加标签
$ kubectl label node edge-node1 node-type=edge
$ kubectl label node edge-node2 node-type=edge

# 部署边缘应用,指定调度到边缘节点
$ kubectl apply -f – << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: edge-sensor namespace: default spec: replicas: 2 selector: matchLabels: app: edge-sensor template: metadata: labels: app: edge-sensor spec: nodeSelector: node-type: edge containers: - name: edge-sensor image: harbor.fgedu.net.cn/library/edge-sensor:v1.0.0 env: - name: MQTT_BROKER value: "mosquitto:1883" - name: SENSOR_ID valueFrom: fieldRef: fieldPath: metadata.name resources: requests: cpu: "50m" memory: "128Mi" limits: cpu: "200m" memory: "256Mi" EOF

3.更多视频教程www.fgedu.net.cn5 配置网络策略

# 配置网络策略,限制边缘节点的网络访问
$ kubectl apply -f – << 'EOF' apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: edge-node-network-policy namespace: default spec: podSelector: matchLabels: app: edge-sensor policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: app: iot-processor ports: - protocol: TCP port: 8080 egress: - to: - podSelector: matchLabels: app: mosquitto ports: - protocol: TCP port: 1883 EOF

Part04-生产案例与实战讲解

4.1 智能工厂边缘计算案例

某智能工厂的边缘计算实践如下:

  • 边缘节点:部署K3s在工厂的边缘服务器和网关设备上
  • IoT设备:接入传感器、摄像头、PLC等设备
  • 数据处理:在边缘节点实时处理设备数据,减少延迟
  • 应用部署:部署监控、预测性维护、质量检测等应用
  • 云集成:将处理后的数据同步到云端,进行进一步分析

4.2 智能城市IoT解决方案

# 部署智能城市IoT平台
$ kubectl apply -f – << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: smart-city-platform namespace: default spec: replicas: 3 selector: matchLabels: app: smart-city-platform template: metadata: labels: app: smart-city-platform spec: containers: - name: smart-city-platform image: harbor.fgedu.net.cn/library/smart-city-platform:v1.0.0 ports: - containerPort: 8080 env: - name: MQTT_BROKER value: "mosquitto:1883" - name: REDIS_URL value: "redis:6379" - name: POSTGRES_URL value: "postgres://user:password@postgres:5432/smartcity" resources: requests: cpu: "200m" memory: "512Mi" limits: cpu: "1" memory: "1Gi" --- apiVersion: v1 kind: Service metadata: name: smart-city-platform namespace: default spec: selector: app: smart-city-platform ports: - port: 80 targetPort: 8080 type: LoadBalancer EOF # 部署Redis缓存 $ kubectl apply -f - << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: redis namespace: default spec: replicas: 1 selector: matchLabels: app: redis template: metadata: labels: app: redis spec: containers: - name: redis image: redis:7.0 ports: - containerPort: 6379 --- apiVersion: v1 kind: Service metadata: name: redis namespace: default spec: selector: app: redis ports: - port: 6379 targetPort: 6379 EOF # 部署PostgreSQL数据库 $ kubectl apply -f - << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: postgres namespace: default spec: replicas: 1 selector: matchLabels: app: postgres template: metadata: labels: app: postgres spec: containers: - name: postgres image: postgres:14 ports: - containerPort: 5432 env: - name: POSTGRES_USER value: "user" - name: POSTGRES_PASSWORD value: "password" - name: POSTGRES_DB value: "smartcity" volumeMounts: - name: postgres-data mountPath: /var/lib/postgresql/data volumes: - name: postgres-data persistentVolumeClaim: claimName: postgres-pvc --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: postgres-pvc namespace: default spec: accessModes: - ReadWriteOnce resources: requests: storage: 50Gi --- apiVersion: v1 kind: Service metadata: name: postgres namespace: default spec: selector: app: postgres ports: - port: 5432 targetPort: 5432 EOF

4.3 边缘设备监控与管理

# 部署边缘设备监控服务
$ kubectl apply -f – << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: edge-monitor namespace: default spec: replicas: 1 selector: matchLabels: app: edge-monitor template: metadata: labels: app: edge-monitor spec: conta更多学习教程公众号风哥教程itpux_cominers: - name: edge-monitor image: harbor.fgedu.net.cn/library/edge-monitor:v1.0.0 ports: - containerPort: 8080 env: - name: K8S_API_SERVER value: "https://kubernetes.default.svc:443" - name: PROMETHEUS_URL value: "http://prometheus:9090" resources: requests: cpu: "100m" memory: "256Mi" limits: cpu: "500m" memory: "512Mi" --- apiVersion: v1 kind: Service metadata: name: edge-monitor namespace: default spec: selector: app: edge-monitor ports: - port: 80 targetPort: 8080 type: NodePort EOF # 部署Prometheus监控 $ kubectl apply -f - << 'EOF' apiVersion: apps/v1 kind: Deployment metadata: name: prometheus namespace: default spec: replicas: 1 selector: matchLabels: app: prometheus template: metadata: labels: app: prometheus spec: containers: - name: prometheus image: prom/prometheus:v2.40.0 ports: - containerPort: 9090 volumeMounts: - name: prometheus-config mountPath: /etc/prometheus/prometheus.yml subPath: prometheus.yml volumes: - name: prometheus-config configMap: name: prometheus-config --- apiVersion: v1 kind: ConfigMap metadata: name: prometheus-config namespace: default data: prometheus.yml: | global: scrape_interval: 15s scrape_configs: - job_name: 'kubernetes-nodes' kubernetes_sd_configs: - role: node relabel_configs: - source_labels: [__address__] regex: '(.*):10250' replacement: '${1}:9100' target_label: __address__ - job_name: 'kubernetes-pods' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: $1:$2 target_label: __address__ --- apiVersion: v1 kind: Service metadata: name: prometheus namespace: default spec: selector: app: prometheus ports: - port: 9090 targetPort: 9090 EOF # 部署Node Exporter $ kubectl apply -f - << 'EOF' apiVersion: daemonsets.apps/v1 kind: DaemonSet metadata: name: node-exporter namespace: default spec: selector: matchLabels: app: node-exporter template: metadata: labels: app: node-exporter spec: containers: - name: node-exporter image: prom/node-exporter:v1.5.0 ports: - containerPort: 9100 hostPort: 9100 name: metrics hostNetwork: true hostPID: true EOF

4.4 IoT数据采集与分析

#!/bin/bash
# iot_data_collector.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# MQTT broker配置
MQTT_BROKER=”mosquitto:1883″
TOPIC=”sensors/#”

# 数据存储配置
MONGODB_URL=”mongodb://mongodb:27017/iot”
COLLECTION=”sensor_data”

# 启动数据采集
mosquitto_sub -h $MQTT_BROKER -t $TOPIC -v | while read line; do
# 解析MQTT消息
TOPIC=$(echo $line | cut -d’ ‘ -f1)
PAYLOAD=$(echo $line | cut -d’ ‘ -f2-)

# 提取传感器ID和数据
SENSOR_ID=$(echo $TOPIC | cut -d’/’ -f2)
TIMESTAMP=$(date +%s)

# 构造数据文档
DOCUMENT=$(cat << EOF { "sensor_id": "$SENSOR_ID", "topic": "$TOPIC", "payload": $PAYLOAD, "timestamp": $TIMESTAMP } EOF ) # 存储数据到MongoDB mongoimport --uri "$MONGODB_URL" --collection "$COLLECTION" --jsonArray << EOF [$DOCUMENT] EOF # 打印日志 echo "[$(date)] Collected data from sensor $SENSOR_ID: $PAYLOAD" done

from Linux:www.itpux.com。

Part05-风哥经验总结与分享

5.1 边缘计算与IoT集成最佳实践

  • 选择合适的K8s发行版:根据边缘设备的硬件资源选择轻量级K8s发行版,如K3s或MicroK8s
  • 优化边缘节点配置:根据边缘设备的计算能力调整K8s组件的资源配置
  • 实现分层架构:边缘层处理实时数据,云端处理分析和存储
  • 确保网络可靠性:实现网络冗余,确保边缘设备在网络中断时仍能正常工作
  • 加强安全措施:实施设备认证、加密通信、访问控制等安全措施

5.2 常见问题与解决方案

  • 边缘设备资源受限:选择轻量级容器镜像,优化应用资源使用
  • 网络连接不稳定:实现本地缓存和离线操作,网络恢复后同步数据
  • 设备管理复杂:使用设备管理平台,实现设备的集中管理和监控
  • 数据安全风险:加密传输数据,实施访问控制,定期更新设备固件
  • 系统扩展性差:设计模块化架构,支持水平扩展

5.3 性能优化建议

  • 数据处理优化:在边缘节点进行数据预处理,减少数据传输量
  • 网络优化:使用MQTT等轻量级通信协议,减少网络带宽使用
  • 存储优化:使用本地存储缓存数据,定期同步到云端
  • 应用优化:使用容器镜像分层,减少镜像大小,加快部署速度
  • 调度优化:根据边缘节点的资源状况,合理调度应用

5.4 未来发展趋势

  • 5G集成:利用5G网络的低延迟和高带宽,支持更多边缘计算场景
  • AI边缘部署:在边缘节点部署AI模型,实现实时数据处理和分析
  • 边缘云协同:实现边缘和云端的无缝协同,优化资源利用
  • 标准化:边缘计算和IoT的标准将逐渐形成,促进生态系统的发展
  • 行业应用深化:边缘计算和IoT将在智能制造、智能交通、智能城市等领域得到更广泛的应用

风哥提示:边缘计算和IoT集成是未来技术发展的重要方向,需要持续学习和实践,以适应不断变化的业务需求和技术环境。

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息