云原生环境中的边缘计算
·
云原生环境中的边缘计算
边缘计算概述
边缘计算是一种分布式计算模型,它将计算和存储资源移到网络的边缘,靠近数据源和用户。在云原生环境中,边缘计算可以与Kubernetes结合,实现更加高效、低延迟的应用部署。本文将介绍云原生环境中的边缘计算最佳实践。
K3s:轻量级Kubernetes
1. K3s简介
K3s是一个轻量级的Kubernetes发行版,专为边缘计算和资源受限环境设计。它的特点包括:
- 体积小(二进制文件小于100MB)
- 内存占用低
- 启动速度快
- 适合在边缘设备上运行
2. 安装K3s
# 安装K3s服务器
curl -sfL https://get.k3s.io | sh -
# 安装K3s代理(边缘节点)
curl -sfL https://get.k3s.io | K3S_URL=https://server-address:6443 K3S_TOKEN=token sh -
3. 配置K3s
# /etc/rancher/k3s/config.yaml
write-kubeconfig-mode: "0644"
tls-san:
- my-k3s-server
node-name: edge-node-1
flannel-backend: vxlan
KubeEdge:边缘计算平台
1. KubeEdge简介
KubeEdge是一个基于Kubernetes的边缘计算平台,它扩展了Kubernetes的能力,使其能够管理边缘设备。KubeEdge的主要特点包括:
- 边缘节点和云节点的双向通信
- 边缘节点的离线操作
- 边缘设备的管理
- 边缘应用的部署和管理
2. 安装KubeEdge
# 安装KubeEdge云组件
kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha2_device.yaml
kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/devices/devices_v1alpha2_devicemodel.yaml
kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/reliablesyncs/cluster_objectsync_v1alpha1.yaml
kubectl apply -f https://raw.githubusercontent.com/kubeedge/kubeedge/master/build/crds/reliablesyncs/objectsync_v1alpha1.yaml
# 安装CloudCore
helm repo add kubeedge https://kubeedge.github.io/helm-charts
helm install cloudcore kubeedge/cloudcore -n kubeedge --create-namespace
# 安装EdgeCore
# 在边缘节点上执行
tar -xzf kubeedge-v1.12.0-linux-amd64.tar.gz
cd kubeedge-v1.12.0-linux-amd64
./keadm join --cloudcore-ipport=cloudcore-address:10000 --token=token
3. 配置KubeEdge
# cloudcore.yaml
apiVersion: cloudcore.config.kubeedge.io/v1alpha1
kind: CloudCore
metadata:
name: cloudcore
namespace: kubeedge
spec:
cloudHub:
advertiseAddress: ["cloudcore-address"]
port: 10000
tlsCAFile: /etc/kubeedge/ca/rootCA.crt
tlsCertFile: /etc/kubeedge/certs/cloudcore.crt
tlsPrivateKeyFile: /etc/kubeedge/certs/cloudcore.key
edgeController:
enable: true
heartbeatDelta: 15s
OpenYurt:边缘原生Kubernetes
1. OpenYurt简介
OpenYurt是阿里巴巴开源的边缘原生Kubernetes平台,它基于Kubernetes,为边缘计算场景提供了增强功能。OpenYurt的主要特点包括:
- 边缘节点的自治能力
- 服务访问的统一入口
- 边缘节点的批量管理
- 边缘应用的部署和管理
2. 安装OpenYurt
# 安装OpenYurt
kubectl apply -f https://openyurt.io/yurtadm-hub.yaml
# 初始化OpenYurt集群
yurtadm init --apiserver-advertise-address=master-address
# 加入边缘节点
yurtadm join master-address:6443 --token=token --node-type=edge
3. 配置OpenYurt
# YurtHub配置
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: yurt-hub
namespace: kube-system
spec:
selector:
matchLabels:
app: yurt-hub
template:
metadata:
labels:
app: yurt-hub
spec:
containers:
- name: yurt-hub
image: openyurt/yurthub:latest
args:
- --server-addr=master-address:6443
- --node-name=$(NODE_NAME)
- --join-token=token
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
边缘工作负载管理
1. 部署边缘应用
apiVersion: apps/v1
kind: Deployment
metadata:
name: edge-app
namespace: default
spec:
replicas: 3
selector:
matchLabels:
app: edge-app
template:
metadata:
labels:
app: edge-app
spec:
nodeSelector:
node-role.kubernetes.io/edge: "true"
containers:
- name: app
image: nginx
resources:
limits:
memory: "128Mi"
cpu: "500m"
requests:
memory: "64Mi"
cpu: "250m"
2. 边缘设备管理
apiVersion: devices.kubeedge.io/v1alpha2
kind: DeviceModel
metadata:
name: temperature-sensor
namespace: default
spec:
properties:
- name: temperature
description: "Temperature in Celsius"
type: "string"
---
apiVersion: devices.kubeedge.io/v1alpha2
kind: Device
metadata:
name: temp-sensor-1
namespace: default
spec:
deviceModelRef:
name: temperature-sensor
nodeName: edge-node-1
status:
twins:
- propertyName: temperature
desired:
metadata: {}
value: ""
reported:
metadata: {}
value: "25"
3. 边缘配置管理
apiVersion: v1
kind: ConfigMap
metadata:
name: edge-config
namespace: default
data:
config.json: |
{
"interval": 10,
"threshold": 30,
"alert": true
}
---
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:
nodeSelector:
node-role.kubernetes.io/edge: "true"
containers:
- name: monitor
image: edge-monitor:latest
volumeMounts:
- name: config
mountPath: /etc/config
volumes:
- name: config
configMap:
name: edge-config
边缘网络管理
1. 边缘网络配置
apiVersion: v1
kind: ConfigMap
metadata:
name: cni-conf
namespace: kube-system
data:
10-flannel.conf: |
{
"name": "cbr0",
"type": "flannel",
"delegate": {
"hairpinMode": true,
"isDefaultGateway": true
}
}
2. 边缘服务暴露
apiVersion: v1
kind: Service
metadata:
name: edge-service
namespace: default
spec:
selector:
app: edge-app
ports:
- port: 80
targetPort: 8080
type: NodePort
边缘存储管理
1. 本地存储配置
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: local-pv
namespace: default
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
storageClassName: local-storage
local:
path: /mnt/data
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- edge-node-1
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: local-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: local-storage
边缘计算最佳实践
- 选择合适的边缘计算平台:根据边缘设备的资源情况选择K3s、KubeEdge或OpenYurt
- 优化资源配置:根据边缘设备的资源限制,合理配置Pod的资源请求和限制
- 实现边缘自治:配置边缘节点的离线运行能力,确保在网络中断时仍能正常工作
- 合理部署应用:将计算密集型任务部署在资源丰富的边缘节点,将轻量级任务部署在资源受限的边缘设备
- 监控边缘节点:实时监控边缘节点的状态和资源使用情况
- 管理边缘设备:使用KubeEdge或OpenYurt的设备管理功能管理边缘设备
- 确保数据安全:实施数据加密和访问控制,保护边缘数据的安全
- 优化网络通信:减少边缘节点和云节点之间的通信,降低网络延迟
实战案例:部署边缘监控系统
1. 架构设计
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Cloud Hub │◄───┤ Edge Node │◄───┤ Edge Device│
└─────────────┘ └─────────────┘ └─────────────┘
▲ │
│ │
▼ ▼
┌─────────────┐ ┌─────────────┐
│ K8s Master │ │ Local │
└─────────────┘ │ Storage │
└─────────────┘
2. 部署步骤
- 安装K3s或KubeEdge:在边缘节点上安装轻量级Kubernetes
- 配置边缘节点:设置边缘节点的资源限制和网络配置
- 部署监控应用:在边缘节点上部署监控应用
- 配置设备连接:连接边缘设备并配置设备模型
- 部署云服务:在云节点上部署数据处理和分析服务
- 配置数据同步:设置边缘节点和云节点之间的数据同步
3. 配置示例
# 边缘监控应用
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:
nodeSelector:
node-role.kubernetes.io/edge: "true"
containers:
- name: monitor
image: edge-monitor:latest
ports:
- containerPort: 8080
volumeMounts:
- name: data
mountPath: /data
volumes:
- name: data
persistentVolumeClaim:
claimName: local-pvc
# 设备配置
---
apiVersion: devices.kubeedge.io/v1alpha2
kind: DeviceModel
metadata:
name: sensor-model
namespace: default
spec:
properties:
- name: temperature
description: "Temperature in Celsius"
type: "string"
- name: humidity
description: "Humidity percentage"
type: "string"
---
apiVersion: devices.kubeedge.io/v1alpha2
kind: Device
metadata:
name: sensor-1
namespace: default
spec:
deviceModelRef:
name: sensor-model
nodeName: edge-node-1
status:
twins:
- propertyName: temperature
desired:
metadata: {}
value: ""
reported:
metadata: {}
value: "25"
- propertyName: humidity
desired:
metadata: {}
value: ""
reported:
metadata: {}
value: "60"
总结
边缘计算是云原生环境中的一个重要领域,它可以将计算和存储资源移到网络的边缘,靠近数据源和用户,从而减少延迟、提高性能。通过K3s、KubeEdge和OpenYurt等工具,我们可以在边缘设备上部署和管理Kubernetes集群,实现边缘计算的自动化和标准化。
在实际部署中,我们需要根据边缘设备的资源情况选择合适的边缘计算平台,并优化资源配置、实现边缘自治、合理部署应用、监控边缘节点、管理边缘设备、确保数据安全和优化网络通信,以构建一个高效、可靠的边缘计算系统。随着边缘计算技术的不断发展,我们可以期待更多专门为边缘计算优化的Kubernetes功能和工具的出现。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)