1. 首页 > Kubernetes教程 > 正文

Kubernetes教程FG071-Kubernetes物联网实战解析

目录大纲

Part01-基础概念与理论知识

1.1 物联网与Kubernetes

物联网(IoT)是指通过互联网连接的各种设备,如传感器、摄像头、智能设备等。Kubernetes为物联网提供了以下优势:

  • 弹性伸缩:根据物联网设备的数量和数据量自动调整资源
  • 资源隔离:为不同的物联网应用提供隔离的环境
  • 可扩展性:支持大规模的物联网设备连接和管理
  • 自动化管理:简化物联网服务的部署和管理
  • 多租户支持:支持多个物联网项目共享集群资源

1.2 物联网工作负载类型

  • 设备管理:管理和监控物联网设备
  • 数据采集:从物联网设备收集数据
  • 数据处理:处理和分析物联网数据
  • 数据存储:存储物联网数据
  • 设备通信:处理设备间的通信
  • 设备安全:确保物联网设备的安全

1.3 物联网协议

常用的物联网协议包括:

  • MQTT:轻量级消息传输协议
  • CoAP:约束应用协议
  • AMQP:高级消息队列协议
  • HTTP/HTTPS:超文本传输协议
  • WebSocket:双向通信协议
  • LoRaWAN:低功耗广域网络协议

1.4 Kubernetes物联网工具

用于在Kubernetes上运行物联网工作负载的工具包括:

  • OpenYurt:阿里巴巴开源的边缘计算平台,用于在Kubernetes上管理边缘设备
  • K3s: Rancher开源的轻量级Kubernetes发行版,适合边缘设备
  • EdgeX Foundry:开源的边缘计算平台,用于物联网设备管理
  • EMQ X:开源的MQTT消息服务器,用于物联网设备通信
  • InfluxDB:时序数据库,用于存储物联网数据

Part02-生产环境规划与建议

2.1 物联网应用场景

物联网在Kubernetes上的应用场景包括:

  • 智能城市:交通管理、环境监测、公共安全
  • 工业物联网:设备监控、预测性维护、生产优化
  • 智能家居:智能设备控制、能源管理、安全监控
  • 智能农业:土壤监测、灌溉控制、作物管理
  • 智能医疗:远程监测、医疗设备管理、健康数据分析
  • 物流与供应链:资产追踪、库存管理、运输优化

2.2 资源规划

在规划物联网资源时,需要考虑以下因素:

  • 计算资源:CPU和内存资源,特别是对于数据处理
  • 存储资源:物联网数据的存储
  • 网络资源:设备连接和数据传输的网络带宽
  • 边缘资源:边缘设备的计算和存储资源
  • 安全资源:设备认证和数据加密的资源

2.3 部署策略

在部署物联网工作负载时,有以下部署策略。,风哥提示:。。。

  • 云端部署:在云Kubernetes集群中部署物联网服务
  • 边缘部署:在边缘Kubernetes集群中部署物联网服务
  • 混合部署:结合云端和边缘部署
  • 分层部署:根据数据处理需求分层部署服务

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

3.1 安装OpenYurt

3.1.1 安装OpenYurt

# 克隆OpenYurt仓库
git clone https://github.com/openyurtio/openyurt.git
# 进入openyurt目录
cd openyurt,风哥提示:。
# 安装OpenYurt
yurtctl init --apiserver-advertise-address=192.168.1.100

执行 →

I0510 10:00:00.000000   12345 init.go:100] Start to initialize the OpenYurt cluster...
I0510 10:00:01.000000   12345 init.go:150] Create yurt-controller-manager deployment
I0510 10:00:02.000000   12345 init.go:200] Create yurt-hub daemonset
I0510 10:00:03.000000   12345 init.go:250] Create yurt-tunnel-server deployment
I0510 10:00:04.000000   12345 init.go:300] Create yurt-tunnel-agent daemonset
I0510 10:00:05.000000   12345 init.go:350] OpenYurt cluster initialized successfully

3.2 安装K3s

3.2.1 安装K3s

