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.701883: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.808086: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
