kubeedge-部署篇
云端组件
云端环境kubernetes 1.21.6
直接使用helm chart部署cloudcore即可
需要注意证书的ip和域名配置。如果首次部署出现了问题,需要手动删除kubeedge命名空间下的secret以重新生成证书。
对于边缘节点和中心节点使用域名连接的情况,原本helm chart未暴露相关配置,我已经做了修改并提交了PR。
cloudcore正常启动后,keadm gettoken
获取token
边缘组件
keadm join --cloudcore-ipport=$ip:port --token=$token
在我的树莓派4+ubuntu20上,会报错提示Cgroup subsystem not mounted: [memory]
,可依照https://github.com/kubeedge/kubeedge/issues/1613#issuecomment-623289518解决。
处理daemonset
对所有不需要出现在边缘节点的daemonset,为其增加节点亲和性
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: node-role.kubernetes.io/edge
operator: DoesNotExist
注意,对于已经存在node亲和性的daemonset,修改时要注意多个亲和性条件的交集并集问题
为边缘节点增加污点
kubeedge会将边缘节点作为普通节点加入到集群中,如果边缘节点真的远在边缘,网络结构等和中心云相差甚远,本该运行在中心云的pod被调度到边缘节点上会无法正常运行。因此为边缘节点加污点,只有能容忍该污点的pod才往边缘节点调度。
k taint node ubuntu edge=true:NoSchedule
启用kubectl logs/exec功能
按照文档操作即可。但是这里官方文档对于cloudcore用helm部署在k8s里的情况下,过程中需要用到的脚本ip/域名的配置是和部署在集群外不一样的,此处我已经提交PR对文档进行优化
metrics server修改
- 更改metrics-server的部署模式
- 按照文档在metrics-server所在节点执行iptables相关命令转发请求,文档中的端口号有误。实际指定的命令为:
iptables -t nat -A OUTPUT -p tcp --dport 10351 -j DNAT --to 10.233.60.252:10003
。其中10.233.60.252为cloudcore的service ip。 - 运行完后,在节点上用
curl -k https://192.168.0.2:10351/stats/summary?only_cpu_and_memory=true
即可立即测试效果。其中192.168.0.2为边缘节点的ip。
排障
- 注意:如果pod跑在边缘节点,但是卡在pending状态,可以检查一下镜像:边缘设备如果是树莓派,架构是arm64的,所以镜像也要用arm64的
调度pod验证安装
在docker hub可以看到nginx支持arm64架构,可以运行在边缘侧作为测试
在deployment的yaml中增加节点选择器和节点容忍,即可指定到边缘节点
nodeSelector:
node-role.kubernetes.io/edge: ''
tolerations:
- key: edge
value: 'true'
effect: NoSchedule
pod running后,即可对边缘侧的pod测试kubectl logs/exec/top命令的功能
参考
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。