# 安装K3s服务器
curl -sfL https://get.k3s.io | sh -
# 查看K3s状态
systemctl status k3s

执行 →

[INFO]  Finding release for channel stable
[INFO]  Using v1.24.3+k3s1 as release
[INFO]  Downloading hash https://github.com/k3s-io/k3s/releases/download/v1.24.3+k3s1/sha256sum-amd64.txt
[INFO]  Downloading binary https://github.com/k3s-io/k3s/releases/download/v1.24.3+k3s1/k3s
[INFO]  Verifying binary download
[INFO]  Installing k3s to /usr/local/bin/k3s
[INFO]  Creating /usr/local/bin/kubectl symlink to k3s
[INFO]  Creating /usr/local/bin/crictl symlink to k3s
[INFO]  Creating /usr/local/bin/ctr symlink to k3s
[INFO]  Creating service file /etc/systemd/system/k3s.service
[INFO]  Enabling k3s unit
Created symlink /etc/systemd/system/multi-user.target.wants/k3s.service → /etc/systemd/system/k3s.service.
[INFO]  Starting k3s service
● k3s.service - Lightweight Kubernetes
   Loaded: loaded (/etc/systemd/system/k3s.service; enabled; vendor preset: enabled)
   Active: active (running) since Thu 2023-11-02 10:00:00 UTC; 1min ago
     Docs: https://k3s.io
  Process: 12345 ExecStartPre=/bin/sh -xc ! /usr/bin/systemctl is-enabled --quiet nm-cloud-setup.service (code=exited, status=0/SUCCESS)
  Process: 12346 ExecStartPre=/sbin/modprobe br_netfilter (code=exited, status=0/SUCCESS)
  Process: 12347 ExecStartPre=/sbin/modprobe overlay (code=exited, status=0/SUCCESS)
 Main PID: 12348 (k3s-server)
    Tasks: 70
   Memory: 150.0M
   CPU: 5.0%
   CGroup: /system.slice/k3s.service
           ├─12348 /usr/local/bin/k3s server
           └─12349 containerd

3.3 配置存储

3.3.1 创建PersistentVolume

apiVersion: v1
kind: PersistentVolume
metadata:
  name: fgedu-iot-pv
  labels:
    type: local
spec:
  storageClassName: manual
  capacity:
    storage: 100Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/Kubernetes/fgdata/iot"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: fgedu-iot-pvc
  namespace: iot
spec:,学习交流加群风哥微信: itpux-com。
  storageClassName: manual
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 100Gi

3.3.2 部署存储

# 部署存储
kubectl apply -f iot-storage.yaml
# 查看存储状态
kubectl get pv,pvc -n iot

执行 →

persistentvolume/fgedu-iot-pv created
persistentvolumeclaim/fgedu-iot-pvc created
NAME                      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                   STORAGECLASS   REASON   AGE
persistentvolume/fgedu-iot-pv   100Gi      RWO            Retain           Bound    iot/fgedu-iot-pvc   manual                  5m
NAME                             STATUS   VOLUME         CAPACITY   ACCESS MODES   STORAGECLASS   AGE
persistentvolumeclaim/fgedu-iot-pvc   Bound    fgedu-iot-pv   100Gi      RWO            manual         5m

Part04-生产案例与实战讲解

4.1 实战案例:部署MQTT服务器

4.1.1 创建MQTT服务器

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fgedu-mqtt
  namespace: iot
spec:
  replicas: 1
  selector:
    matchLabels:
      app: fgedu-mqtt
  template:
    metadata:
      labels:
        app: fgedu-mqtt
    spec:
      containers:
      - name: emqx
        image: emqx/emqx:latest
        ports:
        - containerPort: 1883
        - containerPort: 8883
        - containerPort: 8083
        - containerPort: 18083
        volumeMounts:
        - name: fgedu-iot-storage
          mountPath: /opt/emqx/data
        resources:
          limits:
            cpu: 2
            memory: 4Gi
          requests:
            cpu: 1
            memory: 2Gi
      volumes:
      - name: fgedu-iot-storage
        persistentVolumeClaim:
          claimName: fgedu-iot-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: fgedu-mqtt-service
  namespace: iot,学习交流加群风哥QQ113257174。
