云端组件

云端环境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修改

  1. 更改metrics-server的部署模式
  2. 按照文档在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。
  3. 运行完后,在节点上用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命令的功能

参考

Deploying using Keadm | KubeEdge

将 Pod 指派给节点 | Kubernetes

TroubleShooting | KubeEdge

KubeEdge云边隧道Stream源码解析 - 云+社区 - 腾讯云 (tencent.com)

文章目录