KubeEdge边缘部署实践
一、KubeEdge概述
KubeEdge是一个将Kubernetes扩展到边缘的开源项目,支持边缘计算场景。
1.1 KubeEdge架构
┌─────────────────────────────────────────────────────────────┐
│ Cloud Side │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ Kubernetes │ │ Cloud Core │ │
│ │ Control Plane │ │ (云端控制) │ │
│ └────────┬────────┘ └────────┬────────┘ │
├───────────┼─────────────────────┼─────────────────────────┤
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 网络连接 │ │
│ │ (WebSocket/QUIC协议) │ │
│ └─────────────────────────────────────────────────┘ │
│ │ │ │
│ ▼ ▼ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Edge Side │ │
│ │ ┌─────────┬─────────┬─────────┐ │ │
│ │ │ Edge │ Edge │ Edge │ │ │
│ │ │ Node 1 │ Node 2 │ Node 3 │ ... │ │
│ │ └─────────┴─────────┴─────────┘ │ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
1.2 KubeEdge组件
| 组件 | 说明 |
|---|---|
| CloudCore | 云端核心组件 |
| EdgeCore | 边缘核心组件 |
| EdgeMesh | 边缘网络 |
| Edged | 边缘代理 |
二、环境准备
2.1 安装CloudCore
bash
# 添加KubeEdge仓库
helm repo add kubeedge https://kubeedge.github.io/kubeedge/charts/
# 安装CloudCore
helm install cloudcore kubeedge/cloudcore \
--namespace kubeedge \
--create-namespace \
--set cloudCore.service.type=NodePort
2.2 安装EdgeCore
bash
# 下载EdgeCore
wget https://github.com/kubeedge/kubeedge/releases/download/v1.14.0/kubeedge-v1.14.0-linux-amd64.tar.gz
tar -xzf kubeedge-v1.14.0-linux-amd64.tar.gz
# 初始化边缘节点
keadm join --cloudcore-ipport=cloudcore-service.kubeedge.svc.cluster.local:10000 \
--edgenode-name=edge-node-01
2.3 配置边缘节点
yaml
apiVersion: v1
kind: Node
metadata:
name: edge-node-01
labels:
node-role.kubernetes.io/edge: ""
node.kubernetes.io/role: edge
spec:
taints:
- key: node-role.kubernetes.io/edge
effect: NoSchedule
三、部署边缘应用
3.1 创建边缘部署
yaml
apiVersion: apps.kubeedge.io/v1alpha1
kind: EdgeDeployment
metadata:
name: edge-app
namespace: default
spec:
template:
spec:
nodeSelector:
node-role.kubernetes.io/edge: ""
containers:
- name: edge-app
image: edge-app:latest
ports:
- containerPort: 8080
resources:
limits:
cpu: "500m"
memory: "512Mi"
requests:
cpu: "100m"
memory: "256Mi"
3.2 配置边缘服务
yaml
apiVersion: v1
kind: Service
metadata:
name: edge-service
namespace: default
spec:
type: NodePort
selector:
app: edge-app
ports:
- port: 80
targetPort: 8080
nodePort: 30000
3.3 边缘配置映射
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: edge-config
namespace: default
data:
config.yaml: |
edge:
node: edge-node-01
resources:
cpu: 1
memory: 1Gi
四、边缘网络
4.1 配置边缘网络
yaml
apiVersion: networking.kubeedge.io/v1alpha1
kind: EdgeNetwork
metadata:
name: edge-network
namespace: default
spec:
type: bridge
config:
bridge:
name: edge0
ipAddress: 192.168.1.1/24
gateway: 192.168.1.254
4.2 边缘DNS配置
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: kubeedge-coredns
namespace: kubeedge
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
五、边缘存储
5.1 本地存储配置
yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: edge-local-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
local:
path: /data/edge-storage
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/hostname
operator: In
values:
- edge-node-01
5.2 存储类配置
yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: edge-local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: WaitForFirstConsumer
六、边缘安全
6.1 证书管理
bash
# 生成证书
keadm cert generate --certpath /etc/kubeedge/certs
# 配置证书
kubectl create secret generic edge-certs \
--from-file=tls.crt=/etc/kubeedge/certs/server.crt \
--from-file=tls.key=/etc/kubeedge/certs/server.key
6.2 网络策略
yaml
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: edge-network-policy
namespace: default
spec:
podSelector:
matchLabels:
app: edge-app
policyTypes:
- Ingress
- Egress
ingress:
- from:
- ipBlock:
cidr: 192.168.1.0/24
ports:
- protocol: TCP
port: 8080
七、监控与日志
7.1 边缘监控
yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: edge-monitor-config
namespace: kubeedge
data:
monitor.yaml: |
metrics:
enable: true
port: 9091
path: /metrics
logs:
enable: true
level: info
7.2 日志收集
bash
# 在边缘节点上配置日志收集
cat > /etc/kubeedge/logging.conf <<EOF
[log]
log_level = "info"
log_file = "/var/log/kubeedge/edged.log"
log_max_size = 100
log_max_backups = 5
log_max_age = 30
EOF
八、故障排除
8.1 查看边缘节点状态
bash
# 查看节点状态
kubectl get nodes -o wide
# 查看边缘节点详情
kubectl describe node edge-node-01
# 查看EdgeCore日志
journalctl -u kubeedge-edgecore -f
8.2 常见问题
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 边缘节点无法连接 | 网络不通 | 检查防火墙和网络配置 |
| Pod无法调度 | Taint配置 | 配置容忍度或移除Taint |
| 存储挂载失败 | 路径不存在 | 在边缘节点上创建路径 |
九、最佳实践
9.1 部署建议
- 资源规划:根据边缘节点资源配置Pod
- 网络隔离:使用NetworkPolicy限制访问
- 数据同步:配置边缘与云端的数据同步策略
9.2 安全建议
- 证书轮换:定期轮换边缘节点证书
- 访问控制:配置RBAC限制边缘节点权限
- 加密传输:使用TLS加密云端与边缘通信
9.3 运维建议
- 监控告警:配置边缘节点监控和告警
- 日志收集:统一收集边缘节点日志
- 远程管理:使用kubectl管理边缘节点
通过合理配置KubeEdge,可以构建高效、安全的边缘计算平台。