spec:
  selector:
    app: fgedu-mqtt
  ports:
  - port: 1883
    targetPort: 1883
  - port: 8883
    targetPort: 8883
  - port: 8083
    targetPort: 8083
  - port: 18083
    targetPort: 18083
  type: NodePort

4.1.2 部署MQTT服务器

# 部署MQTT服务器
kubectl apply -f mqtt-deployment.yaml
# 查看部署状态
kubectl get deployment,service -n iot

执行 →

deployment.apps/fgedu-mqtt created
service/fgedu-mqtt-service created
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/fgedu-mqtt         1/1     1            1           5m
NAME                         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                                        AGE
service/fgedu-mqtt-service   NodePort   10.100.200.70           1883:32400/TCP,8883:32401/TCP,8083:32402/TCP,18083:32403/TCP   5m

4.2 实战案例:部署InfluxDB和Grafana

4.2.1 创建InfluxDB和Grafana

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fgedu-influxdb
  namespace: iot
spec:
  replicas: 1
  selector:
    matchLabels:
      app: fgedu-influxdb
  template:
    metadata:
      labels:
        app: fgedu-influxdb
    spec:
      containers:
      - name: influxdb
        image: influxdb:latest
        ports:
        - containerPort: 8086
        volumeMounts:
        - name: fgedu-iot-storage
          mountPath: /var/lib/influxdb
        resources:
          limits:
            cpu: 2
            memory: 4Gi
          requests:
            cpu: 1
            memory: 2Gi
      volumes:
      - name: fgedu-iot-storage
        persistentVolumeClaim:
          claimName: fgedu-iot-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: fgedu-influxdb-service,更多视频教程www.fgedu.net.cn。
  namespace: iot
spec:
  selector:
    app: fgedu-influxdb
  ports:
  - port: 8086
    targetPort: 8086
  type: NodePort
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: fgedu-grafana
  namespace: iot
spec:
  replicas: 1
  selector:
    matchLabels:
      app: fgedu-grafana
  template:
    metadata:
      labels:
        app: fgedu-grafana
    spec:
      containers:
      - name: grafana
        image: grafana/grafana:latest
        ports:
        - containerPort: 3000
        volumeMounts:
        - name: fgedu-iot-storage
          mountPath: /var/lib/grafana
        resources:
          limits:
            cpu: 2
            memory: 4Gi
          requests:
            cpu: 1
            memory: 2Gi
      volumes:
      - name: fgedu-iot-storage
        persistentVolumeClaim:
          claimName: fgedu-iot-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: fgedu-grafana-service
  namespace: iot
spec:
  selector:
    app: fgedu-grafana
  ports:
  - port: 3000
    targetPort: 3000
  type: NodePort

4.2.2 部署InfluxDB和Grafana

# 部署InfluxDB和Grafana
kubectl apply -f influxdb-grafana-deployment.yaml
# 查看部署状态
kubectl get deployment,service -n iot

执行 →

deployment.apps/fgedu-influxdb created
service/fgedu-influxdb-service created
deployment.apps/fgedu-grafana created
service/fgedu-grafana-service created
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/fgedu-influxdb     1/1     1            1           5m
deployment.apps/fgedu-grafana      1/1     1            1           5m
NAME                         TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)          AGE
service/fgedu-influxdb-service   NodePort   10.100.200.80           8086:32500/TCP   5m,更多学习教程公众号风哥教程itpux_com。
service/fgedu-grafana-service    NodePort   10.100.200.90           3000:32501/TCP   5m

4.3 实战案例:部署物联网数据处理服务

4.3.1 创建物联网数据处理服务

apiVersion: apps/v1
kind: Deployment
metadata:
  name: fgedu-iot-processor
  namespace: iot
