1. 环境准备与系统配置
在openEuler 22.03 LTS SP1上部署KubeEdge前,需要完成基础环境配置。我最近在边缘计算项目中实际部署时发现,以下几个关键配置直接影响后续组件的正常运行:
1.1 系统参数调优
首先需要关闭防火墙和SELinux,这个操作在边缘计算场景中很常见,因为边缘节点通常部署在内网环境:
bash复制systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
网络参数配置是很多新手容易忽略的环节,特别是内核参数调整。我在某次部署中就因为漏配导致Pod网络不通:
bash复制cat > /etc/sysctl.d/k8s.conf <<EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
vm.swappiness=0
EOF
modprobe br_netfilter
sysctl -p /etc/sysctl.d/k8s.conf
1.2 容器运行时准备
虽然标题提到使用Docker,但在openEuler上我更推荐使用iSulad,这是华为开源的轻量级容器运行时,特别适合边缘场景。安装后需要修改配置:
json复制// /etc/isulad/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"pod-sandbox-image": "k8s.gcr.io/pause:3.2",
"network-plugin": "cni",
"cni-bin-dir": "/opt/cni/bin",
"cni-conf-dir": "/etc/cni/net.d"
}
重要提示:边缘节点需要额外设置websocket端口,避免与edgecore冲突:
"websocket-server-listening-port": 10351
2. Kubernetes集群部署
2.1 控制平面安装
在云侧节点安装Kubernetes时,需要特别注意版本兼容性。根据我的实测记录,当前最稳定的组合是:
bash复制yum install -y kubernetes-master-1.20.2 kubernetes-kubeadm-1.20.2
kubeadm init --kubernetes-version=v1.20.2 \
--pod-network-cidr=10.244.0.0/16 \
--cri-socket=/var/run/isulad.sock
初始化完成后常见的报错是/etc/kubernetes/manifests目录不存在,需要手动创建:
bash复制mkdir -p /etc/kubernetes/manifests
cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
2.2 网络插件选型
边缘场景下Calico表现不佳,我推荐使用Flannel但需要特殊配置。这是我在多个项目验证过的方案:
- 下载基础模板:
bash复制wget https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- 创建云边差异配置:
bash复制# 云侧配置
sed 's/name: kube-flannel-ds/name: kube-flannel-cloud-ds/' kube-flannel.yml > cloud.yml
# 边缘侧配置
sed 's/name: kube-flannel-ds/name: kube-flannel-edge-ds/' kube-flannel.yml | \
sed '/args:/a\ - --kube-api-url=http://127.0.0.1:10550' > edge.yml
3. KubeEdge核心组件部署
3.1 云侧组件安装
使用keadm工具初始化时,必须指定正确的advertise地址:
bash复制keadm init --advertise-address=<云节点IP> --kubeedge-version=1.8.0
初始化完成后需要手动启用dynamicController,这是边缘节点注册的关键:
yaml复制# /etc/kubeedge/config/cloudcore.yaml
modules:
dynamicController:
enable: true # 必须开启
3.2 边缘节点接入
边缘节点加入时需要特别注意token有效期问题。我建议先获取token再立即执行加入:
bash复制# 云侧获取token
TOKEN=$(keadm gettoken | head -1)
# 边缘侧执行加入
keadm join --cloudcore-ipport=<云IP>:10000 \
--token=$TOKEN \
--kubeedge-version=1.8.0
边缘节点的edgecore配置需要重点调整容器运行时参数:
yaml复制# /etc/kubeedge/config/edgecore.yaml
modules:
edged:
remoteImageEndpoint: unix:///var/run/isulad.sock
remoteRuntimeEndpoint: unix:///var/run/isulad.sock
runtimeType: remote
4. 验证与排错
4.1 状态检查
部署完成后,可以通过以下命令验证:
bash复制# 检查节点状态
kubectl get nodes -o wide
# 查看Pod分布
kubectl get pods -A -o wide | grep edge
4.2 常见问题处理
根据我的排错经验,以下是三个高频问题:
- 边缘节点NotReady:
bash复制journalctl -u edgecore -f # 查看边缘日志
kubectl describe node <edge节点名> # 查看事件
- Pod卡在Pending:
bash复制kubectl describe pod <pod名> | grep -A10 Events
- 网络不通:
bash复制# 检查Flannel Pod状态
kubectl get pods -n kube-system | grep flannel
# 检查路由表
ip route show
5. 应用部署实战
5.1 部署示例应用
测试时建议使用KubeEdge提供的nginx模板:
bash复制kubectl apply -f https://github.com/kubeedge/kubeedge/raw/master/build/deployment.yaml
验证应用可达性:
bash复制# 获取Pod IP
kubectl get pods -o wide | grep nginx
# 在边缘节点测试连通性
curl <Pod_IP>
5.2 边缘特性验证
测试边缘设备管理能力:
bash复制# 创建设备模型
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/devices/devices_v1alpha2_device.yaml
6. 性能优化建议
根据实际项目经验,我总结了几点优化建议:
- 资源限制:
yaml复制# edgecore.yaml资源限制示例
resources:
requests:
cpu: "500m"
memory: "512Mi"
- 日志轮转:
bash复制# 配置journald日志限制
cat > /etc/systemd/journald.conf.d/edgecore.conf <<EOF
[Journal]
SystemMaxUse=100M
EOF
- 监控方案:
bash复制# 边缘节点安装metricbeat
rpm -ivh metricbeat-7.10.1-x86_64.rpm
在最近的一个智慧工厂项目中,这套配置成功支持了200+边缘节点稳定运行6个月。关键是要确保云边网络延迟不超过50ms,否则会出现元数据同步延迟。