spec:
  replicas: 1
  selector:
    matchLabels:
      app: fgedu-iot-processor
  template:
    metadata:
      labels:
        app: fgedu-iot-processor
    spec:
      containers:
      - name: iot-processor
        image: python:3.9
        command:
        - python
        - -c
        - |
          import paho.mqtt.client as mqtt
          import influxdb_client
          from influxdb_client import InfluxDBClient, Point, WritePrecision
          from influxdb_client.client.write_api import SYNCHRONOUS
          import json
          import time
          # MQTT配置
          mqtt_broker = "fgedu-mqtt-service.iot"
          mqtt_port = 1883
          mqtt_topic = "fgedu/iot/sensors"
          # InfluxDB配置
          influxdb_url = "http://fgedu-influxdb-service.iot:8086"
          influxdb_token = "your-token"
          influxdb_org = "fgedu"
          influxdb_bucket = "iot_data"
          # 连接InfluxDB
          client = InfluxDBClient(url=influxdb_url, token=influxdb_token, org=influxdb_org)
          write_api = client.write_api(write_options=SYNCHRONOUS)
          # MQTT回调函数
          def on_message(client, userdata, msg):
              try:
                  # 解析消息
                  data = json.loads(msg.payload.decode())
                  print(f"Received data: {data}")
                  # 写入InfluxDB
                  point = Point("sensor_data")\n                      .tag("device_id", data["device_id"])\n                      .field("temperature", data["temperature"])\n                      .field("humidity", data["humidity"])\n                      .field("pressure", data["pressure"])\n                      .time(time.time(), WritePrecision.S)
                  write_api.write(bucket=influxdb_bucket, org=influxdb_org, record=point)
                  print("Data written to InfluxDB")
              except Exception as e:
                  print(f"Error: {e}")
          # 连接MQTT
          mqtt_client = mqtt.Client()
          mqtt_client.on_message = on_message
          mqtt_client.connect(mqtt_broker, mqtt_port, 60)
          mqtt_client.subscribe(mqtt_topic)
          # 保持运行
          mqtt_client.loop_forever()
        resources:
          limits:
            cpu: 1
            memory: 2Gi
          requests:
            cpu: 500m
            memory: 1Gi

,from K8S+DB视频:www.itpux.com。

4.3.2 部署物联网数据处理服务

# 部署物联网数据处理服务
kubectl apply -f iot-processor-deployment.yaml
# 查看部署状态
kubectl get deployment -n iot

执行 →

deployment.apps/fgedu-iot-processor created
NAME                               READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/fgedu-iot-processor   1/1     1            1           5m

Part05-风哥经验总结与分享

5.1 物联网最佳实践

  • 设备管理:使用边缘计算平台管理物联网设备,减少延迟
  • 数据处理:在边缘处理数据,只将重要数据传输到云端
  • 安全管理:实施设备认证和数据加密,确保物联网设备的安全
  • 监控和日志:为物联网服务配置监控和日志,便于故障排查
  • 自动化:使用CI/CD流程自动化物联网服务的部署和管理

5.2 生产环境建议

  • 资源配置:根据物联网设备的数量和数据量,配置适当的资源
  • 网络配置:确保物联网设备的网络连接稳定,减少网络延迟
  • 存储配置:使用时序数据库存储物联网数据,提高数据查询效率
  • 安全配置:实施设备认证、数据加密和访问控制,保护物联网系统
  • 备份和恢复:为物联网数据设置备份策略,防止数据丢失

5.3 常见问题与解决方案

  • 设备连接不稳定:优化网络连接,使用可靠的通信协议
  • 数据处理延迟:在边缘处理数据,减少数据传输时间
  • 资源不足:合理规划资源,使用资源配额和限制
  • 安全漏洞:定期更新设备固件和软件,应用安全补丁
  • 数据存储成本高:使用数据压缩和分层存储,降低存储成本

5.4 性能优化建议

  • 边缘计算:在边缘处理数据,减少云端负载
  • 数据压缩:压缩物联网数据,减少传输和存储成本
  • 批处理:批量处理物联网数据,减少处理次数
  • 缓存策略:使用缓存减少重复数据处理,提高响应速度
  • 负载均衡:使用负载均衡器,分散物联网服务的负载

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

联系我们

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

微信号:itpux-com

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